本文主要介紹了Linux中的特殊權限和FACL相關知識
Ⅰ 特殊權限
我們一般對linux 檔案和目錄的讀寫執行(rwx)權限應該都比較熟悉,但在這普通權限外還有3個特殊權限SUID(4)、SGID(2)和Sticky(1)。
⒈SUID
(1)概念
SUID針對屬主,如果屬主有S權限,意味着任何使用者在執行此程式時,其程序的屬主不再是發起者本人,而是這個程式檔案的屬主;
(2)相關指令
chmod u+|-s /path/to/somefile
(3)其他注意事項
如果原檔案屬主原有執行權限,給屬主S權限後,表現為小寫s。
如果原檔案屬主無執行權限,給屬主S權限後,表現為大寫S。

⒉SGID
SGID針對屬組,如果屬組有S權限,意味着任何使用者在執行此程式時,其程序的屬組不再是發起者所屬的基本組,而是這個程式檔案的屬組;
chmod g+|-s /path/to/somefile
如果原檔案屬組原有執行權限,給屬組S權限後,表現為小寫s。
如果原檔案屬組無執行權限,給屬組S權限後,表現為大寫S。
⒊Sticky
Sticky屬于粘貼位,附加在other的權限上。
chmod o+|-t /path/to/somefile
如果原檔案other有執行權限,給屬組Sticky權限後,表現為小寫t。
如果原檔案other無執行權限,給屬組Sticky權限後,表現為大寫T。
Ⅱ FACL
如果有這樣一種需要,hadoop希望能夠讓hive寫此檔案,他該如何進行?隻能修改other的權限有寫權限,但這樣好嗎?很明顯,這樣other都有寫權限,這樣并不能滿足實際需求,是以要引入FACL的概念。
FACL即檔案控制通路清單。他是用于實作在原有的通路控制機制之外補充了一種檔案通路控制機制。
(2)使用者通路檔案權限順序
1、使用者是否為檔案屬主;
2、使用者是否有特定的通路控制條目;
3、使用者是否屬于檔案屬組;
4、使用者所屬的組是否有特定的通路控制條目;
5、其它。
(3)相關指令
1.檢視檔案或目錄的通路控制清單
getfacl /path/to/somewhere
2.對檔案或目錄賦予權限
①為USERNAME指定的使用者設定對檔案/path/to/somewhere具有MODE通路權限:
setfacl -m u:USERNAME:MODE /path/to/somewhere
這裡可以看到為hadoop使用者賦予r權限後,在權限清單中多了一條。
②為GROUPNAME指定的組設定對檔案/path/to/somewhere具有MODE通路權限:
setfacl -m g:GROUPNAME:MODE /path/to/somewhere
這裡為hadoop組賦予r權限後,在權限清單中也多了一條。
3.取消檔案或目錄的權限
①取消USERNAME指定的使用者設定對檔案/path/to/somewhere具有MODE通路的權限:
setfacl -x u:USERNAME /patn/to/somewhere
②取消GROUPNAME指定的組設定對檔案/path/to/somewhere具有MODE通路的權限:
setfacl -x g:GROUPNAME:MODE /path/to/somewhere
由于指令詳細,這裡就不示範了。
(4)其他相關内容
額外挂載的檔案系統預設不支援acl,如果要支援有兩種方法。
方法1:
mount -o acl DEVICE MOUNT_POINT;
如果需要永久有效:需要編輯/etc/fstab,在挂載選項後附加acl選項;
方法2:
設定分區的預設挂載選項中有acl,則挂載時無須再指定acl:
tune2fs -o acl DEVICE
取消此預設挂載選項:
tune2fs -o ^acl DEVICE
(5)一個小例子
複制檔案/var/log/messages至/data目錄, 其屬主為root使用者,且有讀寫權限,屬組為root組,且有讀寫權限;可以被任何人讀取,可以被gentoo使用者和magedu組讀寫,但centos使用者沒有任何通路權限;
相關指令:
# mkdir /data
# cp /var/log/messages /data
# chmod 664 /data/mesages
# setfacl -m u:gentoo:rw /data/mesages
# setfacl -m g:magedu:rw /data/mesages
# setfacl -m u:centos:--- /data/mesages