用戶組和權限管理
一、了解和使用批量新建用戶和批量修改用戶密碼:
##用戶創建的模板和配置文件的存放位置:/etc/default/useradd;/etc/skel/* ;/etc/login.defs##
批量新建用戶(newusers):適合用于新老機器轉換時,遷移系統上的用戶。
使用格式:
newusers passwd filename(.txt格式) ——批量創建用戶
命令格式:newuser filename
使用該方法批量創建的新用戶其實并沒有設置密碼的,但使用命令#getent shadow user1 user2 user3 user4 user5 user6 user7查看用戶存放密碼的配置文件顯示是已經生成了密碼;因此,我們需要給批量新建的用戶初始化口令。
格式文件,可參考下圖的格式一一對應在文本中編輯好:
用戶名:X(密碼):UID:GID:用戶描述:用戶的家目錄位置:用戶的默認shell
上面批量新建的用戶由于并沒有口令,所以我們使用如下的方法同樣給新建的用戶設置口令(口令可以不一樣)。批量修改密碼:(chpasswd)
命令格式:cat filename | chpasswd
filename(.txt格式) 的格式如下:
username:passwd
同樣,我們回顧下給單一用戶修改口令,命令為:#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
用戶的刪除:
命令格式:userdel [OPTION]… login
如果需要將用戶的家目錄也刪除掉的話,則多加如下的選項即可:
-r: 刪除用戶家目錄;
三、查看用戶相關的ID信息:
命令格式:id [OPTION]… [USER]
命令選項:
-u: UID
-g: GID
-G: Groups
-n: Name(該選項需要結合以上的各個選項一同使用,不可單獨使用,否則出錯。)
四、切換用戶或以其它用戶身份執行命令:
命令格式:su [options…] [-] [user [args…]]
切換用戶的方式:
su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄
su -UserName:登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換
root 切換至其他用戶無須密碼;非root用戶切換時需要密碼
換個身份執行命令:(直接使用Username的身份去執行命令,避免了來回切換用戶的麻煩。)
su [-] UserName -c 'COMMAND'
選項:-l –login:
su -l UserName相當于su -UserName
五、了解和使用passwd來對用戶的設置,以及修改用戶密碼策略:
1、passwd對用戶的設置:
命令格式:passwd [OPTIONS] UserName (修改指定用戶的密碼,僅root用戶權限)
passwd: 修改自己的密碼;
常用選項:
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
-i inactivedays:非活動期限;
–stdin:從標準輸入接收用戶密碼;
修改單一用戶的密碼,命令如下:
echo "PASSWORD" | passwd—stdinUSERNAME或者echo username:passwd | 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,顯示密碼策略
下一次登錄強制重設密碼:chage -d 0 chesfer
chage -m 0 –M 42 –W 14 –I 7 chesfer
chage -E 2016-09-10 chesfer
其他操作命令:chfn指定個人信息;chsh指定shell;finger
六、組的創建、修改、刪除等操作:
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;
3、刪除組:(groupdel)刪除組的條件是該組成員為空。
groupdel GROUP
4、組密碼設置:(gpasswd)
命令格式:gpasswd [OPTION] GROUP
常用選項:
-a user: 將user添加至指定組中,用于老用戶的修改;
-d user: 從指定組中移除用戶user
-A user1,user2,…: 設置有管理權限的用戶列表
newgrp命令:臨時切換基本組;如果用戶本不屬于此組,則需要組密碼
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。
文件的權限有3組,分別為owner(屬主),group(屬組),other(其他),每一組都有rwx三種設置。
文件: 目錄:
r(4):可讀,可使用文件查看類工具獲取其內容; 可以使用ls查看此目錄中文件列表
w(2):可修改其內容:可寫; 可在此目錄中創建文件,也可刪除此目錄中的文件
x(1):可執行,可把此文件提請內核啟動為一個進程。 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄
X:只給目錄x權限,不給文件x權限(詳見下面的事例及注意點處)
文件操作權限命令:chmod
2、第一個是特殊位:d表示目錄;l表示連接文件;–表示普通文件;b表示為裝置(device)文件中可供存儲的接口設備;c表示為裝置文件中的串行端口設備(如鍵盤,鼠標);s表示該文件是存放socket信息的; p表示數據輸送文件(FIFO,pipe),它的主要目的是為了解決多個程序同時存取一個文件時所造成的錯誤。
3、其后面的的9個格子按照之前所說的3個組依次分配,給每個組設置讀,寫,執行權限。在這里要注意:如果你想開放一個目錄,一定要確定X即可執行權限已經賦予了該用戶或群,否則是不可以讀寫的,也就是說,你給的r,w是沒意義的。
文件屬性操作: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…
修改一類用戶的所有權限(r、w、x):
u= ;g= ;o=; ug= ;a= ;u= ,g= ;u=,o= (uo=);g= ,o= (go=)
eg: chmod u=wx files
修改一類用戶某位或某些位權限(r、w、x):
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 (由666的1101101110從左往右去匹配umask的001011111,1遇到0不變,0遇到1變0,1遇到1變0)
新建目錄權限: 777-umask
非特權用戶umask是002
root的umask是022
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…
6、Sticky 位(粘滯鍵):
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件
sticky 設置在文件上無意義
權限設定:chmod o+t DIR… ;chmod o-t DIR…
例如:eg:#ls-ld/tmpd —— rwxrwxrwt 12 rootroot 4096 Nov215:44 /tmp
7、了解特殊權限位的映射:(suid–4(S)作用于二進制程序上上;sgid–2(S)當作用于二進制的程序上,用戶運行該程序時,自動繼承該程序所屬組的權限;當作用于目錄上時,該目錄內新建的文件或子目錄所對應的所屬組自動繼承該目錄的所屬組(chgrp groupname dir;chmod g+s dir);sticky 粘滯位(t)–1,只能作用于目錄上,作用于文件上沒有任何的意義。)
SUID: user,占據屬主的執行權限位
s: 屬主擁有x權限(如下圖,原本的fs文件chesfer用戶是無法讀取的,當我們使用命令#chmod u+s /bin/cat 后,再次chesfer用戶去讀取fs文件時,發現可以讀取fs文件里面的內容了,這是用戶chesfer繼承了文件屬主root的執行權限了)
S:屬主沒有x權限
SGID: group,占據屬組的執行權限位
s: group擁有x權限(其他用戶[不需要在屬組內],也能夠擁有執行的權限,會自動繼承屬組的所有權限)
S:group沒有x權限(作用于二進制文件時,如下圖,原本的fs文件chesfer用戶是無法讀取的,當我們使用命令#chmod g+s /bin/cat 后,再次chesfer用戶去讀取fs文件時,發現可以讀取fs文件里面的內容了,這是用戶chesfer繼承了文件屬組root的執行權限了)
自動繼承屬組:
Sticky: other,占據other的執行權限位
t: other擁有x權限(其他用戶雖然對目錄擁有讀寫執行的權限,但不能將他人的文件進行刪除,只能root和文件的屬主能夠擁有刪除的權限)
T:other沒有x權限
如下圖,f1文件的屬主和屬組都是wang用戶,f2文件的屬主和屬組都是tom用戶,當我們使用命令#chmod o+t /testdir時,tom用戶雖然對/testdir目錄擁有讀寫執行權限,但此時已經無法將用戶wang創建的文件進行刪除了。
other權限位出現T時,other是沒有x權限的。
8、設定文件特定屬性:
(chattr +A 或chattr –A 鎖定和解除文件atime的刷新)
chattr +i 不能刪除,改名,更改
chattr +a 只能增加
lsattr 顯示特定屬性
十、上面學習了Linux文件系統上的權限以及特殊權限:user, group, other,SUID, SGID, Sticky;但是該權限上的設置只能限制于屬主、屬組和其他(單一限制);如果出現一個用戶需要設置權限,該用戶既不是屬主也不是屬組,其他的權位上對other用戶做了統一的權限,但這個用戶又要比other的權限多一些,這時就無法達到所需的權限設置了。
由于傳統的權限有局限性,這時,我們需要引入訪問控制列表——ACL(Access Control List),實現靈活的權限管理。
ACL:除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限。
CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。
CentOS7.X之前版本,默認手工創建的ext4文件系統無ACL功能。需手動增加:tune2fs –o acl/dev/sdb1;mount –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 刪除文件或目錄對用戶wang的acl權限
setfacl -X file.acl directory 調用寫好的取消用戶權限設置配置文件(格式:u:user)來進行對文件或者文件夾取消權限
setfacl -b file|directory 全部清空文件或目錄的acl權限設置
2、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權限給file
mask只影響除所有者和other的之外的人和組的最大權限
mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(Effective Permission)
用戶或組的設置必須存在于mask權限設定范圍內才會生效:setfacl-m mask::rxfile ,溢出的權限會失效,一句話就是設置的權限不能夠超出mask的值。
–set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以.如:
setfacl –set u::rw,u:wang:rw,g::r,o::-file1
3、備份和恢復ACL:
主要的文件操作命令cp和mv都支持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設置詳細
原創文章,作者:Aaron_wang,如若轉載,請注明出處:http://www.www58058.com/27889
文章整體思路清晰,但是層次感不是很清晰,需要對用戶、組、權限等進行清晰的區分,這樣有利于自己以后在復習。