改變權限屬性的命令chmod
chmod是來改變文件或者目錄權限的命令,但只有文件的屬主和超級用戶root才有這樣的權限,通過chmod來改變文件或目錄的權限有倆種方式,一種是通過權限字母和操作符表達式的方法,來設置權限,另一種是使用數字方法來設置權限。
chmod [數字組合] 文件名
r | read | 4 |
w | write | 2 |
x | execute | 1 |
- | 0 |
舉例子:創建一個ett.txt文件,並查看文件的權限。
此文件的權限屬主位代表的數字為4+2+0=6;屬組位代表的數字為4+0+0=4,其他用戶組代表的是4+0+0=4,所以數字組合為644
例一,用chmod命令的數字方法來設置權限,如下:(次數字方法最為常用)
例子二,用touch創建一個.sh文件,測試屬主的權限,屬組和其他用戶組的權限不在一一測試。。。
權限字母和操作符表達式
標識 | u(user) | g(group) | o(others) | a(all) | + | - | = |
含義 | 用戶 | 組 | 其他 | 所有用戶 | 增減權限 | 減少權限 | 重新分配權限 |
小結:針對目錄跟文件權限對比說明
文件 | 目錄 | |
r(read)讀取權限 | 表示具有讀取閱讀文件內容的權限 | 表示具有瀏覽目錄的權限(注意:與進入目錄的權限不同) |
w(write)寫入權限 | 表示具有新增,修改文件內容的權限(注意:刪除和移動文件和文件本身無關,看上級目錄) | 表示具有新增,刪除,移動目錄的內文件權限(需要有x權限配合,要不沒有r 有x ls -l 查看文件會顯示文件名 ,但是文件屬性都是一堆????) |
x(execute)(執行權限) | 表示具有執行文件權限(普通用戶同時還需要r權限,root用戶不用r也能執行,文件本身也能執行才可以哦) | 表示具有進入目錄的權限 |
既然我們可以更改權限了,那么有沒有想過我們創建的文件或目錄默認權限呢?umask可以分配默認權限,文件的默認安全權限為644,目錄為755(Linux)
在linux下我們查看的方式有兩種,一種可以直接輸入umask,就可以看到數字形態的權限設置分數,一種則是加-S(Symbolic)參數,就能以符號類型的方式來顯示出權限了,如下:
Umask的設置很簡單,只需要在umask命令后加想要拿掉的權限數字就行:
Linux下的etc/profile和etc/bashrc中都有默認的umask設置,我們來看一下:
1 if [ SUID -gt 99] && [ " 'id -gn' " =" 'id =un' "];then 2 umask 002 3 else 4 umask 022 5 fi
這個是在etc/profile中的一部分內容,可以看到根據不同的uid設置了不同的umask,其實在etc/bashrc文件中也有基本相同的這部分代碼,我們可以在這兩個文件中設置umask,那么二者有什么區別呢?如果實在etc/profile中修改,只有在重新登錄用戶的時候才會發生改變,而在etc/bashrc中修改的話要是切換目錄就會發生改變,因為profile是在登錄用戶的時候調用的。一般不常永久改umask,只是臨時更改用,沒啥較大用途的命令(個人觀點)
Linux系統是如何計算出文件或目錄權限的呢?
默認最大權限 | umask值 | 用戶創建文件的權限 | ||
文件 | 創建文件umask為偶數的時候 | 666[-rw-rw-rw-] | 022(全偶數)[-----w--w-] | 644 [-rw-r--r--](說明:偶數加減法 默認的最大權限 —umask 值=用戶創建文件的權限) |
創建文件umask為奇數的時候 (umask部分或者全部都為奇數) |
666[-rw-rw-rw-] | 123(部分位為奇數) [--x--w--wx] | 644(以為umask的值123中又個都是奇數,因此在計算543的基礎上加上101,即奇數對應的文件數字權限位分別加1即可) | |
目錄 | umask為奇數偶數都一樣 | 777[-rwxrwxrwx] | 022[-----w--w-] | 755[-rwxr-xr-x](說明:默認最大權限—umask值=用戶創建目錄的權限) |
可以看到上面在計算創建的文件和目錄的默認權限的時候,我是這樣認為的:666-022=644;777-022=755.,這樣數字相減正好是用戶創建的目錄或文件的權限,(說明:如果是文件的話umask為奇數的話,需要在做減法后,奇數對應的文件數字權限上加1,目錄則不需要,博主親測望采納!)更多計算方法請參考Linux默認權限的計算公式
如何設置UID、GID、STICK_BIT
SUID:置於 u 的 x 位,原位置有執行權限,就置為 s,沒有了為 S .
chmod u+s xxx # 設置setuid權限
chmod 4551 file // 權限: r-sr-x—x
SGID:置於 g 的 x 位,原位置有執行權限,就置為 s,沒有了為 S .
chmod g+s xxx # 設置setgid權限
chmod 2551 file // 權限: r-xr-s--x
STICKY:粘滯位,置於 o 的 x 位,原位置有執行權限,就置為 t ,否則為T .
chmod o+t xxx # 設置stick bit權限,針對目錄
chmod 1551 file // 權限: r-xr-x--t
說明:suid修改的是執行命令,而不是處理的目標文件,且僅對二進制文件或程序有效,二進制命令或程序需要有可執行權限,
loading....