1. 程式人生 > >Linux中的許可權問題:

Linux中的許可權問題:

普通許可權

Linux許可權基於UGO模型進行控制:U代表User屬主,G代表Group屬組,O代表Other其他使用者

每一個許可權由檔案所有者,檔案所屬組,其他使用者3部分組成,每一部分都有讀寫執行3項許可權,設定時可用數字表示
Linux許可權分為:讀(R)許可權,設定時可用數字4表示
                           寫(w)許可權,設定時可用數字2表示
                           可執行(x)許可權,設定時可用數字1表示
在這裡插入圖片描述

Linux的特殊許可權

Linux的特殊許可權是為了讓一般使用者在執行某些程式的時候,能夠暫時具有該程式擁有者的許可權

SUID:是一種對二進位制程式進行設定的特殊許可權,可以讓二進位制程式的執行者臨時擁有屬主的許可權(僅對擁有執行許可權的二進位制程式有效)
SGID:暫時擁有屬主的許可權
SBIT:使用者只能刪除自己的檔案通常對目錄設定
suid           4           針對檔案
sgid           2           針對目錄
sticky     粘滯位     針對目錄

檔案型別的表示:

Linux系統中一切都是檔案,但是每個檔案的型別不盡相同,因此Linux系統使用了不同的字元來

-:     普通檔案
d:      目錄
l:       符號連線檔案
b:      塊檔案
c:      字元裝置檔案
p:      管道檔案

設定和修改許可權

用chown更改檔案的屬主,屬組

chown linux file1             更改file1的屬主為linux,且linux這個使用者必須存在
chown .alice file2            更改file2的屬組為alice,且alice這個組必須存在
chown linux:alice file3     同時更改file3的屬主和屬組

用chgrp更改檔案的屬組(chgrp)

chgrp alice file4              更改file4的屬組
chgrp -R alice /dir1         更改dir1目錄下的所有檔案和目錄

用chmod更改許可權

chmod u+r 檔名          給屬主加讀許可權
chmod a+x 檔名          給所有使用者和其他人加執行許可權
chmod g-w file1              file1的屬組去掉寫許可權)
chmod o=x 檔名          其他使用者只有執行許可權
chmod a=- 檔名          去除所有使用者的許可權
chmod ug=rw,o=r file      給屬主屬組讀寫許可權,給其他使用者讀許可權
chmod 644 file                給屬組讀寫許可權,其他使用者和屬組為讀許可權)
在這裡插入圖片描述

r w x 許可權對檔案和目錄的意義

許可權            針對檔案                                      針對目錄
r          可以讀取檔案的內容          可以列出目錄的內容  需配合x使用
w         可以更改檔案的內容          可以建立或刪除目錄中的任一檔案  需配合x使用
x          可以作為命令執行檔案      可以訪問目錄的內容(取決於目錄中檔案的許可權)
再給目錄單獨設定讀寫許可權的時候必須設定x許可權否則仍會顯示許可權不夠
測試方法:建立一個使用者useradd Tony
                  建立一個目錄mkdir -p /home/dir
                  並在此目錄下建立一個檔案echo 123 >> /home/dir/file
                  將目錄的O部分的許可權設為0:chmod 750 /home/dir
                  轉換到Tony使用者:su - Tony
                  轉到/home/dir目錄下:cd /home/dir
                  進行檢視看能否出現file:ls
                  轉到root使用者:su - root 給/home/dir新增r許可權chmod o+r /home/dir再轉到Tony使用者下進行檢視,同理進行其他許可權的測試

Linux Umask 預設許可權

umask命令用來設定限制新建檔案許可權的掩碼 umask #結果是八進位制掩碼,轉換後則為022,oct(0022)

          檔案最大許可權為 rwx rwx rwx (777)
          umask 為022 — -w- -w
          目錄許可權為 rwx r-x r-x (755)
          檔案許可權 rw- r– r– (644)
修改shell umask (臨時)
          umask 000
          在建立檔案時需手動新增執行許可權否則系統會自動去除檔案的執行許可權
