Linux文件或目錄的權限位是由9個權限位來控制,每三位為一組,它們分別是文件屬主權限、屬組權限、其他用戶權限。
r:read可讀權限,對應數字4;
w:write可寫權限,對應數字2;
x:execute執行權限,對應數字1;
-:沒有任何權限,對應數字0。
創建一個test.sh,內容:echo "i am oldboy linux"。查看屬性:
一個家庭(用戶組)incahome,成員oldboy、oldgirl,非家庭用戶test,超級用戶root。
修改文件權限
分別測試不同用戶對該文件的權限。
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:change mode改變文件權限
chmod [數字組合] 文件名
chmod的數字方法的說明:
r:4;w:2;x:1:;-:0。
rwxr-xr-x:755
使用權限字符設置權限的命令格式如下。
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
umask默認值
umask的默認值的控制
創建文件默認最大權限為:666-umask,當umask有奇數時,計算權限需要在奇數位加1。
創建目錄默認最大權限位:777-umask。
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權利(安全優化)。
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組。
用途一般是把一個文件夾的權限都打開,然後來共享文件,例如/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 用戶 文件或目錄 à僅僅授權用戶
chown :組 文件或目錄 à僅僅授權組。等同於"chgrp 組 文件或目錄"。
chown 用戶:組 文件或目錄 à表示授權用戶和組
注意:
1、其中的冒號":"可以用點號"."替代。
2、要授權的用戶和組名,必須是linux系統裡實際存在的。
文件的所屬用戶和屬組變成數字,解決辦法創建一個相同uid的用戶和相同gid的屬組,如果有服務還需要確保創建的用戶名與服務配置的用戶名一致並且對應uid。
http://xxxxxx/Linuxjc/1182901.html TechArticle