文件屬性、權限、用戶、用戶組


文件目錄屬性

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選項:當刪除用戶時,一並刪除該用戶的家目錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM