上一篇講到了用戶與用戶組,相信大家都明白了Linux中用戶與用戶組的含義和用處,那接下來講的就是Linux中設置用戶與用戶組有使用權限。
Linux用戶權限
何為權限,權限(privilege)是指某個特定的用戶具有特定的系統資源使用權力,而權限又有哪幾種呢。
Linux用戶中主要針對三類著三種權限:讀、寫、執行,而Linux中存在著目錄與文件,而目錄的權限代表的含義與文件卻又不一樣,接下對目錄與文件的權限詳解:
文件的權限和屬主屬組主要針對三類對象進行定義:
owner:屬主, u group: 屬組, g other: 其他, o
r: 可以使用ls查看此目錄中文件列表 w: 可在此目錄中創建文件,也可刪除此目錄中的文件 x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此目錄 X:只給目錄x權限,不給文件x權限
每個文件針對每類訪問者都定義了三種權限:
r: Readable w: Writable x: eXcutable
r: 可使用文件查看類工具獲取其內容 w: 可修改其內容 x: 可以把此文件提請內核啟動為一個進程
如何查看文件的權限有屬于那些用戶呢,請看下圖:
從上圖可以看出普通文件"install.log"的屬主(所有者)為root,而屬主的權限為讀(r)寫(w)權限,屬組(所屬組)也為root,屬組的權限為讀(r),而其他用戶的權限為讀(r),(對于root超級管理員而言,實際是有任何的權限),用數字表示該用戶的權限應為"0644",為何會有0呢,"0"這個數字是特殊權限,下面將會將特殊權限,而數字表示簡寫為"644",如何對文件添加權限和文件的屬主屬組呢,Linux系統中有很多命令是給用戶加權限的,但是有兩個常用的命令對文件添加權限和屬主和屬組:
chown命令
簡介: chown - change file owner and group
格式: chown [OPTION]... [OWNER][:[GROUP]] FILE... chown [OPTION]... --reference=RFILE FILE...
選項: -R: 遞歸
實例1: [root@centos6 ~]# id user1 uid=3000(user1) gid=3000(user1) groups=3000(user1) [root@centos6 ~]# ls -l install.log -rw-r--r--. 1 root root 45324 Aug 5 19:24 install.log [root@centos6 ~]# chown user1.user1 install.log #將普通文件"install.log"的屬主和屬組更改為user1用戶 [root@centos6 ~]# ls -l install.log -rw-r--r--. 1 user1 user1 45324 Aug 5 19:24 install.log
chgrp 命令
簡介: chgrp - change group ownership
格式: chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE...
選項: -R:遞歸
實例1: [root@centos6 ~]# ls -l install.log -rw-r--r--. 1 user1 user1 45324 Aug 5 19:24 install.log [root@centos6 ~]# man chgrp [root@centos6 ~]# chgrp root install.log #只更改普通文件"install.log"的屬組為root [root@centos6 ~]# ls -l install.log -rw-r--r--. 1 user1 root 45324 Aug 5 19:24 install.log
chmod 命令
簡介: chmod - change file mode bits
格式: chmod [OPTION]... MODE[,MODE]... FILE... chmod [OPTION]... OCTAL-MODE FILE... chmod [OPTION]... --reference=RFILE FILE...
選項: -R: 遞歸修改權限 --reference=RFILE FILE...: 參考RFILE文件的權限,將FILE的修改為同RFILE;
字母加添法: 修改一類用戶的所有權限: u= g= o= ug= a= u=,g= 修改一類用戶某位或某些位權限 u+ u-g+ g-o+ o-a+ a-+ -
實例1: [root@centos6 ~]# ls -l install.log -rw-r--r--. 1 user1 root 45324 Aug 5 19:24 install.log [root@centos6 ~]# chmod ug=rwx install.log #給普通文件"install.log"的屬主屬組添加r(讀)w(寫)x(執行)權限 [root@centos6 ~]# ls -l install.log -rwxrwxr--. 1 user1 root 45324 Aug 5 19:24 install.log
給用戶添加權限還有一種方式為數字修改法,而數字添加總共有幾種模式呢,請看下面:
這種表示法為八進制:
--- 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----- rwxr-xr-x: 755
那在這里很多人就問了,創建文件和目錄的權限是多少呢,實際是由文件或目錄的"默認權限-umask",何為umask,(Tips:超級管理員的目錄的默認權限為777,文件的默認權限為666,umask是0022;非特權用戶umask是0002)
umask 命令
簡介: Display or set file mode mask.
格式: umask [-p] [-S] [mode]
選項: –S:模式方式顯示 –p:輸出可被調用
實例1: [root@centos6 ~]# umask -p umask 0022 [root@centos6 ~]# umask -S u=rwx,g=rx,o=rx
實例2: [root@centos6 ~]# umask 0002 [root@centos6 ~]# umask 0002
而umask的默認值的定義是由配置文件定義的:
[root@centos6 ~]# grep -C5 'umask' /etc/bashrc PATH=$1:$PATH fi esac } # By default, we want umask to get set. This sets it for non-login shell. # Current threshold for system reserved uid/gids is 200 # You could check uidgid reservation validity in # /usr/share/doc/setup-*/uidgid file if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then #當前登錄的用戶名的UID是否大于199和當前用戶的id名稱與當前用戶的基本組id是否一致,如果兩種情況滿足,umask就是002,如果其中一個不滿足,uamsk就是022 umask 002 else umask 022 fi # Only display echos from profile.d scripts if we are no login shell # and interactive - otherwise just process them to set envvars for i in /etc/profile.d/*.sh; do
可以在個人配置文件中定義
用戶設置:~/.bashrc 全局設置:/etc/bashrc
Linux用戶的特殊權限
特殊權限:SUID, SGID, Sticky 三種常用權限:r, w, x user, group, other
安全上下文 前提:進程有屬主和屬組;文件有屬主和屬組 (1) 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限 (2) 啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組 (3) 進程訪問文件時的權限,取決于進程的發起者 (a) 進程的發起者,同文件的屬主:則應用文件屬主權限 (b) 進程的發起者,屬于文件屬組;則應用文件屬組權限 (c) 應用文件“其它”權限
文件上的特殊權限:SUID, SGID, Sticky
特殊權限:SUID
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限 啟動為進程之后,其進程的屬主為原程序文件的屬主 SUID只對二進制可執行程序有效 SUID設置在目錄上無意義 權限設定:chmodu+sFILE...;chmodu-s FILE...
特殊權限:SGID
任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限 啟動為進程之后,其進程的屬主為原程序文件的屬主 SUID只對二進制可執行程序有效 SUID設置在目錄上無意義 權限設定:chmodu+sFILE...;chmodu-s;FILE...
目錄上的特殊權限:SUID, SGID, Sticky
默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組 一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組 通常用于創建一個協作目錄 權限設定:chmodg+sDIR...;chmodg-s DIR...
特殊權限:Sticky 位
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權 在目錄設置Sticky 位,只有文件的所有者或root可以刪除該文件 sticky 設置在文件上無意義 權限設定:chmodo+tDIR...;chmodo-t DIR...
例如: ls-ld/tmp drwxrwxrwt12rootroot4096Nov215:44/tmp
因此特殊權限數字法也是有八種模式
000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 寫法:chmod4777 /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、lsattr命令
chattr 命令
簡介: chattr - change file attributes on a Linux file system
格式: chattr [ -RVf ] [ -v version ] [ mode ] files...
實例1: chattr +i 不能刪除,改名,更改 [root@centos6 ~]# chattr +i anaconda-ks.cfg [root@centos6 ~]# rm anaconda-ks.cfg rm: remove regular file `anaconda-ks.cfg'? y rm: cannot remove `anaconda-ks.cfg': Operation not permitted [root@centos6 ~]# mv anaconda-ks.cfg anaconda-ks.cfg.bak mv: cannot move `anaconda-ks.cfg' to `anaconda-ks.cfg.bak': Operation not permitted [root@centos6 ~]# echo "abc" > anaconda-ks.cfg -bash: anaconda-ks.cfg: Permission denied
lsattr 命令
簡介: lsattr - list file attributes on a Linux second extended file system
格式: lsattr [ -RVadv ] [ files... ]
實例1: [root@centos6 ~]# lsattr anaconda-ks.cfg ----ia-------e- anaconda-ks.cfg
訪問控制列表
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
mount -o acl /directory getfacl file |directory setfacl -m u:wang:rwx file|directory setfacl -Rm g:sales:rwX directory setfacl -M file.acl file|directory setfacl -m g:salesgroup:rw file| directory setfacl -m d:u:wang:rx directory setfacl -x u:wang file |directory setfacl -X file.acl directory
ACL中的權限設置
ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限 getfacl可看到特殊權限:flags 默認ACL權限給了x,文件也不會繼承x權限。 base ACL 不能刪除 setfacl-k dir 刪除默認ACL權限 setfacl-b file1清除所有ACL權限 getfaclfile1 | setfacl--set-file=-file2 復制file1的acl權限給file2
ACL中的權限定義
mask只影響除所有者和other的之外的人和組的最大權限 Mask需要與用戶的權限進行邏輯與運算后,才能變成有限的權限(Effective Permission) 用戶或組的設置必須存在于mask權限設定范圍內才會生效。setfacl-m mask::rxfile --set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以.如: setfacl --set u::rw,u:wang:rw,g::r,o::-file1
備份和恢復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
原創文章,作者:Aleen,如若轉載,請注明出處:http://www.www58058.com/29809