問題:為什么普通用戶可以修改自己的密碼?
ll $(which passwd)
1、SetUID:當一個可執行程序/命令具有SetUID 權限,用戶執行這個程序時,將以這個程序的所有者的身份執行。
2、加SetUID權限:
chmod u+s [filename] 或 chmod 4755 [filename] #SetUID權限值=4
E.g.
chmod u+s $(which touch)
#可以看到newfile2的所有者并不是guest,而是root!
3、危險!
將命令設置成SetUID是一件很危險的事,比如將vi設置成SetUID,則他可以編輯并保存系統中所有的文件,甚至是系統配置文件!他可以讓一個用戶瞬間編程超級用戶,他可以使你的系統不斷的重啟等,或者將kill設置成SetUID...
預防:
find / -perm -4000 -o -perm -2000
#查找權限為4000或2000的文件,即具有SetUID,SetGID的文件
4、取消SetUID權限:
chmod u-s [filename] 或 chmod 755 [filename]
附-原來的文件必須是一個可執行程序,如果原文件沒有x權限,則設置SetUID之后也沒有任何作用
#顯示為S[大寫]!
1、SetGID:當一個可執行程序/命令具有SetGID 權限,用戶執行這個程序時,將以這個程序所屬組的身份執行。
2、加SetGID權限:
chmod g+s [filename] 或 chmod 2755 [filename] #SetGID權限值=2
#可以看到testfile2的所屬組并不是默認的guest,而是root!
【同時設置UID與GID chmod 655...】
1、粘著位:如果一個權限為777的目錄,被設置了粘著位,每個用戶都可以在這個目錄里面創建文件,但是只可以刪除所有者是自己的文件。
2、設置粘著位:
chmod o+t [filename] 或 chmod 1777 [filename] #粘著位用t來表示,權限值=1
#可以看到,在設置了粘著位的/t_test目錄,刪除隸屬于自己的文件是可以的,但是無法刪除其他人的文件.
附-文件的特殊權限:
umask命令的第一位
上一篇 1高并發服務器:多進程服務器
下一篇 C++中的友元函數和友元類