用戶管理簡要說明:
1.越是對服務器安全性要求高的服務器,越需要建立合理的用戶權限等級制度和服務器操作規范。
2.在Linux中主要是通過用戶配置文件來查看和修改用戶信息。
初始組和附加組
初始組:就是指用戶一登錄就立刻擁有這個用戶組的相關權限,每個用戶的初始組只能有一個,一般就是和這個用戶的用戶名相同的組名作為這個用戶的初始組。
附加組:指用戶可以加入多個其他的用戶組,并擁有這些組的權限,附加組可以有多個。
在Linux系統上,用戶管理是基于用戶名和密碼的方式進行資源的分配,Linux上的用戶Username/UID分為以下類別
管理員:root,0
普通用戶:1-65535
普通用戶又分為:系統用戶和登錄用戶兩種:
系統用戶:1-499(centos6系統),1-199(centos7系統)對守護進程獲取資源進行權限分配;
登錄用戶:500+(centos6系統),1000+(centos7系統)通過交互式方式登錄
Linux組:Groupname/GID
管理員組:root,0
普通組:1-65535
普通組又分為:又分為系統組和非系統組,我們通常把非系統組叫做普通組。
系統用戶:1-499(centos6系統),1-199(centos7系統)
登錄用戶:500+(centos6系統),1000+(centos7系統)通過交互式方式登錄
對于一個用戶而言可以有多個不的組,分別稱之為用戶的基本組(主組)和附加組;基本組組名和用戶名相同,且僅包含一個用戶,也叫私有組。基本組以外的組屬于用戶的附加組(或者額外組)
接下來介紹下Linux用戶和組的主要配置文件:
/etc/passwd:用戶及其屬性信息(名稱、UID、基本組ID等)
/etc/group/:組及其屬性信息
/etc/shadow/:用戶密碼及其相關屬性
/etc/gshadow/:組密碼及其相關屬性
詳細介紹各個配置文件的內容:
/etc/passwd/
通過which passwd 來查看其對應的配置文件信息或者man 5 passwd 也可查看到該配置文件的幫助信息
passwd文件格式
name:password:UID:GID:GECOS:directory:shell,對應的含義是
用戶名:密碼:UID:GID:用戶的詳細信息說明:用戶的家目錄:用戶的默認shell
/etc/shadow/
shadow文件格式說明:用戶名:加了密的密碼:最近一次更改密碼的日期;密碼的最小使用期限;密碼的最大使用期限密碼的警告時間段;密碼禁用期:賬戶的過期日期:保留字段
/etc/group
group文件格式說明:群組名稱:群組密碼(通常不需要設定,密碼是被記錄在/etc/gshadow):GID :組中附加用戶
/etc/gshadow
gshadow文件格式說明:群組名稱:群組密碼:組管理員列表(管理員的列表,更改組密碼和成員):以當前組為附加組的用戶列表(分隔符為逗號)
用戶和組相關的管理命令 命令名稱:useradd 命令所在路徑:/usr/sbin/useradd 執行權限:root 語法:useradd [用戶名] 功能描述:添加新用戶 useradd [options] LOGIN -u UID: [UID_MIN, UID_MAX]定義在/etc/login.defs -o 配合-u 選項,不檢查UID的唯一性 -g GID:指明用戶所屬基本組,可為組名,也可以GID -c "COMMENT":用戶的注釋信息 -d HOME_DIR: 以指定的路徑(不存在)為家目錄 -s SHELL: 指明用戶的默認shell程序,可用列表在/etc/shells文件中 -G GROUP1[,GROUP2,...]:為用戶指明附加組,組必須事先存在 -N 不創建私用組做主組,使用users組做主組 -r 創建系統用戶 CentOS 6: ID<500, CentOS 7: ID<1000 -D 表示修改用戶的默認選項;(修改的是/etc/default/useradd中的選項) -s 修改用戶的默認shell信息
[root@wzc ~]# useradd libai [root@wzc ~]# grep 'libai' /etc/passwd libai:x:1005:1008::/home/libai:/bin/bash [root@wzc ~]# grep 'libai' /etc/group libai:x:1008: [root@wzc ~]# grep 'libai' /etc/shadow libai:!!:17016:0:99999:7::: [root@wzc ~]# grep 'libai' /etc/gshadow libai:!:: [root@wzc ~]# ll -d /home/libai/ drwx------. 3 libai libai 74 Aug 3 17:35 /home/libai/ [root@wzc ~]# ll /var/spool/mail/libai -rw-rw----. 1 libai mail 0 Aug 3 17:35 /var/spool/mail/libai #當創建好一個用戶后,會在這些目錄下自動生成用戶的基本信息
[root@wzc ~]# groupadd distro [root@wzc ~]# groupadd linux [root@wzc ~]# useradd wu -G distro,linux -s /bin/bash -c "wu zhong cheng jml" [root@wzc ~]# tail -n 1 /etc/passwd wu:x:1004:1007:wu zhong cheng jml:/home/wu:/bin/bash #使用大G選項,組必須要事先創建好 [root@wzc ~]# getent group distro distro:x:1005:wu [root@wzc ~]# getent group linux linux:x:1006:wu #查看‘wu’用戶的附加組
創建組 groupadd [OPTION]... group_name -g GID: 指明GID號; [GID_MIN, GID_MAX] -r: 創建系統組; CentOS 6: ID<500 CentOS 7: ID<1000 [root@wzc ~]# groupadd wzcfzd [root@wzc ~]# tail -n 1 /etc/group wzcfzd:x:1009: #增加一個wzcfzd組
[root@wzc ~]# groupadd -g 1028 wzcfzd2 [root@wzc ~]# tail -n 1 /etc/group wzcfzd2:x:1028: #‘-g’選項可以定義自己的組id
修改和刪除組 組屬性修改: groupmod groupmod [OPTION]... group -n group_name: 新名字 -g GID: 新的GID; 組刪除: groupdel groupdel GROUP [root@wzc ~]# groupmod -g 1029 wzcfzd2 [root@wzc ~]# tail -n 1 /etc/group wzcfzd2:x:1029: #更改組id
[root@wzc ~]# groupdel wzcfzd2 [root@wzc ~]# grep 'wzcfzd2' /etc/group #刪除組
更改組密碼 組密碼: gpasswd gpasswd [OPTION] GROUP -a user: 將user添加至指定組中; -d user: 從指定組中移除用戶user -A user1,user2,...: 設置有管理權限的用戶列表 newgrp命令:臨時切換基本組; 如果用戶本不屬于此組,則需要組密碼
更改和查看組成員 groupmems [options] [action]options: -g, --group groupname 更改為指定組 (只有root) Actions: -a, --add username 指定用戶加入組 -d, --delete username 從組中刪除用戶 -p, --purge 從組中清除所有成員 -l, --list 顯示組成員列表 ? groups [OPTION].[USERNAME]... 查看用戶所屬組列表刪除用戶 userdel [OPTION]... login -r: 刪除用戶家目錄;
[root@wzc ~]# ls /home/ libai user2 wangcai wu wzc [root@wzc ~]# userdel -r user2 [root@wzc ~]# ls /home/ libai wangcai wu wzc #‘-r'選項是連帶家目錄賬戶一起刪除,所有創建用戶時自動生成的基本信息一起刪除
設置密碼 passwd [OPTIONS] UserName: 修改指定用戶的密碼,僅root用戶權限 ? passwd: 修改自己的密碼; ? 常用選項: -l:鎖定指定用戶 -u:解鎖指定用戶 -e:強制用戶下次登錄修改密碼 -n mindays: 指定最短使用期限 -x maxdays:最大使用期限 -w warndays:提前多少天開始警告 -i inactivedays:非活動期限; --stdin:從標準輸入接收用戶密碼; echo "PASSWORD" | passwd --stdin USERNAME
[root@wzc ~]# passwd -S libai libai LK 2016-08-03 0 99999 7 -1 (Password locked.) #查看密碼狀態 [root@wzc ~]# passwd -l wzc Locking password for user wzc. passwd: Success [root@wzc ~]# passwd -u wzc Unlocking password for user wzc. passwd: Success #鎖定用戶與解鎖用戶 [root@wzc ~]# echo "123" |passwd --stdin wzc Changing password for user wzc. passwd: all authentication tokens updated successfully. #修改用戶密碼
修改用戶密碼策略 chage [OPTION]... LOGIN -d LAST_DAY -E, --expiredate EXPIRE_DATE -I, --inactive INACTIVE -m, --mindays MIN_DAYS -M, --maxdays MAX_DAYS -W, --warndays WARN_DAYS –l,顯示密碼策略 ? 下一次登錄強制重設密碼 chage -d 0 tom ? chage -m 0 –M 42 –W 14 –I 7 tom ? chage -E 2016-09-10 tom
[root@wzc ~]# chage -d 0 wangcai [root@wzc ~]# tail -n 3 /etc/shadow wangcai:$6$384ACS81$gUWa2VZ0OIuSVvML8YXy2dcDPyC3uU1TIw0I3nOHNFhm2eQP/kQDPUoULBCqCK7.9bkp9frPyaUJ10ObcKfy4.:0:0 :99999:7::: wu:!!:17016:0:99999:7::: libai:!!:17016:0:99999:7::: #把密碼修改日期歸0了,(/etc/shadow第三字段),這樣用戶一登錄就要修改密碼了
用戶屬性修改 usermod [OPTION] login -u UID: 新UID -g GID: 新基本組 -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項, 表示append; -s SHELL:新的默認SHELL; -c 'COMMENT':新的注釋信息; -d HOME: 新家目錄不會自動創建,原家目錄中的文件不會同時移動至新的家目錄;若要創建新家目錄并移動原家數據, 同時使用-m選項 -l login_name: 新的名字; -L: lock指定用戶,在/etc/shadow 密碼欄的增加 ! -U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉 -e YYYY-MM-DD: 指明用戶賬號過期日期; -f INACTIVE: 設定非活動期限;
[root@wzc ~]# usermod -c "wzc linuxer" libai [root@wzc ~]# grep 'libai' /etc/passwd libai:x:1005:1008:wzc linuxer:/home/libai:/bin/bash #修改用戶的注釋說明 [root@wzc ~]# usermod -aG wzcfzd libai [root@wzc ~]# grep 'libai' /etc/group libai:x:1008: wzcfzd:x:1009:libai #把用戶‘libai’加入到‘wzcfzd’組 [root@wzc ~]# usermod -L libai [root@wzc ~]# grep 'libai' /etc/shadow libai:!$6$19uK6NM4$OzMVGOIjEJ49SZrpE8eZCIaGcBWbnxK.eLnBIG5BHcZFwg0ekvnk9OLWqH.u.x4E1R2oGBXHn9aLZ8L1nvr.e0:17016 :0:99999:7::: [root@wzc ~]# usermod -U libai [root@wzc ~]# grep 'libai' /etc/shadow libai:$6$19uK6NM4$OzMVGOIjEJ49SZrpE8eZCIaGcBWbnxK.eLnBIG5BHcZFwg0ekvnk9OLWqH.u.x4E1R2oGBXHn9aLZ8L1nvr.e0:17016: 0:99999:7::: #鎖定用戶與解鎖用戶
用戶相關的其他用戶其他命令 chfn 指定個人信息 chsh 指定shell inger
[root@wzc ~]# chfn libai Changing finger information for libai. Name [wzc linuxer]: www Office []: wwwoffice Office Phone []: 123456789 Home Phone []: 123456789 Finger information changed. [root@wzc ~]# grep 'libai' /etc/passwd libai:x:1005:1008:www,wwwoffice,123456789,123456789:/home/libai:/bin/bash #‘chfn’ 命令可以修改用戶的findger信息,比如name, office, office phone 以及 Home phone.修改完后, 就會在/etc/passwd文件中的libai的那一行第五個字段中看到相關信息了,默認是空的
查看看用戶相關ID信息 id [OPTION]... [USER] -u: UID -g: GID -G: Groups -n: Name [root@wzc ~]# id -u libai 1005 [root@wzc ~]# id -g libai 1008 [root@wzc ~]# id -un libai libai [root@wzc ~]# id -gn libai libai [root@wzc ~]# grep 'libai' /etc/passwd libai:x:1005:1008:www,wwwoffice,123456789,123456789:/home/libai:/bin/bash [root@wzc ~]# grep 'libai' /etc/group libai:x:1008: wzcfzd:x:1009:libai #'-g'選項和'-u'選項可以和'-n'選項連用,分別是查看組名和用戶名
切換用戶或其他用戶身份執行命令 su [options...] [-] [user [args...]] ? 切換用戶的方式: su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄 su - UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換root su至其他用戶 無須密碼;非root用戶切換時需要密碼 ? 換個身份執行命令: su [-] UserName -c 'COMMAND' 選項: -l --login -c 僅執行一次命令,而不用切換用戶身份
[root@wzc ~]# su - wzc Last login: Tue Aug 2 14:49:18 CST 2016 on pts/1 [wzc@wzc ~]$ pwd /home/wzc [wzc@wzc ~]$ su - Password: Last login: Wed Aug 3 13:32:27 CST 2016 from 10.1.250.38 on pts/1 #管理員切換到普通用戶不用輸入密碼;反之,要輸入密碼。選項‘-’代表連用戶的環境變量一起切換 [root@wzc ~]# su - libai [libai@wzc ~]$ pwd /home/libai [libai@wzc ~]$ su - root -c "useradd user1" Password: [libai@wzc ~]$ ls /home/ libai user1 wangcai wu wzc #'-c'選項不切換成root,但執行useradd命令添加用戶
文件權限 文件屬性 文件屬性操作 chown 設置文件的所有者 chgrp 設置文件的屬組信息 修改文件的屬主和屬組 修改文件的屬主: chown chown [OPTION]... [OWNER][:[GROUP]] FILE... 用法: OWNER OWNER:GROUP :GROUP 命令中的冒號可用.替換; -R: 遞歸 chown [OPTION]... --reference=RFILE FILE... ? 修改文件的屬組: chgrp chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE... -R 遞歸
[root@wzc date]# mkdir yangmi [root@wzc date]# useradd fangbingbing [root@wzc date]# touch yangmi/xiaoyangmi [root@wzc date]# chown fangbingbing yangmi/ [root@wzc date]# ls -ld yangmi/ drwxr-xr-x. 2 fangbingbing root 23 Aug 3 20:10 yangmi/ [root@wzc date]# ls -l yangmi/ total 0 -rw-r--r--. 1 root root 0 Aug 3 20:10 xiaoyangmi [root@wzc date]# groupadd fangbingbing groupadd: group 'fangbingbing' already exists [root@wzc date]# groupadd libingbing [root@wzc date]# chown -R fangbingbing:libingbing yangmi/ [root@wzc date]# ls -l yangmi/ total 0 -rw-r--r--. 1 fangbingbing libingbing 0 Aug 3 20:10 xiaoyangmi [root@wzc date]# ls -ld yangmi/ drwxr-xr-x. 2 fangbingbing libingbing 23 Aug 3 20:10 yangmi/ [root@wzc date]# #‘-R’選項把目錄及子目錄下文件所屬主都修改成fangbingbing,屬組修改成libingbing
chgrp 命令名稱:chgrp 命令原意:change group ownership 命令所在路徑:/usr/bin/chgrp 語法:chgrp [所屬組] [文件或目錄] 功能描述:改變文件或目錄所屬組 [root@wzc date]# groupadd testgroup [root@wzc date]# touch test.file [root@wzc date]# ls -l test.file -rw-r--r--. 1 root root 0 Aug 3 20:26 test.file [root@wzc date]# chgrp testgroup test.file [root@wzc date]# ls -l test.file -rw-r--r--. 1 root testgroup 0 Aug 3 20:26 test.file #chgrp不僅能更改文件,還能更改目錄,請看下面例子 [root@wzc date]# pwd /date [root@wzc date]# ls -l dirb/ total 0 drwxr-xr-x. 2 root root 6 Aug 3 20:30 dirc -rw-r--r--. 1 root root 0 Aug 3 20:33 test.txt [root@wzc date]# ls -ld dirb/ drwxr-xr-x. 3 root root 32 Aug 3 20:33 dirb/ [root@wzc date]# chgrp testgroup dirb/ [root@wzc date]# ls -ld dirb/ drwxr-xr-x. 3 root testgroup 32 Aug 3 20:33 dirb/ [root@wzc date]# ls -l dirb/ total 0 drwxr-xr-x. 2 root root 6 Aug 3 20:30 dirc -rw-r--r--. 1 root root 0 Aug 3 20:33 test.txt [root@wzc date]# chgrp -R testgroup dirb/ [root@wzc date]# ll -ld dirb/ drwxr-xr-x. 3 root testgroup 32 Aug 3 20:33 dirb/ [root@wzc date]# ls -l dirb/ total 0 drwxr-xr-x. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root testgroup 0 Aug 3 20:33 test.txt #‘-R’選項不僅能更改目錄本身所屬組,還能更改目錄下的子目錄或文件的所屬組
文件權限 文件的權限主要針對三類對象進行定義: owner: 屬主, u group: 屬組, g other: 其他, o all:代表所有人 ? 每個文件針對每類訪問者都定義了三種權限: r: Readable w: Writable x: eXcutable 對于文件文件來說: r: 可使用文件查看類工具獲取其內容 w: 可修改其內容 x: 可以把此文件提請內核啟動為一個進程 ? 對于目錄來說: r: 可以使用ls查看此目錄中文件列表 w: 可在此目錄中創建文件,也可刪除此目錄中的文件 x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄: X:只給目錄x權限,不給文件x權限
權限表示方法: 權限、二進制、八進制表示對應的表示方法如下: --- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7 例如: 640: rw-r----- 755:rwxr-xr-x 修改文件權限 命令名稱:chmod 命令原意:chmod file mode bit 命令所在路徑:/usr/bin/chmod 執行權限:所有用戶 功能描述:改變文件或目錄權限 chmod [OPTION]... OCTAL-MODE FILE... -R: 遞歸修改權限 chmod [OPTION]... MODE[,MODE]... FILE... MODE: 修改一類用戶的所有權限: u= g= o= ug= a= u=,g= 修改一類用戶某位或某些位權限 u+ u- g+ g- o+ o- a+ a- + - chmod [OPTION]... --reference=RFILE FILE... 參考RFILE文件的權限,將FILE的修改為同RFILE; 補充:在Linux系統中,默認一個目錄權限是755,默認文件權限是644,這是因為umask值的設定,后面會介紹umask。
[root@wzc date]# ls -ld dirb/ drwxr-xr-x. 3 root testgroup 32 Aug 3 20:33 dirb/ #目錄權限默認755 [root@wzc date]# ls -l dirb/ total 0 drwxr-xr-x. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root testgroup 0 Aug 3 20:33 test.txt #文件默認權限644 [root@wzc date]# chmod 750 dirb/ [root@wzc date]# ls -ld dirb/ drwxr-x---. 3 root testgroup 32 Aug 3 20:33 dirb/ [root@wzc date]# ls -l dirb/test.txt -rw-r--r--. 1 root testgroup 0 Aug 3 20:33 dirb/test.txt [root@wzc date]# chmod -R 700 dirb/ [root@wzc date]# ls -ld dirb/ drwx------. 3 root testgroup 32 Aug 3 20:33 dirb/ [root@wzc date]# ls -l dirb/test.txt -rwx------. 1 root testgroup 0 Aug 3 20:33 dirb/test.txt #chmod命令也支持‘-R’選項,逐級更改,連同目錄下的子目錄或文件權限一起改為700 [root@wzc date]# chmod u=rwx,og=rx dirb/test.txt [root@wzc date]# ll -l dirb/test.txt -rwxr-xr-x. 1 root testgroup 0 Aug 3 20:33 dirb/test.txt #可以使用u、g、o、a、增加某個權限,當然也就可以減少某個權限,請看下面例子 [root@wzc date]# chmod u-x dirb/test.txt [root@wzc date]# ls -l dirb/ total 0 drwx------. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r-xr-x. 1 root testgroup 0 Aug 3 20:33 test.txt [root@wzc date]# chmod a-x dirb/test.txt [root@wzc date]# ls -l dirb/ total 0 drwx------. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root testgroup 0 Aug 3 20:33 test.txt [root@wzc date]# chmod u+x dirb/test.txt [root@wzc date]# ls -l dirb/test.txt -rwxr--r--. 1 root testgroup 0 Aug 3 20:33 dirb/test.txt #這里的‘a’代表所有人,加某個權限,u、g、o都加上某個權限;反之,都減去某個權限或者等于某個權限
補充:
文件目錄的權限總結
代表字符 | 權限 | 對文件的含義 | 對目錄的含義 |
r | 讀權限 | 可以查看文件內容 | 可以列出目錄中的內容 |
w | 寫權限 | 可以修改文件內容 | 可以在目錄中創建、刪除文件 |
x | 執行權限 | 可以執行文件 | 可以進入目錄 |
umask 新建文件和默認的目錄權限 命令名稱:umask 命令原意:the user file-creation umask 命令所在路徑:shell內置命令 執行權限:所有用戶 功能描述:顯示、設置文件的缺省權限 umask值 可以用來保留在創建文件權限 新建FILE權限: 666-umask 如果所得結果某位存在執行(奇數)權限,則將其權限+1 新建DIR權限: 777-umask 非特權用戶umask是 002 root的umask 是 022 umask: 查看 umask #: 設定 umask 002 umask –S 模式方式顯示 umask –p 輸出可被調用 全局設置: /etc/bashrc 用戶設置: ~/.bashrc [root@wzc date]# umask 0022 #系統默認umask值是是022,umask值是可以修改的 unmask預設是0022,其代表什么含義?先看一下下面的規則: 用戶建立為普通文件,則預設 ‘沒有可執行權限’, 只有’rw’兩個權限。最大為666 (‘-rw-rw-rw-‘) 若用戶建立為目錄,則預設所有權限均開放,即777 (‘drwxrwxrwx’) umask數值代表的含義為,上邊兩條規則中的默認值(文件為666,目錄為777)需要減掉的權限。所以目錄的權限為 'rwxrwxrwx' - '----w--w-' = 'rwxr-xr-x',普通文件的權限為 'rw-rw-rw-' - '----w--w-' = 'rw-r--r--'. umask的值是可以自定義的,比如設定umask 為 002,你再創建目錄或者文件時,默認權限分別為 'rwxrwxrwx' - ' -------w-' = 'rwxrwxr-x' 和 'rw-rw-rw-' - '-------w-' = 'rw-rw-r--'
[root@wzc date]# umask 002 [root@wzc date]# mkdir gyy [root@wzc date]# ls -ld gyy/ drwxrwxr-x. 2 root root 6 Aug 3 21:26 gyy/ [root@wzc date]# touch fengjie [root@wzc date]# ls -l fengjie -rw-rw-r--. 1 root root 0 Aug 3 21:26 fengjie #umask值改了,因此創建目錄和文件的權限都不和系統預設一樣,怎么得到這個權限值這里我就不再細說了, 現在把umask值改回來,這里需要注意的是,umask值只要不寫入配置文件的話只是臨時生效,登出當前終端 在進入umask值就會變回系統預設的022
[root@wzc date]# umask 022 [root@wzc date]# touch zly [root@wzc date]# ls -l zly -rw-r--r--. 1 root root 0 Aug 3 21:30 zly #root的umask為022,而一般使用者為002,因此可寫的權限非常重要,因此會預設去掉寫權限
[root@wzc date]# umask -S u=rwx,g=rx,o=rx #以rwx形式顯示新建文件缺省權限
Linux文件系統上的特殊權限 在Linux系統上有三個特殊權限:SUID、SGID、Sticky 1.Linux權限模型是由mode和owner組成 mode有:r,w,x owner有:user,group,other 2.安全上下文 前提:進程有屬主和屬組;文件有屬主和屬組 (1) 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限 (2) 啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組 (3) 進程訪問文件時的權限,取決于進程的發起者 (a) 進程的發起者,同文件的屬主:則應用文件屬主權限 (b) 進程的發起者,屬于文件屬組;則應用文件屬組權限 (c) 應用文件“其它”權限
可執行文件上SUID權限:Set UID SetUID功能:1.只有可以執行的二進制程序才能設定SUID權限 2.命令執行者對改程序具有x(執行)權限 3.命令執行者在執行該程序時獲得改程序文件屬主的身份 4.SetUID權限只在改程序執行過程中有效 5.passwd命令擁有SetUID權限所以普通用戶可以修改自己的密碼 [root@wzc date]# which passwd /usr/bin/passwd [root@wzc date]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd 前提:此類文件有可執行權限的命令 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限 啟動為進程之后,其進程的屬主為原程序文件的屬主 SUID只對二進制可執行程序有效 SUID設置在目錄上無意義 權限設定: chmod u+s FILE... chmod u-s FILE...
執行文件上SGID權限:Set GID 默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組 一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此 目錄中創建的文件所屬的組為此目錄的屬組 通常用于創建一個協作目錄 權限設定: chmod g+s DIR... chmod g-s DIR...
Sticky:粘著位 對于一個多人可寫的目錄,如果設置了sticky,則每個用戶僅能刪除自己的文件 具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權 在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件 sticky 設置在文件上無意義 權限設定: chmod o+t DIR... chmod o-t DIR... 例如: ls -ld /tmp drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
特殊權限數字法 SUID SGID STICKY 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 ? chmod 4777 /tmp/a.txt 幾個權限位映射 SUID: user,占據屬主的執行權限位 s: 屬主擁有x權限 S:屬主沒有x權限 SGID: group,占據屬組的執行權限位 s: group擁有x權限 S: group沒有x權限 Sticky: other,占據other的執行權限位 t: other擁有x權限 T:other沒有x權限
設定文件特殊屬性 chattr 語法:chattr [+-=] [選項] 文件或目錄名 '+-=' 分別是增加、刪除、等于 選項: i:如果對文件設置i屬性,不允許對文件進行刪除、改名,也不能添加和修改數據;如果對目錄設置i屬性, 那么只能修改目錄下文件的數據,但不允許建立和刪除文件。 a:如果對文件設置a屬性,那么只能在文件中增加數據,但是不能刪除也不能修改數據;如果對目錄設置a屬 性,那么只允許在目錄中建立和修改文件,但是不允許刪。 A:增加該屬性后,文件或目錄的atime將不可修改 S:增加該屬性后,會將數據同步寫入磁盤中 c:自動壓縮該文件,讀取時會自動解壓
[root@wzc date]# chattr +i dirb [root@wzc date]# touch dirb/test touch: cannot touch ‘dirb/test’: Permission denied [root@wzc date]# chattr -i dirb [root@wzc date]# touch dirb/test [root@wzc date]# chattr +i dirb [root@wzc date]# rm -rf dirb/test rm: cannot remove ‘dirb/test’: Permission denied #丟'dirb'目錄增加‘i'權限后,即使是root賬戶也不能在也不在’dirb'進行刪除和創建文件
[root@wzc date]# chattr -i dirb [root@wzc date]# touch dirb/test1 [root@wzc date]# ls -l dirb total 0 drwx------. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root root 0 Aug 3 22:02 test -rw-r--r--. 1 root root 0 Aug 3 22:07 test1 -rwxr--r--. 1 root testgroup 0 Aug 3 20:33 test.txt [root@wzc date]# chattr +a dirb [root@wzc date]# rm -rf dirb/test1 rm: cannot remove ‘dirb/test1’: Operation not permitted [root@wzc date]# touch dirb/test2 [root@wzc date]# ls -l dirb/ total 0 drwx------. 2 root testgroup 6 Aug 3 20:30 dirc -rw-r--r--. 1 root root 0 Aug 3 22:02 test -rw-r--r--. 1 root root 0 Aug 3 22:07 test1 -rw-r--r--. 1 root root 0 Aug 3 22:09 test2 -rwxr--r--. 1 root testgroup 0 Aug 3 20:33 test.txt #'dirb'目錄增加'a'權限后,只能在里面創建文件,而不能刪除文件,文件同意適用這些權限
[root@wzc date]# chattr +a dirb/test [root@wzc date]# echo 111 > dirb/test -bash: dirb/test: Operation not permitted [root@wzc date]# echo 111 >> dirb/test [root@wzc date]# cat dirb/test 111 [root@wzc date]# chattr +i dirb/test1 [root@wzc date]# echo 111 > dirb/test1 -bash: dirb/test1: Permission denied [root@wzc date]# echo 111 >> dirb/test1 -bash: dirb/test1: Permission denied [root@wzc date]# rm -rf dirb/test1 rm: cannot remove ‘dirb/test1’: Operation not permitted
查看文件或目錄特殊權限 lsattr 語法:lsattr [選項] [文件或目錄] 選項: -a:顯示所有文件或目錄,包括隱藏文件 -R:連同子目錄下的數據一同列出 -d:只列出目錄本身的屬性 [root@wzc date]# lsattr dirb/ ---------------- dirb/dirc ---------------- dirb/test.txt -----a---------- dirb/test ----i----------- dirb/test1 ---------------- dirb/test2 [root@wzc date]# lsattr -aR dirb/ -----a---------- dirb/. ---------------- dirb/.. ---------------- dirb/dirc dirb/dirc: ---------------- dirb/dirc/. -----a---------- dirb/dirc/.. ---------------- dirb/test.txt -----a---------- dirb/test ----i----------- dirb/test1 ---------------- dirb/test2 [root@wzc date]# lsattr -d dirb/ -----a---------- dirb/
訪問控制列表 ACL: Access Control List,實現靈活的權限管理 除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限 CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。 CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL功能。需手動增加: tune2fs –o acl /dev/sdb1 mount –o acl /dev/sdb1 /mnt ACL生效順序:所有者,自定義用戶,自定義組,其他人
為多用戶或者組的文件和目錄賦予訪問權限rwx 1.mount -o acl /directory 2.getfacl file |directory 3.setfacl -m u:wang:rwx file|directory 4.setfacl -Rm g:sales:rwX directory 5.setfacl -M file.acl file|directory 6.setfacl -m g:salesgroup:rw file| directory 7.setfacl -m d:u:wang:rx directory 8.setfacl -x u:wang file |directory 9.setfacl -X file.acl directory ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限) ,而非傳統的組權限getfacl 可看到特殊權限:flags 默認ACL權限給了x,文件也不會繼承x權限。 base ACL 不能刪除 setfacl -k dir 刪除默認ACL權限 setfacl -b file1清除所有ACL權限 getfacl file1 | setfacl --set-file=- file2 復制file1的acl權限給file2
查看ACL命令 getfacle 文件名 #查看acl權限 設定ACL權限命令 setfacl 選項 文件名 選項: -m 設定acl權限 -x 刪除指定的acl權限 -b 刪除所有acl權限 -d 設定默認acl權限 -k 刪除默認acl權限 -R 遞歸設定acl權限
[root@wzc date]# mkdir lzl [root@wzc date]# useradd xlzl [root@wzc date]# useradd dlzl [root@wzc date]# groupadd stgroup [root@wzc date]# gpasswd -a xlzl stgroup Adding user xlzl to group stgroup [root@wzc date]# gpasswd -a dlzl stgroup Adding user dlzl to group stgrou [root@wzc date]# tail -n 1 /etc/group stgroup:x:1019:xlzl,dlzl [root@wzc date]# chown root:stgroup lzl/ [root@wzc date]# chmod 770 lzl/ [root@wzc date]# ls -ld lzl/ drwxrwx---. 2 root stgroup 6 Aug 4 19:30 lzl/ [root@wzc date]# useradd cangls [root@wzc date]# passwd cangls Changing password for user cangls. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@wzc date]# setfacl -m u:cangls:rx lzl/ [root@wzc date]# ll -ld lzl/ drwxrwx---+ 2 root stgroup 6 Aug 4 19:30 lzl/ [root@wzc date]# getfacl lzl/ # file: lzl/ # owner: root # group: stgroup user::rwx user:cangls:r-x group::rwx mask::rwx other::--- [root@wzc date]# setfacl -m g:stgroup:rx lzl/ [root@wzc date]# getfacl lzl/ # file: lzl/ # owner: root # group: stgroup user::rwx user:cangls:r-x group::rwx group:stgroup:r-x mask::rwx other::--- #設定與查看ACL權限
msk簡介 mask是用來指定最大有效權限的。如果我們給用戶賦予了ACL權限,是需要和mask“相與”才能得到用戶的真正權限 [root@wzc date]# getfacl lzl/ # file: lzl/ # owner: root # group: stgroup user::rwx user:cangls:r-x group::rwx group:stgroup:r-x mask::rwx other::--- #默認mask的值為最大rwx,ACL權限用戶cangls權限為r-x,與mask相與的結果是沒有權限的,我們可以通過調整mask的 最大有效權限來達到控制ACL用戶權限的特征,請看下面例子。
[root@wzc date]# setfacl -m m:rx xlzl/ [root@wzc date]# getfacl xlzl/ # file: xlzl/ # owner: root # group: wugroup user::rwx user:wangwu:r-x group::rwx #effective:r-x group:wcgroup:rwx #effective:r-x mask::r-x other::--- #雖然所屬組wcgroupACL權限有rwx,但是mask得權限為rx,所以所屬組的權限為rx。注:mask最大有效權限不影響 當前用戶的所有者
mask只影響除所有者和other的之外的人和組的最大權限 Mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(Effective Permission) 用戶或組的設置必須存在于mask權限設定范圍內才會生效。 setfacl -m mask::rx file --set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以. 如: ? setfacl --set u::rw,u:wang:rw,g::r,o::- file1
mask最大有效權限總結
A | B | and |
r | r | r |
r | – | – |
– | r | – |
– | – | – |
說明:當A和B都有讀權限時,與出來的結果才有讀權限;當有一個沒有讀權限時,與出來的結果是沒有讀權限的。
備份和恢復ACL 主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息 #getfacl -R /tmp/dir1 > acl.txt #setfacl -R -b /tmp/dir1 #setfacl -R --set-file=acl.txt /tmp/dir1 #getfacl -R /tmp/dir1
[root@wzc date]# ls xlzl [root@wzc date]# cd xlzl/ [root@wzc xlzl]# touch wj303 [root@wzc xlzl]# touch wj304 [root@wzc xlzl]# setfacl -m u:wangwu:rx /date/xlzl/ [root@wzc xlzl]# ll total 0 -rw-r--r--. 1 root root 0 Aug 4 20:53 wj303 -rw-r--r--. 1 root root 0 Aug 4 20:53 wj304 [root@wzc xlzl]# ls -ld /date/xlzl/ drwxrwx---+ 2 root wugroup 30 Aug 4 20:53 /date/xlzl/ [root@wzc xlzl]# setfacl -m u:wangwu:rx -R /date/xlzl/ [root@wzc xlzl]# ll total 8 -rw-r-xr--+ 1 root root 0 Aug 4 20:53 wj303 -rw-r-xr--+ 1 root root 0 Aug 4 20:53 wj304 #'-R'選項是遞歸的意思,把目錄下的文件直接賦予ACL權限,注意:'-R選項只能放在后面'
原創文章,作者:RecallWzc,如若轉載,請注明出處:http://www.www58058.com/27929