linux許可權位 Linux文件或目錄的許可權位是由9個許可權位來控制,每三位為一組,它們分別是文件屬主許可權、屬組許可權、其他用戶許可權。 r:read可讀許可權,對應數字4; w:write可寫許可權,對應數字2; x:execute執行許可權,對應數字1; -:沒有任何許可權,對應數字0。 #創建一個用戶組 [... ...
linux許可權位
Linux文件或目錄的許可權位是由9個許可權位來控制,每三位為一組,它們分別是文件屬主許可權、屬組許可權、其他用戶許可權。
r:read可讀許可權,對應數字4;
w:write可寫許可權,對應數字2;
x:execute執行許可權,對應數字1;
-:沒有任何許可權,對應數字0。
- #創建一個用戶組
- [root@oldboy ~]# groupadd incahome
- #創建一個用戶指定所屬用戶組
- [root@oldboy ~]# useradd -g incahome oldboy
- [root@oldboy ~]# useradd -g incahome oldgirl
- #創建一個用戶
- [root@oldboy ~]# useradd test
- #查看用戶
- [root@oldboy ~]# id oldboy
- uid=502(oldboy) gid=502(incahome) groups=502(incahome)
- [root@oldboy ~]# id oldgirl
- uid=503(oldgirl) gid=502(incahome) groups=502(incahome)
- [root@oldboy ~]# id test
- uid=504(test) gid=504(test) groups=504(test)
創建一個test.sh,內容:echo "i am oldboy linux"。查看屬性:
- [root@oldboy oldboy]# ls test.sh -l
- -rw-r--r-- 1 root root 25 Dec 25 21:10 test.sh
一個家庭(用戶組)incahome,成員oldboy、oldgirl,非家庭用戶test,超級用戶root。
修改文件許可權
- [root@oldboy oldboy]# chown oldboy.incahome test.sh
- [root@oldboy oldboy]# ls -l test.sh
- -rw-r--r-- 1 oldboy incahome 25 Dec 25 21:10 test.sh
分別測試不同用戶對該文件的許可權。
linux普通文件的讀寫執行許可權說明:
可讀r:表示具有讀取、閱讀文件內容的許可權。
可寫w:表示具有新增、修改文件內容的許可權(如果沒有r,那麼vi無法編輯,強制編輯會覆蓋數據,echo可以寫入)
可執行x:表示具有執行文件的許可權(1、文件本身要能夠執行;2、普通用戶同時具備r許可權才能執行;3、root都能執行)。
特別提示:刪除文件(修改文件名等)的許可權是受父目錄的許可權控制,和文件本身的許可權無關。
win下可執行文件:*.exe、*.bat、*.com
linux下可執行文件:*.sh、*.py、*.perl等
有關文件刪除說明
linux中的文件名是存在於父目錄的block裡面,並指向這個文件的inode節點,這個文件的inode節點再標記指向存放這個文件的block的數據塊。我們刪除文件並不清除inode節點和block的數據。只是在這個文件的父目錄裡面的block中刪除這個文件的名字,從而使這個文件名消失,並且無法指定這個文件的inode節點,當沒有文件名指向這個inode節點的時候會同時釋放inode節點和存放這個文件的數據塊,並更新inodeMAP和blockMAP,讓這些位置用於放置其他文件數據。
linux目錄的讀寫執行許可權說明:
可讀r:表示具有瀏覽目錄下麵文件及子目錄的許可權,即ls dir。不能進到目錄里,即無法cd dir。如果沒有x許可權,ls列表時可以看到所有文件名。但是會提示無權訪問目錄下的文件。如果ls -l列表,所有的屬性會帶有問號,也會提示無權訪問目錄下文件,但是可以看到所有文件名。
可寫w:表示具有增加、刪除或修改目錄內文件名的許可權(需要x許可權配合)。
可執行x:表示進入目錄的許可權,例如cd dir。但是沒有r無法列表,沒有w無法新建和刪除。
linux文件與目錄許可權對比說明:
r(read,讀取許可權):
對文件表示具有讀取閱讀文件內容的許可權。
對目錄表示具有瀏覽目錄下麵文件及子目錄的許可權,即ls dir。
w(write,寫入許可權):
對文件表示具有新增、修改文件內容的許可權。
對目錄表示具有新增、刪除、移動目錄內文件名的許可權。
x(execute,執行許可權):
對文件表示具有執行文件的許可權。
對目錄表示具有進入目錄的許可權。
-(無任何許可權):
若對應位置許可權位為字元"-",表示對應用戶沒有讀寫執行的任何許可權。
chmod修改文件許可權
chmod:change mode改變文件許可權
chmod數字式許可權表示法
chmod [數字組合] 文件名
chmod的數字方法的說明:
r:4;w:2;x:1:;-:0。
rwxr-xr-x:755
- [root@oldboy oldboy]# chmod 531 test.sh
- [root@oldboy oldboy]# ls -l test.sh
- -r-x-wx--x 1 oldboy incahome 25 Dec 25 21:10 test.sh
chmod字元式許可權表示法
使用許可權字元設置許可權的命令格式如下。
chmod [用戶類型] [+|-|=] [許可權字元] 文件名,用表格表示如下:
chmod | 用戶類型 | 操作字元 | 許可權字元 | 文件或目錄 |
u(user) | +(加入) | r | ||
g(group) | - | |||
o(others) | -(減去) | w | ||
a(all) | =(設置) | x |
rw-rw-r-xàrwx--xr-x:chmod u+x,g=x test.sh
- [root@oldboy oldboy]# ls -l test.sh
- -r-x-wx--x 1 oldboy incahome 25 Dec 25 21:10 test.sh
- [root@oldboy oldboy]# chmod u+w,g=rw,o+r test.sh
- [root@oldboy oldboy]# ls -l test.sh
- -rwxrw-r-x 1 oldboy incahome 25 Dec 25 21:10 test.sh
- [root@oldboy oldboy]# chmod u+x,g=x test.sh
- [root@oldboy oldboy]# ls -l test.sh
- -rwx--xr-x 1 oldboy incahome 25 Dec 25 21:10 test.sh
預設許可權分配的命令umask
- [root@oldboy oldboy]# mkdir d755
- [root@oldboy oldboy]# touch f644
- [root@oldboy oldboy]# ls -lrt
- drwxr-xr-x 2 root root 4096 Dec 26 09:15 d755
- -rw-r--r-- 1 root root 0 Dec 26 09:15 f644
umask預設值
- [root@oldboy oldboy]# umask
- 0022
umask的預設值的控制
- [root@oldboy oldboy]# sed -n '65,69p' /etc/bashrc
- if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
- umask 002
- else
- umask 022
- fi
根據umask值計算文件許可權
創建文件預設最大許可權為:666-umask,當umask有奇數時,計算許可權需要在奇數位加1。
創建目錄預設最大許可權位:777-umask。
setuid和setgid
setuid介紹
- [root@oldboy oldboy]# ls -l `which passwd`
- -rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
setuid使用戶執行該命令的時候臨時獲得屬主用戶的許可權
setuid小結:針對命令和二進位程式
1、用戶或屬主對應的前三位許可權的x位上如果有s就表示setuid許可權。當x位上沒有小寫x執行許可權的時候,setuid的許可權就顯示大寫S;當x位上有x執行許可權的時候,setuid的許可權就顯示小寫s。
2、setuid作業是讓普通用戶可以以root(或其他)的用戶角色運行只有root(或其他)賬號才能運行的程式或命令,或程式命令對應本來沒有許可權操作的文件等。
註意和su及sudo的區別,setuid為某一個命令設置特殊許可權(使用者為所有人)。
3、問題,希望oldboy用戶能夠刪除本來無權刪除的文件。
a、sudo給oldboy授權rm。b、給rm命令設置setuid。c、設置上級目錄許可權。
4、setuid修改的是執行的命令passwd,而不是處理目標文件/etc/shadow。
5、僅對二進位命令程式有效,不能用在shell等類似腳本文件上(因為shell腳本僅僅是調用二進位命令程式而已,因此,具體許可權還需要看二進位命令本身)。
6、二進位命令程式需要有可執行許可權x配合。
7、setuid許可權僅在程式命令執行過程中有效。
8、執行setuid命令的任意系統用戶都可以獲得命令程式在執行期間對應的擁有者的所有許可權。
9、setuid是一把雙刃劍,是一個比較危險的功能,對系統安全有一定的威脅。系統setuid的無用的功能取消setuid權利(安全優化)。
setgid介紹
1、與setuid不同的是,setgid既可以針對文件也可以針對目錄設置。
2、setgid是針對用戶組許可權位修改的。
對於文件來說,setgid的功能如下:
1)、setgid僅對二進位命令程式有效。
2)、二進位命令或程式需要有可執行許可權x。
3)、執行程式的任意用戶可以獲得該命令程式執行期間所屬組的許可權。
對於目錄setgid的功能如下:
1)、linux里預設情況所有用戶創建文件,預設用戶和組都是自身。
2)、setgid可以讓用戶在此目錄下創建的文件和目錄具有和此目錄相同的用戶組設置。
setgid位主要用於在目錄中,當為某個目錄設置了setgid位以後,在該目錄中新創建的文件的所有者許可權,而不是創建該文件的用戶的預設所有者。這樣,使得在多個用戶之間共用一個文件變得簡單。
locate查找命令
案例:
創建共用目錄/home/admins,屬組為adminuser,adminuser組成員對目錄有寫入讀寫和執行的許可權,其他所有用戶沒有任何許可權(root除外),在/home/admins目錄中創建的文件會自動繼承adminuser組。
- [root@oldboy oldboy]# mkdir /home/admins -p
- [root@oldboy home]# groupadd adminuser
- [root@oldboy home]# ls -ld admins/
- drwxr-xr-x 2 root root 4096 Dec 26 15:29 admins/
- [root@oldboy home]# chgrp adminuser admins/
- [root@oldboy home]# ls -ld admins/
- drwxr-xr-x 2 root adminuser 4096 Dec 26 15:29 admins/
- [root@oldboy home]# touch admins/test.txt
- [root@oldboy home]# ls -l admins/test.txt
- -rw-r--r-- 1 root root 0 Dec 26 15:36 admins/test.txt
- [root@oldboy home]# chmod g+s admins/
- [root@oldboy home]# ls -ld admins/
- drwxr-sr-x 2 root adminuser 4096 Dec 26 15:36 admins/
- [root@oldboy home]# touch admins/test_2.txt
- [root@oldboy home]# ls -l admins/
- total 0
- -rw-r--r-- 1 root adminuser 0 Dec 26 15:39 test_2.txt
- -rw-r--r-- 1 root root 0 Dec 26 15:36 test.txt
粘滯位sticky bit(sbit)及設置方法
用途一般是把一個文件夾的許可權都打開,然後來共用文件,例如/tmp目錄一樣。使用方便但是帶來安全隱患,生產環境一般不這樣使用。
sticky比setgid的更安全措施,讓多個用戶具有寫許可權的目錄,每個用戶只能刪除自己的文件。sticky在other位,用t表示,如果沒有執行許可權,那麼就是T表示;如果有執行許可權,那麼就是t表示。
特殊許可權對應的數字小結
setuid 4000 許可權字元s(S),用戶位上的x位上設置。授權方法chmod 4755 oldboy.txt。
setgid 2000 許可權字元s(S),用戶組位的x位上設置。授權方法chmod 2755 oldboy.txt。
粘滯位 1000 許可權字元t(T),其他用戶位的x位上設置。授權方法chmod 1755 /tmp。
如果對應位有x則字元許可權表現為小寫,否則表現為大寫。
推薦設置方法:
chmod g+s test
chmod u+s test
chmod o+t test
chown和chgrp
chown 用戶 文件或目錄 à僅僅授權用戶
chown :組 文件或目錄 à僅僅授權組。等同於"chgrp 組 文件或目錄"。
chown 用戶:組 文件或目錄 à表示授權用戶和組
註意:
1、其中的冒號":"可以用點號"."替代。
2、要授權的用戶和組名,必須是linux系統里實際存在的。
文件的屬主和用戶組的特殊情況
- [root@oldboy oldboy]# ll
- total 12
- drwxr-xr-x 2 root root 4096 Dec 26 09:15 d755
- -rw-r--r-- 1 root root 0 Dec 26 09:15 f644
- drwxr-xr-x 2 root root 4096 Dec 25 23:04 test
- --wx--x--x 1 root root 25 Dec 25 21:10 test.sh
- [root@oldboy oldboy]# groupadd incahome
- [root@oldboy oldboy]# useradd -g incahome oldboy
- [root@oldboy oldboy]# chown oldboy:incahome *
- [root@oldboy oldboy]# ll
- total 12
- drwxr-xr-x 2 oldboy incahome 4096 Dec 26 09:15 d755
- -rw-r--r-- 1 oldboy incahome 0 Dec 26 09:15 f644
- drwxr-xr-x 2 oldboy incahome 4096 Dec 25 23:04 test
- --wx--x--x 1 oldboy incahome 25 Dec 25 21:10 test.sh
- [root@oldboy oldboy]# userdel -r oldboy
- [root@oldboy oldboy]# ll
- total 12
- drwxr-xr-x 2 505 incahome 4096 Dec 26 09:15 d755
- -rw-r--r-- 1 505 incahome 0 Dec 26 09:15 f644
- drwxr-xr-x 2 505 incahome 4096 Dec 25 23:04 test
- --wx--x--x 1 505 incahome 25 Dec 25 21:10 test.sh
- [root@oldboy oldboy]# groupdel incahome
- [root@oldboy oldboy]# ll
- total 12
- drwxr-xr-x 2 505 506 4096 Dec 26 09:15 d755
- -rw-r--r-- 1 505 506 0 Dec 26 09:15 f644
- drwxr-xr-x 2 505 506 4096 Dec 25 23:04 test
- --wx--x--x 1 505 506 25 Dec 25 21:10 test.sh
文件的所屬用戶和屬組變成數字,解決辦法創建一個相同uid的用戶和相同gid的屬組,如果有服務還需要確保創建的用戶名與服務配置的用戶名一致並且對應uid。
- [root@oldboy oldboy]# groupadd incahome -g 506
- [root@oldboy oldboy]# ll
- total 12
- drwxr-xr-x 2 505 incahome 4096 Dec 26 09:15 d755
- -rw-r--r-- 1 505 incahome 0 Dec 26 09:15 f644
- drwxr-xr-x 2 505 incahome 4096 Dec 25 23:04 test
- --wx--x--x 1 505 incahome 25 Dec 25 21:10 test.sh
- [root@oldboy oldboy]# useradd oldgirl -u 505 -g incahome
- [root@oldboy oldboy]# ll
- total 12
- drwxr-xr-x 2 oldgirl incahome 4096 Dec 26 09:15 d755
- -rw-r--r-- 1 oldgirl incahome 0 Dec 26 09:15 f644
- drwxr-xr-x 2 oldgirl incahome 4096 Dec 25 23:04 test
- --wx--x--x 1 oldgirl incahome 25 Dec 25 21:10 test.sh