Linux用戶、組和權限管理詳解

用戶管理簡要說明:

    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

(0)
RecallWzcRecallWzc
上一篇 2016-08-05 16:13
下一篇 2016-08-05 16:13

相關推薦

  • yum

    yum yum:YellowdogUpdate Modifier,rpm的前端程序,可解決軟件包相關依賴性,可在多個庫之間定位軟件包,up2date的替代工具 yum repository: yum repo,存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下)文件服務器:http://https://ftp://file:// …

    2017-08-17
  • 進程管理工具

    進程管理工具 kill man 7 signal 1) SIGHUP: 無須關閉進程而讓其重讀配置文件 kill -1 進程編號 2) SIGINT: 中止正在運行的進程;相當于Ctrl+c 9) SIGKILL: 殺死正在運行的進程 再生進程 kill -9 殺不掉 15) SIGTERM:終止正在運行的進程 kill -15/或不寫(默認) +進程編號?!?/p>

    Linux干貨 2016-09-11
  • 馬哥教育網絡班21期第5周課程練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; # grep '^[[:space:]]\+' /boot/grub2/grub.cfg 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; # grep…

    Linux干貨 2016-08-05
  • 文件管理命令以及bash特性之命令行展開

    一 Linux文件管理 Linux中對文件管理的命令主要有:mkdir rmdir mv rm cp touch file stat等命令 創建目錄mkdir mkdir [OPTION]… DIRECTORY… [root@MiWiFi-R3-srv testdir]# mkdir /root/dirtest 在/root下創建一個dirtest的…

    Linux干貨 2017-08-13
  • class13 shell編程(五)軟件包管理(三)

    一、shell編程(五) 位置變量補充 shift (踢掉參數) shift                #! /bin/bashecho "1st arg …

    Linux干貨 2016-08-24
  • 如何實現本地yum源的共享

    上一篇關于Linux yum客戶端的配置的博客,介紹了如何通過修改本機yum配置文件來訪問網絡或者本地的yun sever, 本文就來介紹一下,如何把我們的本地RPM包像yum sever一樣通過http或ftp網絡方式共享出去。 一、準備好發行版光盤,包,元數據    CentOS-6.8-x86_64-bin-DVD1.iso二、準備…

    2017-06-17
欧美性久久久久