文件目錄屬性
Linux中的文件或目錄,都有一個 所有者owner 和 所屬組group;
所有者是指文件的擁有者,所屬組是指這個文件屬於哪一個用戶組(一個用戶組下面會有若干個用戶);
假設:t0文件的所有者為owner0,t1的所有者為owner1,owner1有可能不能查看t0,owner0也有可能不能查看t1(之所以說可能,是因為owner0和owner1有可能屬於同一個用戶組,而恰好這個用戶組對這兩個文件都有查看權限)
需求:使一個文件能同時被owner0和owner1查看時;“所屬組”就派上用場了。
先創建一個組owners,讓owner0和owner1同屬於這個組,然后建立一個文件test2,且其所屬組為owners,這樣owner0和owner1就都可以訪問test2文件。
上圖中,一共9列(用空格划分列)
第1列
第1位:文件的類型,d 表示目錄,- 表示普通文件,l 表示鏈接
第2~位:每3位為一組,每組按順序表示:所有者、所屬組、其他非本用戶組的權限,其中,r讀、w寫、x執行、-無權限;
最后一位:“.”,老版本CentOS 5是沒有這個點的,這主要是因為新版本的ls命令添加了SELinux或者acl的屬性。如果文件或者目錄使用了SELinux context的屬性,這里會是一個點“.”;如果使用了acl的屬性,這里會是一個加號“+”。
第2列
文件占用的節點(inode),如果是目錄,這個數值與該目錄下得子目錄數量有關
第3列
文件所有者
第4列
文件所屬組
第5列
文件的大小
第6、7、8列
文件最后修改事件(mtime),按月、日以及具體時間
第9列
文件名
命令chgrp
change group 的縮寫,更改 文件或目錄 的 所屬組
格式:
chgrp [組名] [文件名]
groupadd newgroup1 添加一個newgroup1用戶組 touch test1 ls -l test1 -rw-r--r-- 1 root root 0 12月 30 07:43 test1 新建的文件所屬組為root chgrp newgroup1 test1 修改test1的所屬組為 newgroup1 ls -l test1 -rw-r--r-- 1 root newgroup1 0 12月 30 07:43 test1
更改目錄本身且目錄中的子級目錄和文件:加 -R 即可;
命令 chown
change owner的簡寫,更改 文件或目錄 的 所有者
格式
chown [-R] 賬號名 文件名或目錄
chown [-R] 賬戶名:組名 文件名或目錄
-R 用於目錄,作用是 聯級更改;
mkdir dir1 useradd user1 // 創建用戶user1 touch dir1/test3 // 在dir1目錄下創建test3文件 chown user1 dir1 ls -ld dir1 // dir1目錄的所有者已經由root改為user1 drwxr-xr-x 2 user1 root 19 12月 30 07:46 dir1 ls -l dir1 // 但是dir1目錄下的test3文件的所有者依舊是root -rw-r--r-- 1 root root 0 12月 30 07:46 test3 chown -R user1:testgroup dir1 // 把dir1目錄和里面的文件和目錄的所有人user1所屬組testgroup ls -l dir1 -rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 test1
命令 chmod(重要)
change mode的簡寫,改變用戶對文件/目錄的讀、寫和執行權限
格式為
chmod [-R] xyz 文件名(這里的xyz表示數字)
-R選項,表示級聯更改
為了方便更改文件的權限,Linux使用數字代替rwx,具體規則為:用4表示r,用2表示w,用1表示x,用0表示-。
例如,rwxrwx---用數字表示就是770,其具體算法為:rwx=4+2+1=7,rwx=4+2+1=7,---=0+0+0=0。
在Linux系統中,一個目錄的默認權限為755,而一個文件的默認權限為644。
假設你創建了一個目錄,但你不想讓其他人看到該目錄的內容,則只需將其權限設置成rwxr-----(即740)即可。
chmod命令還支持使用rwx的方式來設置權限,即使用u、g和o來分別表示所有者、所屬組和其他用戶的屬性,用a代表all(即全部):
chmod u=rwx,og=rx dir3/test3
ls -l dir3/test3
-rwxr-xr-x 1 user1 testgroup 0 12月 30 07:46 dir3/test3
還可以針對u、g、o和a,增加或者減少它們的某個權限(讀、寫或執行):
chmod u-x dir3/test3 ls -l dir3 -rw-r-xr-x 1 user1 testgroup 0 12月 30 07:46 test3 chmod a-x dir3/test3 ls -l dir3/test3 -rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 dir3/test3 chmod u+x dir3/test3 ls -l dir3/test3 -rwxr--r-- 1 user1 testgroup 0 12月 30 07:46 dir3/test3
/etc/passwd 文件
上圖中head前面的符號|,我們稱之為管道符,它的作用是把前面命令的輸出結果再輸入給后面的命令。
/etc/passwd可以分割成7個字段:
第1個字段
用戶名,用戶賬號的字符串。
第2個字段
賬號的口令。這里為什么是x呢?早期的Unix系統口令確實存放在這里,但基於安全因素,后來就將其存放到/etc/shadow中了,這里只用一個x代替。
第3個字段
代表用戶標識號,也稱為uid。系統就是通過這個數字識別用戶身份的。這里的0就是root,也就是說我們可以修改test用戶的uid為0,那么系統會認為root和test為同一個賬戶。uid的取值范圍是0~65 535(但實際上已經可以支持到4 294 967 294)。0是超級用戶(root)的標識號,CentOS 7和CentOS 8的普通用戶標識號從1000開始。如果我們自定義建立一個普通用戶,那么會看到該賬戶的標識號是大於或等於1000的。
第4個字段
表示組標識號,也稱為gid。這個字段對應着/etc/group中的一條記錄,其實/etc/group和/etc/passwd基本類似。
第5個字段
注釋說明,沒有實際意義。通常記錄該用戶的一些屬性,例如姓名、電話、地址等。我們可以使用chfn
命令來更改這些信息。
第6個字段
用戶的家目錄,當用戶登錄時,就處在這個目錄下。root的家目錄是/root,普通用戶的家目錄則為/home/username,用戶家目錄是可以自定義的。比如,建立一個普通用戶test1,要想讓test1的家目錄在/data目錄下,只要將/etc/passwd文件中對應該用戶那行中的本字段修改為/data
即可。
第7個字段
用戶的shell。用戶登錄后,要啟動一個進程,用來將用戶下達的指令傳給內核,這就是shell。Linux的shell有sh、csh、ksh、tcsh、bash等多種,而Red Hat、CentOS的shell就是bash。查看/etc/passwd文件,該字段中除了/bin/bash,還有很多/sbin/nologin,這表示不允許該賬號登錄。如果想建立一個不允許登錄的賬號,可以把該字段改成/sbin/nologin,默認是 /bin/bash。
/etc/shadow 文件
# cat /etc/shadow |head -n 3 root:$6$Wu/W4eryssf9B3xQ$jgNuM24oQ9boSTUPaeJ/79GFjLUX912bSDu3ak40qJIxNj4/SpaK.JXguDYowM00mt3/
5tvNIoBJ7RNcpH2K.1:18257:0:99999:7::: bin:*:18078:0:99999:7::: daemon:*:18078:0:99999:7:::
/etc/passwd 分割成9個字段
第1個字段
用戶名,與/etc/passwd對應
第2個字段
用戶密碼,是該賬號的真正密碼。雖然這個密碼已經加密,但是有些黑客還是能夠解密的。所以將該文件屬性設置為000
,但root賬戶還是可以訪問或更改的。
第3個字段
上次更改密碼的日期,這個數字以1970年1月1日和上次更改密碼的日期為基准計算而來。例如,上次更改密碼的日期為2020年1月1日,則這個值就是365×(2020-1970)+(2020-1970)/4+1=18263。如果是閏年,則有366天。
第4個字段
要過多少天才可以更改密碼,默認是0,即不受限制。
第5個字段
密碼多少天后到期,即在多少天內必須更改密碼。例如,這里設置成30,則30天內必須更改一次密碼;否則,將不能登錄系統。默認是99999,可以理解為永遠不需要改。
第6個字段
密碼到期前的警告期限。若這個值設置成7,則表示當7天后密碼過期時,系統就發出警告,提醒用戶他的密碼將在7天后到期。
第7個字段
賬號失效期限。如果這個值設置為3,則表示密碼已經到期,然而用戶並沒有在到期前修改密碼,那么再過3天,這個賬號便失效,即鎖定。
第8個字段
賬號的生命周期。跟第3個字段一樣,這個周期是按距離1970年1月1日多少天算的。它表示的含義是賬號在這個日期前可以使用,到期后將作廢。
第9個字段
保留用的,沒有什么意義。
命令 groupadd
新增用戶組
格式
groupadd [-g GID] groupname
# groupadd grptest1 # tail -n1 /etc/group grptest1:x:1002:
如果不加-g選項,則按照系統默認的gid創建組。跟uid一樣,gid也是從1000開始的,如下操作自定義gid:
# groupadd -g 1008 grptest2 # tail -n2 /etc/group grptest1:x:1002: grptest2:x:1008:
刪除組 groupdel
# groupdel grptest2 # tail -n2 /etc/group slocate:x:21: grptest1:x:1002:
注意:當組里面有一個或以上賬戶,那么就無法刪除該組;
命令 useradd
新增用戶
格式為
useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]
- -u:表示自定義UID。
- -g:表示使新增用戶屬於某個已經存在的組,后面可以跟組id,也可以跟組名。
- -d:表示自定義用戶的家目錄。
- -M:表示不建立家目錄。
- -s:表示自定義shell。
新建一個用戶 test10:
# useradd test10 # tail -n1 /etc/passwd test10:x:1001:1001::/home/test10:/bin/bash # tail -n1 /etc/group test10:x:1001:
如果useradd不加任何選項,直接跟用戶名,則會創建一個跟用戶名同名的組。
那么,如何自定義uid、gid或者所屬的組呢?
# useradd -u1005 -g 1006 -M -s /sbin/nologin user11
刪除用戶 userdel
格式
userdel [-r] username
-r選項:當刪除用戶時,一並刪除該用戶的家目錄。