歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux SUID/SGID/SBIT權限

Linux SUID/SGID/SBIT權限

日期:2017/2/28 15:58:07   编辑:Linux教程
其實SUID和SGID的作用跟sudo是相似的。當用戶A想執行一個原本屬於用戶B的可執行文件時,若B的文件設置了suid位,則A在執行時是以用戶 B的身份來執行。

其中一個suid的應用實例就是passwd,在linux中,存儲密碼的文件是/etc/passwd與/etc/shadow這兩個文件,

  1. [email protected]:~/cpp$ ls -l /etc/passwd
  2. -rw-r--r-- 1 root root 1503 2011-03-22 15:03 /etc/passwd
  3. [email protected]:~/cpp$
  4. [email protected]:~/cpp$ ls -l /etc/shadow
  5. -rw-r----- 1 root shadow 1071 2011-03-22 15:03 /etc/shadow
  6. [email protected]:~/cpp$

這兩天文件的所屬用戶 是root,也就是說,只有root用戶可以修改這個文件。但是在一個多用戶 的系統中,即便是普通用戶,也有更改自己的密碼的權限吧?但是更改密碼就要更改到/etc/passwd這個文件,一般情況下是不被允許的。所以,這就是suid的作用了。

先看一下設置密碼的命令:

  1. [email protected]:/tmp/aa# ls -l /usr/bin/passwd
  2. -rwsr-xr-x 1 root root 37100 2011-02-15 06:12 /usr/bin/passwd

可以看到,/usr/bin/passwd是設置 了sticky位的。也就是說,當普通用戶在執行passwd命令時,其實使用是root管理員的身份,當更改完密碼時,就恢復到普通用戶的身份了。

我想了一個實驗來看一下效果

  1. cd /tmp/
  2. mkdir aa
  3. cd aa

寫一個perl程序:

  1. #!/usr/bin/perl
  2. system("touch test");

順便說一下,需要先安裝perl-suid才可以設置perl程序suid位。不然會報如下錯誤:

Can't do setuid (cannot exec sperl)

Copyright © Linux教程網 All Rights Reserved