1. 程式人生 > 實用技巧 >特殊許可權

特殊許可權

目錄

特殊許可權SUID

1.讓普通使用者對可執行的二進位制檔案,臨時擁有二進位制檔案的所屬主許可權。
2.如果設定的二進位制檔案沒有執行許可權,那麼suid的許可權顯示就是大S。
3.特殊許可權suid僅對二進位制可執行程式有效,其他檔案或目錄則無效。

suid授權方法4000 許可權字元s(S),使用者位置上的x位上設定
# chmod 4755 passwd
# chmod  u+s  passwd

特殊許可權SGID

1.針對使用者組許可權位修改,使用者建立的目錄或檔案所屬組和該目錄的所屬組一致。
2.當某個目錄設定了sgid後,在該目錄中新建的檔案不在是建立該檔案的預設所屬組
3.使用sgid可以使得多個使用者之間共享一個目錄的所有檔案變得簡單。

sgid授權方法: 2000許可權字元s(S),取決於屬組位置上的x
# chmod 2755  directory 
# chmod  g+s  directory


#1.建立測試目錄
[root@bgx ~]# cd /tmp/ && mkdir dtest

#2.給測試目錄賦予SetGID許可權,檢查SetGID是否生效
[root@bgx tmp]# chmod g+s dtest/ && ll -d dtest/
drwxr-sr-x 2 root root 6 Apr 13 05:21 dtest/

#3.給測試目錄賦予777許可權,讓普通使用者可以寫
[root@bgx tmp]# chmod 777 dtest/

#4.切換成普通使用者lamp,並進入該目錄
[root@bgx tmp]# su - lamp
[lamp@bgx ~]$ cd /tmp/dtest/

#5.普通使用者建立測試檔案,檢查檔案的資訊
[lamp@bgx dtest]$ touch lamp_test
[lamp@bgx dtest]$ ll
-rw-rw-r-- 1 lamp root 0 Apr 13 05:21 lamp_test

特殊許可權SBIT

1.讓多個使用者都具有寫許可權的目錄,並讓每個使用者只能刪自己的檔案。
2.特殊sticky目錄表現在others的x位,用小t表示,如果沒有執行許可權是T
3.一個目錄即使它的許可權為”777”如果是設定了粘滯位,除了目錄的屬主和”root”使用者有許可權刪除,除此之外其他使用者都不允許刪除該目錄。

sticky授權方法,1000 許可權字元t(T),其他使用者位的x位上設定
# chmod 1755  /tmp
# chmod o+t /tmp

許可權屬性chattr

chatrr 只有 root 使用者可以使用,用來修改檔案系統的許可權屬性,建立凌駕於 rwx 基礎許可權之上的授權。
chatrr 命令格式:[root@bgx ~]# chattr [+-=] [選項] 檔案或目錄名

#選項: + 增加許可權 -減少許可權 =等於某個許可權
# a:讓檔案或目錄僅可追加內容
# i:不得任意更動檔案或目錄

#1.建立檔案並設定屬性
[root@lqz ~]# touch file_a file_i
[root@lqz ~]# lsattr file_a file_i
---------------- file_a
---------------- file_i

#2.使用chattr設定屬性,lsattr檢視許可權限制
[root@lqz ~]# chattr +a file_a
[root@lqz ~]# chattr +i file_i
[root@lqz ~]# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i

#3.a許可權,無法寫入和刪除檔案,但可以追加資料,適合/etc/passwd這樣的檔案
[root@lqz ~]# echo "aa" > file_a
bash: file_a: Operation not permitted
[root@lqz ~]# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted
[root@lqz ~]# echo "aa" >> file_a

#5.i許可權, 無法寫入,無法刪除,適合不需要更改的重要檔案加鎖
[root@lqz ~]# echo "i" > file_i
bash: file_i: Permission denied
[root@lqz ~]# echo "i" >> file_i
bash: file_i: Permission denied
[root@lqz ~]# rm -f  file_i
rm: cannot remove ‘file_i’: Operation not permitted

#6.解除限制
[root@tianyun ~]# chattr -a file100 
[root@tianyun ~]# chattr -i file200

程序掩碼umask

當我們登入系統之後建立一個檔案總是有一個預設許可權的,比如: 目錄755、檔案644、那麼這個許可權是怎麼來的呢?這就是umask乾的事情。umask設定了使用者建立檔案的預設許可權。

系統預設umask為022,那麼當我們建立一個目錄時,正常情況下目錄的許可權應該是777,但umask表示要減去的值,所以新目錄檔案的許可權應該是777 - 022 =755。至於檔案的許可權也依次類推666 - 022 =644。

umask涉及到的相關檔案/etc/bashrc /etc/profile ~/.bashrc ~/.bash_profile
shell (vim,touch) –umask–> 會影響建立的新檔案或目錄許可權
vsftpd服務如果修改–umask–> 會影響ftp服務中新建立檔案或建立目錄許可權
useradd如果修改umask–> 會影響使用者HOME家目錄許可權

#1.假設umask值為:022(所有位為偶數)
#檔案的起始許可權值
6 6 6  -  0 2 2  = 6 4 4 

#2.假設umask值為:045(其他使用者組位為奇數)
#計算出來的許可權。由於umask的最後一位數字是5,所以,在其他使用者組位再加1。
6 6 6  -   0 4 5 = 6 2 1

#3.預設目錄許可權計算方法
7 7 7  -  0 2 2 = 7 5 5
 
#umask所有位全為偶數時
# umask 044
# mkdir d044   目錄許可權為733
# touch f044   檔案許可權為622

#umask部分位為奇數時
# umask 023
# mkdir d023   目錄許可權為754
# touch f023   檔案許可權為644

#umask值的所有位為奇數時
# umask 035
# mkdir d035   目錄許可權為742
# touch f035   檔案許可權為642

在 shell 程序中建立檔案

#檢視當前使用者的umask許可權
[root@lqz ~]# umask
0022
[root@lqz ~]# touch file0022
[root@lqz ~]# mkdir dir0022
[root@lqz ~]# ll -d file0022  dir0022/
drwxr-xr-x 2 root root 6 Jan 24 09:02 dir0022/
-rw-r--r-- 1 root root 0 Jan 24 09:02 file0022

修改 shell umask 值(臨時生效)

[root@lqz ~]# umask 000
[root@lqz ~]# mkdir dir000
[root@lqz ~]# touch file000
[root@lqz ~]# ll -d dir000 file000
drwxrwxrwx 2 root root 6 Jan 24 09:04 dir000
-rw-rw-rw- 1 root root 0 Jan 24 09:04 file000

通過 umask 決定新建使用者 HOME 目錄的許可權

[root@lqz ~]# vim /etc/login.defs
UMASK 077
[root@lqz ~]# useradd dba
[root@lqz ~]# ll -d /home/dba/
drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/

[root@tianyun ~]# vim /etc/login.defs
UMASK 000
[root@lqz ~]# useradd sa
[root@lqz ~]# ll -d /home/sa/
drwxrwxrwx. 4 sa sa 4096 3 月 11 19:53 /home/sa/