Linux的用戶組和權限管理之特殊權限及ACL的使用

用戶組和權限管理

一、瞭解和使用批量新建用戶和批量修改用戶密碼:

##用戶創建的模板和配置文件的存放位置:/etc/default/useradd;/etc/skel/* ;/etc/login.defs##

批量新建用戶(newusers):適合用於新老機器轉換時,遷移系統上的用戶。

使用格式:

newusers  passwd  filename(.txt格式) ——批量創建用戶

命令格式:newuser filename

使用該方法批量創建的新用戶其實並沒有設置密碼的,但使用命令#getent shadow user1 user2 user3 user4 user5 user6 user7查看用戶存放密碼的配置文件顯示是已經生成了密碼;因此,我們需要給批量新建的用戶初始化口令。

blob.png

格式文件,可參考下圖的格式一一對應在文本中編輯好:

用戶名:X(密碼)UIDGID:用戶描述:用戶的家目錄位置:用戶的默認shell

11.png

11.png

上面批量新建的用戶由於並沒有口令,所以我們使用如下的方法同樣給新建的用戶設置口令(口令可以不一樣)。批量修改密碼:(chpasswd

命令格式:cat filename | chpasswd

filename.txt格式) 的格式如下:

usernamepasswd

11.png

同樣,我們回顧下給單一用戶修改口令,命令爲:#echo passwd | passwd  –stdin username

