其中一個suid的應用實例就是passwd,在linux中,存儲密碼的文件是/etc/passwd與/etc/shadow這兩個文件,
- [email protected]:~/cpp$ ls -l /etc/passwd
- -rw-r--r-- 1 root root 1503 2011-03-22 15:03 /etc/passwd
- [email protected]:~/cpp$
- [email protected]:~/cpp$ ls -l /etc/shadow
- -rw-r----- 1 root shadow 1071 2011-03-22 15:03 /etc/shadow
- [email protected]:~/cpp$
這兩天文件的所屬用戶 是root,也就是說,只有root用戶可以修改這個文件。但是在一個多用戶 的系統中,即便是普通用戶,也有更改自己的密碼的權限吧?但是更改密碼就要更改到/etc/passwd這個文件,一般情況下是不被允許的。所以,這就是suid的作用了。
先看一下設置密碼的命令:
- [email protected]:/tmp/aa# ls -l /usr/bin/passwd
- -rwsr-xr-x 1 root root 37100 2011-02-15 06:12 /usr/bin/passwd
可以看到,/usr/bin/passwd是設置 了sticky位的。也就是說,當普通用戶在執行passwd命令時,其實使用是root管理員的身份,當更改完密碼時,就恢復到普通用戶的身份了。
我想了一個實驗來看一下效果
- cd /tmp/
- mkdir aa
- cd aa
寫一個perl程序:
- #!/usr/bin/perl
- system("touch test");
順便說一下,需要先安裝perl-suid才可以設置perl程序suid位。不然會報如下錯誤:
Can't do setuid (cannot exec sperl)