Linux命令——umask、setuid、setgid、sticky bit、chmod、chown

umask

權限遮罩碼,用於控制文件,文件夾的默認權限安全

文件默認權限:     666-umaskide

文件夾默認權限:  777-umaskui

管理員root:                  umask=022   文件默認權限644,文件夾755spa

普通用戶:                  umask=002   文件默認權限664,文件夾775操作系統

一般,在類Unix操做系統上,文件和目錄的全部權基於建立它們的用戶的uid(user-id)和gid(group-id)。3d

啓動進程時也會發生一樣的狀況:以啓動這個進程的 用戶標識和組標識運行,並具備相應的權限。 此行爲能夠經過使用特殊權限進行修改。code

每一個文件都有一個全部者, 表示該文件是誰建立的. 同時, 該文件還有一個組編號, 表示該文件所屬的組, 通常就是文件全部者所在的組。blog

對於可執行文件, 在執行時, 一般狀況下其權限是調用這個文件的用戶的權限。Linux下/usr/bin/passwd命令能夠修改密碼,若是按照這個套路,那麼普通用戶是沒辦法修改本身密碼的,但實際狀況普通用戶也能夠修改本身的密碼。這是怎麼作到的呢?進程

解決上面問題引出setuid、setgid、sticky bit   這些只是標記位,不是指令it

setuid位

但設置了setuid位時,前面表述的典型權限作法就會改變。對於可執行文件,在執行時,其權限再也不是發起執行動做這個用戶的權限,而是文件自己用戶所具備的權限。例如,一個可執行文件屬主是root,而且設置了setuid,那麼普通用戶也能夠執行這個文件。某種程度上,使用不當會對系統安全有潛在風險。

Linux下的一個例子就是passwd命令

[root@51cto ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 17  2012 /usr/bin/passwd
View Code

怎樣標識setuid位呢? 正如上面命令輸出所示,setuid使用s表示,他取締了本來x的位置。這代表x(可執行標記爲)實際上已經被設置了。若是setuid或setgid被設置了,可是x(可執行標記位)沒有被設置,會顯示成大寫字母S。對於沒有設置x(可執行標記位)的狀況,setuid和setgid是不會生效的。此外setuid對目錄沒有效果,只針對文件。

setgid位

不像setuid只對文件起做用。setgid對文件、目錄都有效果。在上面那個/usr/bin/passwd例子中,當執行passwd這個命令的時候,其權限再也不是發起執行動做這個用戶屬組的權限,而是passwd這個文件自己屬組的權限。換句話說,當前進程的GID變成了passwd的GID,而再也不是發起這個進程的GID。

在目錄上使用時,setgid位會改變標準行爲,目錄內文件/目錄的GID再也不是建立者的GID,而是父目錄自己的GID。 這一般用於簡化文件共享(文件將由父目錄GID內全部組成員修改)。 就像setuid同樣,setgid位很容易被發現,例如:

ls -ld test
drwxrwsr-x. 2 egdoc egdoc 4096 Nov  1 17:25 test
View Code

標準行爲指什麼?

誰建立的文件/目錄,那麼他的GID就是這個用戶的GID

s標記位替換了屬組那一坨的x標記爲。注意這裏是小寫s

sticky位

sticky標記位(也能夠理解成防刪除位)以一種不一樣的方式工做,他對於文件沒有效果。但用於一個目錄時,這個目錄下全部文件只能夠被他的全部者修改。舉個例子

[root@51cto ~]# ls -ld /tmp
drwxrwxrwt. 4 root root 4096 Jun 12 04:57 /tmp
View Code

/tmp這個目錄能夠被系統上全部用戶修改,可是加了sticky標價位,一個用戶就不能去刪除另外一個用戶的文件。

怎樣判斷一個目錄下文件能不能被刪除呢?

該文件的屬主一幫都是rwx,若是屬主都沒有w,那就尷尬了。。。。本身不能刪除本身建立的文件

該文件的屬組若是有w,那麼組內其餘人也能夠刪除、修改這個文件。若是沒有w,組內其餘人便不能刪除、修改這個文件,更甚至不能添加文件。在/tmp這個例子中,GID內用戶,Others都有w權限,加上s標記爲,就作到了防刪除。你能夠添加文件,可是不能刪除文件。只有這個文件自己的owner才能夠刪除文件。

如何設置特殊標記位

chmod  +  數字 或者 ugo/rwx

設置setgid位

$ chmod 2775 test

或者

$ chmod g+s test

二者等價

設置setuid位

$ chmod u+s file

設置sticky位

$ chmod o+t test

相關文章
相關標籤/搜索