當我們批量新建用戶和批量修改完口令後,嘗試使用新用戶賬號和口令登陸時,發現新用戶能夠登陸進入,但並沒有加載配置文件(家目錄下其實已經以用戶名生成了相關的目錄,缺少的時配置文件,因此我們需要手動去從系統新建用戶配置文件的目錄(/etc/skel/*)下將相應的初始配置文件複製到相應的用戶家目錄下):

命令:#cp -r /etc/skel/. /testdir/user1/

(此複製配置文件到相應家目錄的操作需要重複執行,也可以使用shell腳本來執行[需懂得shell編程,此處不做介紹]

二、用戶(UID)的屬性修改:

命令格式:usermod  [OPTION]  login 

使用選項:

-u UID: UID

-g GID: 新基本組

-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項,表示append;(**如需要全部清除附加組,則使用命令#usermod -D “” username**

-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: 設定非活動期限;

 各選項的使用如下圖:

eg

# usermod -u 2000 -g chesfer -G bin,root -s /bin/csh -md /testdir/nchk2 -l wanglin -e 2017-08-02 -f 5 wanglin

11.png

 用戶的刪除:

命令格式:userdel [OPTION]… login

如果需要將用戶的家目錄也刪除掉的話,則多加如下的選項即可:

-r: 刪除用戶家目錄; 

三、查看用戶相關的ID信息:

命令格式:id [OPTION]… [USER]

命令選項: 

-u: UID

-g: GID

-G: Groups

-n: Name(該選項需要結合以上的各個選項一同使用,不可單獨使用,否則出錯。)

11.png 

四、切換用戶或以其它用戶身份執行命令:

命令格式:su [options…] [-] [user [args…]]

切換用戶的方式:

su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄

su -UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換

root 切換至其他用戶無須密碼;非root用戶切換時需要密碼

換個身份執行命令:(直接使用Username的身份去執行命令,避免了來回切換用戶的麻煩。)

su [-] UserName -c 'COMMAND'

選項:-l –login

su -l UserName相當於su -UserName

五、瞭解和使用passwd來對用戶的設置,以及修改用戶密碼策略:

1passwd對用戶的設置:

命令格式:passwd  [OPTIONS]  UserName (修改指定用戶的密碼,僅root用戶權限)

passwd: 修改自己的密碼; 

常用選項:

-l:鎖定指定用戶

-u:解鎖指定用戶

-e:強制用戶下次登錄修改密碼

-n mindays: 指定最短使用期限

-x maxdays:最大使用期限

-w warndays:提前多少天開始警告

-i inactivedays:非活動期限;

–stdin:從標準輸入接收用戶密碼;

修改單一用戶的密碼,命令如下:

echo "PASSWORD" | passwd—stdinUSERNAME或者echo usernamepasswd | chpasswd 

 2、修改用戶密碼策略:

命令格式:chage [OPTION]… LOGIN

常用選項:

-d LAST_DAY 設置用戶下次登錄需要重新設置密碼(-d後面加0即可)

-E, –expiredateEXPIRE_DATE

-i, –inactive INACTIVE 到了最長有效期後,寬限用戶多少天修改密碼,否則鎖定用戶

-m, –mindaysMIN_DAYS 最短密碼有效期

-M, –maxdaysMAX_DAYS 最長密碼有效期

-W, –warndaysWARN_DAYS 提前多少天提醒用戶需要修改密碼

l,顯示密碼策略

11.png

下一次登錄強制重設密碼:chage -d 0 chesfer

chage -m 0 –M 42 –W 14 –I 7 chesfer

chage -E 2016-09-10 chesfer

 其他操作命令:chfn指定個人信息;chsh指定shellfinger

六、組的創建、修改、刪除等操作:

1、  創建組:

命令格式:groupadd  [OPTION]… group_name

-g GID: 指明GID號;

-r: 創建系統組;

CentOS 6: GID<500

CentOS 7:G ID<1000 

2、修改組屬性:(groupmod

命令格式:groupmod  [OPTION]… group

-n group_name: 新名字

-g GID: 新的GID

11.png 

3、刪除組:(groupdel)刪除組的條件是該組成員爲空。

groupdel GROUP 

 4、組密碼設置:(gpasswd

命令格式:gpasswd  [OPTION]  GROUP

常用選項:

-a user: user添加至指定組中,用於老用戶的修改;

-d user: 從指定組中移除用戶user

-A user1,user2,…: 設置有管理權限的用戶列表

newgrp命令:臨時切換基本組;如果用戶本不屬於此組,則需要組密碼

11.png 

5、組成員的查看與更改:

命令格式:groupmems  [options]  [action]

常用選項:

-g, –group groupname更改爲指定組(只有root有權限)

Actions:

-a, –add username 指定用戶加入組

-d, –delete username 從組中刪除用戶

-p, –purge 從組中清除所有成員

-l, –list 顯示組成員列表

groups [OPTION].[USERNAME]… 查看用戶所屬組列表

七、文件權限的初步認識與使用:

1、在linux中,常常涉及到權限的問題。我們在執行shell命令ls -l時,就會顯示出文件的所有信息,第一組就是文件屬性中的高級屬性,權限。這一組總共有10格,每一格是一個bit

11.png 

文件的權限有3組,分別爲owner(屬主),group(屬組),other(其他),每一組都有rwx三種設置。

 文件:                                                                              目錄:

r(4):可讀,可使用文件查看類工具獲取其內容;       可以使用ls查看此目錄中文件列表

w(2):可修改其內容:可寫;              可在此目錄中創建文件,也可刪除此目錄中的文件

x(1):可執行,可把此文件提請內核啓動爲一個進程。 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄

                 

X:只給目錄x權限,不給文件x權限(詳見下面的事例及注意點處)

 

11.png

文件操作權限命令:chmod 

2、第一個是特殊位:d表示目錄;l表示連接文件;表示普通文件;b表示爲裝置(device)文件中可供存儲的接口設備;c表示爲裝置文件中的串行端口設備(如鍵盤,鼠標);s表示該文件是存放socket信息的; p表示數據輸送文件(FIFOpipe,它的主要目的是爲了解決多個程序同時存取一個文件時所造成的錯誤。 

3、其後面的的9個格子按照之前所說的3個組依次分配,給每個組設置讀,寫,執行權限。在這裏要注意:如果你想開放一個目錄,一定要確定X即可執行權限已經賦予了該用戶或羣,否則是不可以讀寫的,也就是說,你給的rw是沒意義的。

11.png

文件屬性操作:chown 設置文件的所有者(chown只有root纔可以執行);chgrp 設置文件的屬組信息(chgrp可以執行的有root,文件的屬主[只能更改爲自己所在的組]

eg: #chown chesfer:root files(將files的屬主改爲了chesfer chgrp chesfer files(files的默認用戶組改爲chesfer) 

4、修改文件的屬主和屬組:

修改文件的屬主:(chown

命令格式:chown  [OPTION]… [OWNER][:[GROUP]]  FILE…

用法:

OWNER

OWNER:GROUP

:GROUP

命令中的冒號可用.替換;

-R: 遞歸 

chown [OPTION]… –reference=RFILE FILE…

eg#chown –reference  files1 files2 files1的屬主複製給files2,讓兩個文件的屬主一樣 

修改文件的屬組:(chgrp

chgrp [OPTION]… GROUP FILE…

-R 遞歸 

chgrp [OPTION]… –reference=RFILE FILE…

eg#chgrp –reference  files1 files2 files1的屬組複製給files2,讓兩個文件的屬組一樣

 5、熟記常用權限所對應的八進制數、特殊權限數字法:

     常用權限                  SUID SGID STICKY

—   000  0                    000   0

–x   001  1                    001   1

-w-   010   2                 010   2

-wx  011   3                  011   3

r–  100   4                    100   4

r-x  101   5                   101   5

rw-  110   6                  110   6

rwx  111   7                  111   7

例如:640: rw-r—– rwxr-xr-x: 755 chmod 4777 /tmp/a.txt

 6、文件權限修改命令chmod的使用:

命令格式一:chmod  [OPTION]… OCTAL-MODE FILE…

常用選項:  -R: 遞歸修改權限

 命令格式二:chmod[OPTION]… MODE[,MODE]… FILE…

修改一類用戶的所有權限(rwx):

u= g= o= ug= a= u= ,g= u=,o= (uo=)g= ,o= (go=)

eg: chmod u=wx files

 修改一類用戶某位或某些位權限(rwx):

u+ u- g+ g-o+o-a+ a-

eg:chmod u+wx files

 chmod[OPTION]… –reference=RFILE FILE…

eg#chmod –reference  files1 files2 files1的權限複製給files2,讓兩個文件的權限一樣

 chmod -R +r 目錄  all 全部都增加相應的權限

chmod -R +w 目錄  只有所有者會增加相應的權限

chmod -R +x 目錄  all 全部都增加相應的權限 

 事例:

chgrp sales testfile    更改testfile的默認屬組爲sales

chown root:admins testfile 更改testfile的默認屬主爲root,屬組爲admins

chmod u+wx,g-r,o=rx file  file的屬主增加寫和執行的權限,屬組去掉讀的權限;其他的增加讀和執行權限

chmod -R g+rwX /testdir   testdir目錄以及目錄所有子目錄的屬組增加讀寫執行權限,而文件目錄及子目錄下的文件屬組只是增加了相應的讀寫權限而不增加執行權限(-R遞歸)

chmod 600 file       給文件更改爲600的權限,rw——–

chown mage testfile    將文件testfile的屬主更改爲mage

 注意:上面事例中所提到的大寫-X選項,如果想要使用,前提的條件是目錄及子目錄下的文件,無論是屬主、屬組或者其他權限位上都不能夠存有執行的權限x,否則執行命令chmod –R g+rwX files,雖然目錄、子目錄、原來沒有帶x權限的文件也不會增加執行的權限,但是原本存有x權限的文件(屬主、屬組、其它 任何一項存有x,都會把文件的所有權限位都增加上x的執行權限。

八、新建文件和目錄的默認權限:

umask值可以用來保留在創建文件權限

新建文件權限: 666-umask

如果所得結果某位存在執行(奇數)權限,則將其權限+1

 默認權限=最大權限-umask

文件:發現結果又奇數權限+1,偶數權限不變。目錄不變。 

    666 —110110110

umask=137 —001011111   

666-137=53-1)——將53-1的每一個位全部都一一對應加上1,即得到640的權限值。     

 屏蔽:—110100000  (由6661101101110從左往右去匹配umask0010111111遇到0不變,0遇到10,1遇到10 

新建目錄權限: 777-umask

非特權用戶umask002

rootumask022 

umask命令的使用:

umask: 查看用戶的umask

umask #: 設定umask值(此設置爲臨時設置,永久生效需要更改配置文件)eg: #umask 002

umask –S 模式方式顯示

umask –p 輸出可被調用

全局設置:/etc/bashrc用戶設置:~/.bashrc(修改完成後,執行..bashrc,無需登錄即刻生效) 

九、Linux文件系統上的特殊權限:SUID, SGID, Sticky

1、前面我們瞭解和學習了文件系統上的三種常用權限:r, w, x user, group, other,下面我們學習文件系統上的特殊權限。 

2、安全上下文:

前提:進程有屬主和屬組;文件有屬主和屬組

(1) 任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有執行權限

(2) 啓動爲進程之後,其進程的屬主爲發起者;進程的屬組爲發起者所屬的組

(3) 進程訪問文件時的權限,取決於進程的發起者

(a) 進程的發起者,同文件的屬主:則應用文件屬主權限

(b) 進程的發起者,屬於文件屬組;則應用文件屬組權限

(c) 應用文件“其它”權限 

3、可執行文件上SUID權限:

任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有執行權限

啓動爲進程之後,其進程的屬主爲原程序文件的屬主

SUID只對二進制可執行程序有效

SUID設置在目錄上無意義

權限設定:chmod u+s FILE… chmod u-s FILE… 

4、可執行文件上SGID權限:

任何一個可執行程序文件能不能啓動爲進程:取決發起者對程序文件是否擁有執行權限

啓動爲進程之後,其進程的屬主爲原程序文件的屬組

權限設定:chmod g+s FILE… chmod g-s FILE… 

5、目錄上的SGID權限:

默認情況下,用戶創建文件時,其屬組爲此用戶所屬的主組

一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組爲此目錄的屬組

通常用於創建一個協作目錄

權限設定:chmod g+s DIR… chmod g-s DIR… 

6Sticky 位(粘滯鍵):

具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權

在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件

sticky 設置在文件上無意義

權限設定:chmod o+t DIR… chmod o-t DIR…

例如:eg#ls-ld/tmpd —— rwxrwxrwt 12 rootroot 4096 Nov215:44 /tmp 

7、瞭解特殊權限位的映射:(suid–4S)作用於二進制程序上上;sgid–2S)當作用於二進制的程序上,用戶運行該程序時,自動繼承該程序所屬組的權限;當作用於目錄上時,該目錄內新建的文件或子目錄所對應的所屬組自動繼承該目錄的所屬組(chgrp groupname dirchmod g+s dir);sticky 粘滯位(t–1,只能作用於目錄上,作用於文件上沒有任何的意義。

SUID: user,佔據屬主的執行權限位

s: 屬主擁有x權限(如下圖,原本的fs文件chesfer用戶是無法讀取的,當我們使用命令#chmod u+s /bin/cat 後,再次chesfer用戶去讀取fs文件時,發現可以讀取fs文件裏面的內容了,這是用戶chesfer繼承了文件屬主root的執行權限了)

S:屬主沒有x權限

11.png

11.png

11.png

11.png

SGID: group,佔據屬組的執行權限位

s: group擁有x權限(其他用戶[不需要在屬組內],也能夠擁有執行的權限,會自動繼承屬組的所有權限)

Sgroup沒有x權限(作用於二進制文件時,如下圖,原本的fs文件chesfer用戶是無法讀取的,當我們使用命令#chmod g+s /bin/cat 後,再次chesfer用戶去讀取fs文件時,發現可以讀取fs文件裏面的內容了,這是用戶chesfer繼承了文件屬組root的執行權限了)

11.png

11.png

11.png

11.png

自動繼承屬組:

11.png

11.png

11.png

Sticky: other,佔據other的執行權限位

t: other擁有x權限(其他用戶雖然對目錄擁有讀寫執行的權限,但不能將他人的文件進行刪除,只能root和文件的屬主能夠擁有刪除的權限)

Tother沒有x權限

如下圖,f1文件的屬主和屬組都是wang用戶,f2文件的屬主和屬組都是tom用戶,當我們使用命令#chmod o+t /testdir時,tom用戶雖然對/testdir目錄擁有讀寫執行權限,但此時已經無法將用戶wang創建的文件進行刪除了。

11.png

11.png

other權限位出現T時,other是沒有x權限的。

blob.png

8、設定文件特定屬性:

chattr +A chattr –A 鎖定和解除文件atime的刷新)

chattr +i 不能刪除,改名,更改

11.png

chattr +a 只能增加

11.png

lsattr 顯示特定屬性

十、上面學習了Linux文件系統上的權限以及特殊權限:user, group, otherSUID, SGID, Sticky;但是該權限上的設置只能限制於屬主、屬組和其他(單一限制);如果出現一個用戶需要設置權限,該用戶既不是屬主也不是屬組,其他的權位上對other用戶做了統一的權限,但這個用戶又要比other的權限多一些,這時就無法達到所需的權限設置了。

由於傳統的權限有侷限性,這時,我們需要引入訪問控制列表——ACLAccess Control List),實現靈活的權限管理。

ACL:除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限。

CentOS7.0默認創建的xfsext4文件系統有ACL功能。

CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL功能。需手動增加:tune2fs –o acl/dev/sdb1mount –o acl/dev/sdb1 /mnt

ACL生效順序:所有者,自定義用戶,自定義組,其他人

 1、訪問控制列表:爲多用戶或者組的文件和目錄賦予訪問權限rwx

mount -o acl /directory 讓系統中整個分區具有acl的功能

getfacl file |directory  查看文件或者目錄的acl權限設置詳細

setfacl -m u:wang:rwx file|directory 指定現有的文件或目錄對用戶wang設置有讀寫執行權限

setfacl -Rm g:sales:rwX directory    對目錄下的子目錄自動繼承組sales的的讀寫執行權限,而文件只會繼承讀寫權限不會繼承執行權限。

setfacl -M file.acl file|directory  調用寫好的權限設置配置文件(格式:user::rw-)來進行對文件或者文件夾設置權限

setfacl -m g:salesgroup:rw file| directory 對指定的文件或者目錄設置屬組具有讀寫權限

setfacl -m d:wang:rx file|directory  d是默認的意思,該命令執行後對於目錄下新建的文件會自動讓wang用戶具有讀寫的權限,對舊文件不影響;對新建的子目錄或者子目錄下的新建文件也會同樣繼承相應的權限設置

setfacl -x u:wang file |directory  刪除文件或目錄對用戶wangacl權限

setfacl -X file.acl directory    調用寫好的取消用戶權限設置配置文件(格式:u:user)來進行對文件或者文件夾取消權限

setfacl -b file|directory  全部清空文件或目錄的acl權限設置

11.png

2ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限:

getfacl可看到特殊權限:flags

默認ACL權限給了x,文件也不會繼承x權限。

base ACL 不能刪除

setfacl -k dir 刪除默認ACL權限

setfacl -b file1清除所有ACL權限

getfacl file1 | setfacl –set-file=-file2 複製file1acl權限給file

mask隻影響除所有者和other的之外的人和組的最大權限

mask需要與用戶的權限進行邏輯與運算後,才能變成有限的權限(Effective Permission)

用戶或組的設置必須存在於mask權限設定範圍內纔會生效:setfacl-m mask::rxfile ,溢出的權限會失效,一句話就是設置的權限不能夠超出mask的值。

11.png

–set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以.如:

setfacl –set u::rw,u:wang:rw,g::r,o::-file1

 3、備份和恢復ACL

主要的文件操作命令cpmv都支持ACL,只是cp命令需要加上-p 參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息

#getfacl -R /tmp/dir1 > acl.txt  將指定目錄的acl設置導出到備份文件中

#setfacl -R -b /tmp/dir1 遞歸刪除指定目錄下的所有acl設置

#setfacl -R –set-file=acl.txt /tmp/dir1  將備份的acl設置遞歸還原到目錄上生效

#getfacl -R /tmp/dir1 遞歸查看目錄下的所有acl設置詳細


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章