2012/08/26

Linux 的 umask 及 suid , sgid 及sticky bit


預設權限

  • umask 可以透過 umask 指令設定.
  • 非受限的使用者 umask is 002
  1. 檔案權限為 664
  2. 目錄權限為 775
  • root 的 umask 是 022
  • 修改預設的權限
  1. 決定預設的存取權限 umask
  2. 目錄為 777(rwxrwxrwx) XOR umask值 = 建立的目錄權限
  3. 檔案為 666(rw-rw-rw-) XOR umask值 = 建立的檔案權限
  • 計算時要用二進位計算,檔案最後一碼為don't care(忽略),umask對於檔案的x權限無意義.目錄則無此問題.
  • XOR 計算真值表
ABXOR
000
011
101
110
  • 當 mask 為 022 時
  1. 目錄為
    1. 111 111 111 (777)
    2. 000 010 010 (022)
    3. =============================
    4. 111 101 101 (rwxr-xr-x) --> Don't use number and - to calculate
  2. 檔案為
    1. 11- 11- 11- (666)
    2. 000 010 010 (022)
    3. =======================
    4. 110 100 100 (rw-r--r--) --> Don't use number and - to calculate
[root@server1 ~]# umask 022
[root@server1 ~]# mkdir a
[root@server1 ~]# touch aa
[root@server1 ~]# ls -l
drwxr-xr-x 2 root root    4096 Aug 17 13:52 a
-rw-r--r-- 1 root root       0 Aug 17 13:52 aa
  • 當 mask 為 023 時
  1. 目錄為
    1. 111 111 111 (777)
    2. 000 010 011 (023)
    3. =========================
    4. 111 101 100 (???)
  2. 檔案為
    1. 11- 11- 11- (644)
    2. 000 010 011 (023)
    3. =========================
    4. 110 100 100 (???)
[root@server1 ~]# umask 023
[root@server1 ~]# mkdir b
[root@server1 ~]# touch bb
[root@server1 ~]# ls -l
drwxr-xr-- 2 root root    4096 Aug 17 13:52 b
-rw-r--r-- 1 root root       0 Aug 17 13:53 bb

Special Permissions for Executables

  • 設定特殊的檔案權限
  1. 3 種特殊的屬性
  2. s 與 t 的權限,是為了讓一般使用者在執行某些程式的時候, 能夠暫時的具有該程式擁有者的權限。
    1. t or T (1) Sticky bit
      1. 在具有 SBit 的目錄下,使用者若在該目錄下具有 w 及 x 的權限, 則當使用者在該目錄下建立檔案或目錄時,只有檔案擁有者與 root 才有權力刪除
      2. 如果將 A 目錄加上了 Sticky bit 的權限項目時, 則只能夠針對自己建立的檔案或目錄進行刪除/更名/移動等動作
    2. s or S (2) SGID (set GroupID?)
      1. 檔案:如果 SGID 是設定在 binary file 上面,則不論使用者是誰,在執行該程式的時候, 他的有效群組 (effective group) 將會變成該程式的群組所有人 (group id)。
      2. 目錄:如果 SGID 是設定在 A 目錄上面,則在該 A 目錄內所建立的檔案或目錄的 group,將會是此 A 目錄的group
    3. s or S (4) SUID (set UserID?) SUID
      1. 僅可用在『二進位制檔案(binary file)』
  3. 設定方法
    1. chmod 1xxx filename , chmod o+t filename
    2. chmod 2xxx filename , chmod g+s filename,
    3. chmod 4xxx filename , chmod u+s filename
# 目前狀態為1777
[root@localhost :~/tmp> la
drwxrwxrwt  2 root    root    72 2006-05-20 12:13 .
drwxr-xr-x 28 mtchang users 1760 2006-05-20 12:09 ..
-rwxrwxrwx  1 root    root     2 2006-05-20 12:13 a
[root@localhost :~/tmp> whoami
mtchang
[root@localhost :~/tmp> rm a
rm: 無法移除 ‘a’: 此項操作並不被允許
# 使用root切換回0777
mtchang@localhost:/home/mtchang # chmod 0777 tmp
# 使用mtchang使用者刪除a檔案
mtchang@localhost:~/tmp> rm a
mtchang@localhost:~/tmp> ll -la
drwxrwxrwx  2 root    root    48 2006-05-20 12:16 .
drwxr-xr-x 28 mtchang users 1760 2006-05-20 12:09 ..
# 確認刪除

沒有留言: