Linux 系統權限的程序控制
Linux系統檔案權限
權限 對檔案的影響 對目錄的影響
r(read) 可以讀取檔案的內容 可以列出目錄裡檔案的名稱
w(write) 可以改變檔案的內容 可以對目錄裡所有的檔案進行新增或刪除
x(execute) 可以藉由命令執行檔案 可以訪問目錄下的內容
命令系統檔案權限的管理
更改 當案/目錄 權限
方法象徵性的關鍵字:
#cmd whowhatwhich file|directory
who is u,g,o,a (for user, group, other, all)
what is +, -, = (for add, remove, set exactly)
which is r, w, x (for read, write, executable)
p.s, 如果r改成R並且是對目錄的話,將會對整個目錄包括裡面的目錄數進行權限更改
p.s. 如果x改成X將會對只個目錄,以及底下的檔案進行權限更改
#chmod
數字的方法:
#chmod ### file|directry
每個#符號代表一個訪問權限等級:user, group, other.
# is sum of r = 4, w = 2, x = 1.
範例:
#chmod go-rw file1 //把file1的group and other的r(read) and w(write)權限都去掉
#chmod a+x file2 //把file2 的全部使等級的使用者都增加x(execute)
#chmod 750 sampledir //把sampledir的 user權限w,r,x都開啟,group權限只開啟r,x在other的部分都不開
#chown
ex. #chown student foofile //將foofile的擁有者改變成student
ex. #chown - R student foodir //將foodir包括裡面所有的檔案及目錄登更改成student使用者的
ex. #chown :admins foodir //將foodir的群組權限改為admins
ex. #chown visitor:guests foodir //將foodir的擁有者以及群組權限分別改為visitor and guests
p.s.只有root可以改變所有的使用權限,非root只可以改變屬於自己群組的權限
特殊檔案權限
特殊檔案權限
u+s (suid)
set user id
僅對檔案的影響>>
SUID 權限僅對二進位程式(binary program)有效;
執行者對於該程式需要具有 x 的可執行權限; 本權限僅在執行該程式的過程中有效 (run-time);
執行者將具有該程式擁有者 (owner) 的權限;
g+s (sgid)
set group id
針對目錄時>> 使用者若對於此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄;
使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
用途:若使用者在此目錄下具有 w 的權限(可以新建檔案),則使用者所建 立的新檔案,該新檔案的群組與此目錄的群組相同
針對檔案時>> SGID 對二進位程式有用;
程式執行者對於該程式來說,需具備 x 的權限;
執行者在執行的過程中將會獲得該程式群組的支援;
o+t (sticky)
僅針對目錄>> 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
當使用者在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該 檔案
ex.
當甲這個使用者於 A 目錄是具有群組或其他人的身份,並且擁有該目錄 w 的權限, 這表示『甲使用者對該目錄內任何人建立的目錄或檔案均可進行 "刪除/更名/搬移" 等動作。』 不過,如果將 A 目錄加上了 SBIT 的權限項目時, 則甲只能夠針對自己建立的檔案或目錄進行刪除/更名/移動等動作,而無法刪除他人的檔案。
前面介紹過 SUID 與 SGID 的功能,那麼如何設定檔案使成為具有 SUID 與 SGID 的權限呢? 這就需要
第五章的數字更改權限的方法了! 現在你應該已經知道數字型態更改權限的方式為『三個數字』的組合, 那麼如果在這三個數字之前再加上一個數字的話,最前面的那個數字就代表這幾個權限了!
- 4 為 SUID
- 2 為 SGID
- 1 為 SBIT
假設要將一個檔案權限改為『-rwsr-xr-x』時,由於 s 在使用者權限中,所以是 SUID ,因此, 在原先的 755 之前還要加上 4 ,也就是:『 chmod 4755 filename 』來設定!此外,還有大 S 與大 T 的產生喔!
[root@study ~]# cd /tmp
[root@study tmp]# touch test <==建立一個測試用空檔
[root@study tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的權限
-rwsr-xr-x 1 root root 0 Jun 16 02:53 test
[root@study tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的權限
-rwsr-sr-x 1 root root 0 Jun 16 02:53 test
[root@study tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!
-rwxr-xr-t 1 root root 0 Jun 16 02:53 test
[root@study tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 權限
-rwSrwSrwT 1 root root 0 Jun 16 02:53 test
因為 s 與 t 都是取代 x 這個權限的,但是你有沒有發現阿,我們是下達 7666 喔!也就是說, user, group 以及 others 都沒有 x 這個可執行的標誌( 因為 666 嘛 ),所以,這個 S, T 代表的就是『空的』啦!怎麼說? SUID 是表示『該檔案在執行的時候,具有檔案擁有者的權限』,但是檔案 擁有者都無法執行了,哪裡來的權限給其他人使用?當然就是空的啦! ^_^
預設權限
當我們mkdir 的時候就會給予預設的權限,如何查看預設的權限呢?
就要使用
[root@study ~]# umask
0022 <==與一般權限有關的是後面三個數字!
[root@study ~]# umask -S
u=rwx,g=rx,o=rx
為什麼會顯示0022四個權限,是因為第一個是特殊權限,像是目錄的話,權限的前面會顯示d
因為 umask 為 022 ,所以 user 並沒有被拿掉任何權限,不過 group 與 others 的權限被拿掉了 2 (也就是 w 這個權限),那麼當使用者:
- 建立檔案時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
- 建立目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
不相信嗎?我們就來測試看看吧!
[root@study ~]# umask
0022
[root@study ~]# touch test1
[root@study ~]# mkdir test2
[root@study ~]# ll -d test*
-rw-r--r--. 1 root root 0 6月 16 01:11 test1
drwxr-xr-x. 2 root root 6 6月 16 01:11 test2
可以用# umask 後面加002把權限w遮掉(暫時),也可以進到/etc/bashrc的.bashrc檔案,將預設權限遮罩改掉