權限linux
1、文件的基本權限centos
所謂的權限就是用戶訪問文件的能力,文件的基本權限包括 r(讀),write(寫),x(可執行)。bash
用ls -ld file 查看文件的權限屬性:
ide
drwxr-xr-x 4 root root 4096 Jul 3 21:29 fileoop
drwxr-xr-x:說明文件類型,常見的文件類型有:d 目錄文件,l 連接文件,c 線性設備文件,b 塊設備文件,s sorket文件,- 通常文件,p 管道文件ui
drwxr-xr-x:此文件(目錄)屬主用戶權限spa
drwxr-xr-x:此文件(目錄)屬組用戶權限server
drwxr-xr-x:此文件(目錄)其餘用戶權限對象
1)權限對於目錄和文件具體含義以下:
進程
目錄:
r:能夠用ls命令查看目錄中的文件列表(用ls -l參數也不能查看裏面的內容)
w:能夠在目錄中建立和刪除文件
x:能夠cd到此目錄中,而且可使用ls -l顯示此文件的元數據信息
文件:
r:能夠查看文件內容
w:可修改文件內容
x:能夠將此文件作爲一個腳本執行
2)用戶訪問文件時的權限模型:
if(運行程序的屬主 = 此程序正在訪問文件的屬主)
以屬主的身份權限訪問文件;
else if(運行程序的屬組 = 此程序正在訪問文件的屬組)
以屬組的身份權限訪問文件;
else
以其餘用戶身份權限訪問;
3)常見的文件權限管理命令
chmod 改變文件權限
Usage:chmod [選項]... 模式[,模式]... 文件...
或:chmod [選項]... 八進制模式 文件...
或:chmod [選項]... --reference=參考文件 文件...
操做對象 | 權限設定 | 權限值 | 示例 |
u 文件屬主權限 g 同組用戶權限 o 其它用戶權限 a 全部用戶(包括以上三種) |
+ 增長權限 - 取消權限 = 惟一設定權限 |
r-->4 w-->2 x-->1 |
一、修改/tmp/test文件屬主的權限是rwx,屬組的權限是r-x,其餘用戶權限r-x chmod 755 /tmp/test 或者:chmod u=rwx,go=r-x /tmp/test 二、在1問題的基礎上,屬主,屬組,其餘用戶都要去掉x權限 chmod a-x /tmp/test 或者:chmod u-x,g-x,o-x /tmp/test 或者:chmod 644 /tmp/tes 三、修改/tmp/test1目錄文件的屬主的權限是rwx,屬組的權限是r-x,其餘用戶權限r-x,以及所在目錄下全部文件都是此權限 chmod -R 755 /tmp/test1 或者:chmod -R u=rwx,go=r-x /tmp/test1 四、在問題1基礎上,屬組的權限變爲rwx chmod 775 /tmp/test 或者:chmod g+w /tmp/test 五、以/tmp/test的權限爲基準,讓/tmp/test2文件的權限和他同樣 chmod --reference=/tmp/test /tmp/test2 |
通常狀況下,可根據我的喜愛程度選擇一種修改權限的模式。 umask:設置系統默認掩碼,在新文件或目錄首次建立時的權限。 對目錄來講,新建立的目錄權限是 777-umask_value;對於文件來講,新建立的文件權限是666-umask_value.
[root@server test]# umask 0022 [centos@server test]$ umask 0002 [centos@server test]$ id centos uid=500(centos) gid=500(centos) groups=500(centos),600(magedu) [mandriva@server ~]$ umask 0022 [mandriva@server ~]$ id uid=4400(mandriva) gid=3302(linux) groups=3302(linux),2201(gentoo),3300(distro),3301(peguin)
管理員和普通用戶的掩碼通常都不相同。對於屬組和屬主用戶名相同的,新建立的文件或目錄的掩碼值是0002;對於屬組和屬主用戶名不相同的,新建立的文件或目錄的掩碼值與管理員用戶的掩碼值同樣是0022。
2、特殊權限
特殊權限由三種:suid,sgid,sticky。引入特殊權限是爲了更好的管理文件或者說爲了實如今某種特使狀況下的需求。下面對着三種特殊權限意義說明。
特殊權限 | 具體意義 | 示例 |
suid | 設置前提:文件屬主具備x權限 此設置通常是對命令設置的,設置此特殊權限後,在執行此命令是否是一發起者進程的用戶運行,而是以次命令文件的屬主運行。 chmod u+s /path/to/somefile |
最典型的例子是:passwd這個命令。 咱們發現普通用戶也是能夠修改本身的密碼的,其實是將密碼信息寫入到/etc/shadow文件中去,而這個文件是沒有任何權限的。這就是suid的做用,普通用戶在設置密碼時候,其實是一passwd命令的屬主用戶root身份執行的 |
sgid | 設置前提:文件屬組具備x權限 此設置通常用法是對目錄進行設置的,設置了這個權限以後,之後再這個目錄下所創建的任何文件的屬組都和這個目錄的屬組同樣。 chmod g+s /path/to/somefile |
例如: 某公司開發項目時,須要將每一個人寫的代碼文件都歸屬到同一個組當中,方便你們查看。 |
stiky | 設置前提:文件其餘具備x權限 此設置的做用是用戶只能本身建立的文件 chmod o+t /path/to/somefile |
例如: 在上一個示例中,每一個人均可以刪除其餘人上傳的代碼,這是咱們不肯意看到的,因此在設置了stiky位後,每一個人只能刪除本身的文件 |
練習:
一、讓普通用戶使用/tmp/cat能查看管理員纔有權限訪問的文件;
[root@server ~]#cp `which cat` /tmp/cat [root@server ~]#chmod u+s /tmp/cat [root@server ~]#su - centos [centos@server ~]#/tmp/cat /etc/shadow #能夠看到/etc/shadow的內容
二、新建目錄/project/test,讓普通用戶hadoop和openstack對此目錄都能建立文件,且建立的文件的屬組爲此目錄的屬組,而非用戶自身的屬組,此外還要求,每一個用戶不能刪除其它人的文件;
[root@server ~]#mkdir -p /project/test [root@server ~]#chmod g+s /project/test [root@server ~]#chmod o+t /project/test
3、ACL(Access Control List)機制
在這樣的狀況下:某一公司中的財務表,通常狀況下,在財務部門中的職員A創建的財務表本人能夠讀寫,屬組(在財務部門的職員)能夠查看A職員財務表,其餘人沒有任何權限更改或者查看A職員的財務表。那麼,做爲公司的CEO或者說是頭,難道也沒有權限查看這個財務表嗎?顯然這是不符合咱們的要求的,ACL機制的出現就解決了這樣的問題。
facl(File Access Control List):文件訪問控制列表,它的主要做用是針對某些特定讓普通用戶設定專有的權限的一種機制,與文件原來的屬主、屬組、其餘、特殊權限沒有任何衝突。至關於在文件原有的權限基礎上,針對某些用戶設定的擴展權限。
查看和設置文件ACL屬性的命令是:getfacl和setfacl,具體的經常使用用法以下:
getfacl | getfal 文件名 | getfacl /etc/passwd 查看/etc/passwd文件的acl屬性 |
setfacl | setfacl {-m|-x} 目標:MODE FILE... | 設置centos用戶對/etc/fstable的acl屬性 setfacl -m u:centos:rw- /etc/fstable 設置centos組對/etc/fstable的acl屬性 setfacl -x g:centos /etc/fstable file2文件參照file1文件的acl權限 getfacl file1 | setfacl --set-file=- file2 |
注意:acl機制是在建立文件系統時添加的屬性,若是在建立文件系統時,沒有添加此屬性,在這裏就不能使用acl機制。
加入acl機制後用戶訪問文件時的權限模型:(假語言表示)
if(運行程序的屬主 = 此程序正在訪問文件的屬主 || 運行程序的屬主有acl機制)
以屬主的身份權限訪問文件;(運行程序的屬主 = 此程序正在訪問文件的屬主)
用戶級別的facl(運行程序的屬主有acl機制);
else if(運行程序的屬組 = 此程序正在訪問文件的屬組 || 運行程序的屬組有acl機制)
以屬組的身份權限訪問文件(運行程序的屬組 = 此程序正在訪問文件的屬組);
用戶級別的facl(運行程序的屬組有acl機制);
else
以其餘用戶身份權限訪問;
解決開始引入的問題:
#財務組A職員用戶是Alex,她屬組是FinaDept。公司經理用戶是boss [root@server ~]# mkdir -p /test/FinaDept/ [root@server ~]# chown .FinaDept /test/FinaDept/ [root@server ~]# chmod 3777 /test/FinaDept/ #Alex用戶所建立的文件 [Alex@server FinaDept]$ touch fina.txt [Alex@server FinaDept]$ ll total 0 -rw-r----- 1 Alex FinaDept 0 Jul 12 00:41 fina.txt #boss用戶沒有設置acl機制以前 [boss@server FinaDept]$ cat fina.txt cat: fina.txt: Permission denied #設置acl以後 [Alex@server FinaDept]$ setfacl -m u:boss:r-- fina.txt [Alex@server FinaDept]$ getfacl fina.txt # file: fina.txt # owner: Alex # group: FinaDept user::rw- user:boss:r-- group::r-- mask::rw- other::--- ##boss用戶只能查看,不能修改 [boss@server FinaDept]$ cat fina.txt a:123 b:1234 [boss@server FinaDept]$ echo "c:234" >> fina.txt -bash: fina.txt: Permission denied