修改shell umask (永久生效)
          vim /etc/profile 進行修改

Linux ACL訪問控制列表

如果你有一個目錄,需要給多人使用,每個人或每個群組所需要的許可權並不相同時,傳統的 Linux 三種身份的三種許可權是無法達到的, 因為傳統的 Linux 許可權只能針對一個使用者、一個群組及非此群組的其他人設定許可權而已,無法針對單一使用者或個人來設計許可權,ACL主要用在與提供傳統的UGO的讀寫執行許可權之外進行更細緻的許可權設定,可以針對單一檔案,單一使用者,單 一目錄來進行許可權設定
查詢ACL功能是否啟用(預設都啟用)
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i ext4 #centos6
如手工建立的檔案系統,需要手工開啟ACL功能
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i xfs #centos7
基於檔案的設定
          useradd alice
          touch acl_file1
          ll acl_file1
          setfacl -m u:alice:rx acl_file1
          ll acl_file1
          setfacl -m u::rxw acl_file1
          ll acl_file1 #acl使用者預設許可權
檢視檔案的設定
          getfacl acl_file1
基於組的設定
          setfacl -m g:group1:rx acl_file1 getfacl acl_file1
基於mask的設定
          setfacl -m m:r acl_file1
          getfacl acl_file1

          #file: acl_file1
          #owner: root
          #group: root
          user::rw
          user:alice:r-x #effective:r–(有效許可權)使用者或群組所設定的許可權必須要存 在於 mask 的許可權設定範圍內才會生效
          group::r–
          group:group1:r-x #effective:r-mask::r–
          other::r-
          #使用者只有r許可權,並沒有x許可權!mask的意義
在一個已經設定了acl目錄下,增加檔案或目錄時,該檔案或目錄是否能夠具有 ACL 的設定? 以上問題如何解決?
          setfacl -m d:u:alice:rx /project #使用預設許可權設定目錄未來檔案的 ACL 許可權繼承
          “ d:[u|g]: [user|group]:許可權 ”
取消許可權
          setfacl -x g:hr /home/text.txt 刪除組hr的ACL許可權
          setfacl -x u:u1 /home/text.txt 刪除使用者u1的ACL許可權
          setfacl -b /home/text.txt 刪除所有ACL許可權

ACL許可權是新增某一使用者或者某一個組對於檔案的許可權
檢視ACL許可權,ll /home/text.txt 會顯示出-rw-rw-r–+ 如果後面有一個+,說明這是有ACL設定的使用者許可權,並且中間的rw-顯示的不是屬組的許可權,是mask許可權
-rw-rwxr–+ 1 u77 u77 0 5月 10 15:45 file90 此時看到的中間三個許可權是mask的許可權
例題:
在/opt/裡建立的新檔案自動屬於g1組,組 g2的成員如:alice能對這些新檔案有讀寫許可權,組g3 的成員 如:tom只能對新檔案有讀許可權,其它使用者(不屬於g1,g2,g3)不能訪問這個資料夾
思路:
        1.建立需要的目錄:mkdir -p /opt/dir
        2.建立需要的組:    groupadd g1 && groupadd g2 && groupadd g3
        3.將alice分配到g2:useradd -G g2 alice
        4.將tom分配到g3: useradd -G g3 tom
        5.將dir目錄的屬組設為g1:chgrp g1 /opt/dir
        6.為dir目錄新增s許可權:chmod g+s /opt/dir (其下所建立的目錄和檔案都享有該目錄許可權,即在/opt/裡建立的新檔案自動屬於g1組)
        7.將目錄o許可權設定為0:chmod o= /opt/dir (其他使用者無法訪問)
        8.為g2成員新增讀寫許可權:setfacl -Rm d:g:g2:rw /opt/dir (g2成員對這些檔案有讀寫許可權)
        9.為g3成員新增只讀許可權:setfacl -Rm d:g:g3:r /opt/dir (g3成員對檔案有讀許可權)