在linux管理中,為了使不同的用戶對文件有不同的操作權限。我們需要正確的修改文件的權限,一方面是為安全著想,
另一方面則是防止自己辛辛苦苦碼出的東西被其它用戶給誤刪。
1.如何修改文件的屬主和屬主:
前面用戶和組管理的內容中,我們已經對文件的屬主、屬組問題做了說明。有時候我們需要對一些文件的屬組和屬組進行修改,
這里會用到兩個命令:chgrp和chown命令。
(1)修改文件的屬組:chgrp
chgrp [OPTION]… GROUP FILE..
chgrp [OPTION]… –reference=RFILE FILE…
-R 遞歸修改文件夾及其下的文件的屬組
(2)修改文件的屬主和屬組:chown
chown [OPTION]…[owner][:[GROUP]] FILE…
用法:
owner
owerner:group
:group
命令中的冒號可用.替換;
-R:遞歸
chown [OPTION]… –reference=RFILE FILE…
2.文件的權限:
文件的權限是文件屬主,屬組及其它用戶擁有對文件的操作權限的顯示。
(1)文件:
r:可使用文件查看類工具獲取其內容
w:可修改其內容
x可以把此文件提請內核啟動為一個進程
(2)目錄:
r:可以使用ls 查看此目錄中文件列表
w:可在此目錄中創建文件,也可刪除此目錄中的文件
x:可以使用ls -l查看此目錄中文件列表,可以cd進入目錄
X:只給目錄x權限,不給文件x權限(在其下創建的目錄都有x權限,而文件沒有)
(3)文件權限數字表示:
r(讀):100:4; w(寫):010:2; x(執行):001:1;
(4)修改文件的權限
chmod命令:
使用方法:
chmod [OPTION]… OCTAL-MODE FILE…
-R:遞歸修改權限
chmod [OPTION]… MODE[,MODE]… FILE…
MODE:
修改一類用戶的所有權限
u= g= ug= a= u=,g=
修改一類用戶某位或某些位權限
u+ u- g+ g- o+ o- a+ a- + –
chmod [OPTION]… –reference=RFILE FILE…
參考RFLE文件權限、,將FILE的修改為同RFILE;
(5)umask:
umask是用來設定新建文件和目錄的默認權限
新建FILE權限:666-umask;如果結果中哪一位存在權限位為奇數情況,則把它的權限+1
新建DIR權限:777-umask
在linux中系統給我們默認的root的umask是022,非root的umask是002
umask命令不加參數可以用來查看系統umask值。umask #:臨時自定義umask的值。永久生效需寫進配置文件
umask -S 模式方式顯示umask,umask -p 輸出可被調用,如:umask -p > /etc/bashrc
全局設置寫入:/etc/bashrc:用戶個人設置則在:~/.bashrc中修改
(6)文件權限相關的課堂練習:
1)當用戶xiaoming對/testdir 目錄無執行權限時,意味著無法做哪些操作?
用戶小明不能進入/testdir,不能刪除,不能創建。使用ll能看到有哪些文件,但是看不到具體信息
2)當用戶xiaoqiang對/testdir 目錄無讀權限時,意味著無法做哪些操作?
不能查看文件夾內部有哪些文件,如果知道文件夾內有哪些,則可以刪除,也可以在里面創建
3)當用戶wangcai 對/testdir 目錄無寫權限時,該目錄下的只讀文件file1是否可修改和刪除?
不能刪除,對目錄無寫權限,說明不能刪除目錄中包含的file1的文件名和inode的對用關系
因為文件只讀,所以也不會有修改權限
如果wangcai對目錄有寫權限,則能夠刪除文件,但是還是不能修改文件
4)復制/etc/fstab文件到/var/tmp下,設置文件所有者為wangcai讀寫權限,所屬組為sysadmins組有讀寫權限,其他人無權限
]# cp /etc/fstab /var/tmp/ ]# groupadd sysadmins ]# chmod 660 fstab ]# ll total 4 -rw-rw---- 1 ci sysadmins 921 Aug 4 20:52 fstab
3.linux文件系統上的特殊權限:
(1)安全上下文
前提:進程有屬主和屬組;文件有屬主和屬組
1)任何一個可執行程序能不能啟動為進程:取決于發起者對程序文件是否擁有執行權限
2)啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組
3)進程訪問文件的權限,取決于進程的發起者
進程的發起者,同文件的屬主:則應用文件屬主權限
進程的發起者,屬于文件屬組;則用用文件屬組權限
應用文件‘其它’權限
(2)可執行文件上SUID權限
1)任何一個可執行程序文件能不能啟動為進程:取決于發起者對程序文件是否擁有執行權限
2)啟動為進程之后,其進程的屬主為原程序文件的屬主
3)SUID只對二進制可執行程序有效
4)SUID設置在目錄上無意義
5)權限設置:
chmod u+/-s FILE…
(3)可執行文件上的SGID權限
1)任何一個可執行文件能不能啟動為進程:取決于發起者對程序文件是否擁有執行權限
2)啟動為進程之后,其進程的屬主為原程序文件的屬組
3)權限設置:
chmod g+/-s FILE…
(4)目錄上的SGID權限
1)默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
2)一旦某目錄被設置了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組
3)通常用于創建協作目錄
4)權限設定:
chmod g+/- DIR…
(5)Sticky位
1)具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該問及愛你的權限或擁有權
2)在目錄設置Sticky位,只有文件的所有者或root可以刪除該文件
3)Sticky設置在文件上無意義
4)權限設置:
chmod o+/-t DIR…
(6)特殊權限數字法:
SUID:4; SGID:2;Sticky:1;
chmod 4777 /tmp/a.txt
特殊權限中的SUID占據屬主的執行權限位,屬主有執行權限則為s,屬主無執行權限則是S
SGID在屬組的執行權限位,也是用s字母表示。屬組有執行權限則為s,屬組無執行權限則是S
Sticky在other的執行位:other有執行權限則是t,other無執行權限則是T
3.設定文件特殊屬性:
命令chattr:設置文件的特殊屬性,對文件的修改做更嚴格的限制
chattr +i 不能刪除,改名,更改
chattr +A 不修改文件的訪問時間(atime不變)
chattr +a 只能增加
lsattr 顯示特定屬性
取消則是把+改為-
4.訪問控制列表:
(1)ACL:Access Control List,實現靈活的權限管理
(2)除了文件的所有者,所屬組和其它人,可以對特定的用戶設置權限
(3)CentOS7.0默認創建的xfs和ext4文件系統有ACL功能。
(4)CentOS7.x之前的版本,默認手工創建的ext4文件系統無acl功能,需要手動添加
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /mnt
(5)ACL生效順序:所有者,自定義用戶,自定義組,其它人
(6)為多用戶或者組文件和目錄賦予訪問權限rwx
mount -o acl /DIR 使掛載在該目錄下的文件系統擁有acl功能
getfacl file|DIR 查看文件或目錄的acl信息
setfacl -m u:wang:rwx file|dir 設置文件或目錄的對wang用戶的權限位讀寫執行
setfacl -Rm g:sales:rwX DIR 遞歸設置組對目錄的訪問權限
setfacl -M file.acl file|dir 以文件的形式批量修改文件或目錄對多個用戶的訪問權限
setfacl -m g:salesgroup:rw file|dir 設置salegroup組對文件或目錄的訪問權限
setfacl -m d:wang:rw dir 設置默認的acl權限,只針對新文件
setfacl -x u:wang file|dir 刪除文件或目錄的acl設置
setfacl -X file.acl dir 批量刪除acl設置
(7)ACL文件上的group權限是mask值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限
(8)默認ACL權限給了x,文件也不會繼承x權限,base ACL不能刪除
(9)setfacl -k dir 刪除默認ACL權限,setfacl -b file1 清除所有ACL權限
(10)getfacl file1|setfacl –set-file=- file2 復制file1的acl權限給file2
(11)mask只影響所有者和other之外的人和組的最大權限,MASK需要和用戶的權限進行邏輯與運算后
才能編程有限的權限(Effective Permission)
用戶或組的設置必須存在與mask權限設定范圍內才能生效
setfacl -m mask::rw file
–set選項會把原有的ACL項都刪除,用新的替代,需要注意的是一定要包含UGO的位置,和-m選項添加ACL有一定區別
setfacl –set u::rw,u:wang:rw,g::r,o::- file1
(12)訪問列表的備份和還原:
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p參數,但是tar等常見的備份工具是不會保留目錄
和文件的ACL信息
getfacl -R /tmp/dir1 > acl.txt 備份dir1目錄下 文件的ACL信息到acl.txt中
setfacl -R -b /tmp/dir1 刪除dir1目錄下文件的acl列表
setfacl -R –set-file=acl.txt /tmp/dir1 恢復dir下的acl列表
getfacl -R /tmp/dir1 遞歸顯示dir1下文件的acl列表
問題:在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。
]# mkdir -p /data/testdir ]# groupadd g1; groupadd g2; groupadd g3 ]# useradd alice;useradd tom 以上為創建目錄、用戶、組的初始化準備工作 ]# gpasswd -a alice g2;gpasswd -a tom g3 ]# setfacl -m d:alice:rw ../testdir # ]# setfacl -m d:tom:r ../testdir ]# setfacl -m d:o:0 ../testdir ]# getfacl ../testdir # file: ../testdir # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:alice:rw- default:user:tom:r-- default:group::r-x default:mask::rwx default:other::--- ]# touch f1 ]# getfacl f1 # file: f1 # owner: root # group: root user::rw- user:alice:rw- user:tom:r-- group::r-x #effective:r-- mask::rw- other::--- [root@CentOS6 testdir]#
原創文章,作者:提著醬油瓶打醋,如若轉載,請注明出處:http://www.www58058.com/29243
對命令的總結很詳細,如果有一些應用場景模擬會讓你對各個權限理解會更深刻哦