關於LINUX中的許可權位S(設定使用者ID)(有效使用者ID)(實際使用者ID)

gaopengtttt發表於2016-02-16


getuid() 實際使用者ID為 執行程式的實際使用者ID
geteuid()
 有效使用者ID與設定使用者ID有關,及許可權中的S位

如果許可權為rws 那麼s位代表其他使用者執行程式時改變為主使用者許可權。不安全
如:
  8 #include<stdio.h>
  9 #include<stdlib.h>
 10 #include <unistd.h>
 11 #include <sys/types.h>
 12 #include <sys/stat.h>
 13 #include <fcntl.h>
 14 
 15 int main(void)
 16 {
 17 
 18     int fd;
 19 
 20     fd = open("abc", O_CREAT | O_RDWR | O_EXCL, 0777);
 21     if(fd==-1)
 22     {
 23         perror("error:");
 24     }
 25     printf("uid %ld,euid %ld\n",getuid(),geteuid());
 26 
 27 
 28 }


程式放到root使用者下,
-rwxr-xr-x   1 root root  8762 Feb 16 05:16 a.out
當前gaopeng使用者
如果在gaopeng使用者下執行這個程式正常情況下報錯
gaopeng@bogon:/$ ./a.out 
error:: Permission denied
uid 1000,euid 1000


如果設定了 設定使用者ID 如下:
chmod 4755 a.out 
-rwsr-xr-x   1 root root     8762 Feb 16 05:16 a.out
再次執行
gaopeng@bogon:/$ ./a.out 
uid 1000,euid 0


可以看到設定使用者ID為0即位超級使用者,並且沒有任何報錯檔案建立完成


設定這個位過後不需要SUDO就可以或者切換到root使用者下就能執行程式。不安全


如果是sudo
gaopeng@bogon:/$ sudo ./a.out 
uid 0,euid 0
可以看到
實際使用者ID和有效使用者ID都是 0


那麼總結一下:
實際使用者ID實際上是發起執行這個程式的使用者ID
有效使用者ID實際上是執行程式過程中,程式自身的使用者ID,
如果沒有設定S位實際上他是和實際使用者ID一樣的。
當然還有效使用者組ID 組許可權位也可以設定為S,和使用者一樣,執行時可以切換到其他組(如root組)使用者許可權下。


設定4***這裡的4是設定使用者s
設定2***這裡的2設定組s
當然還有1為黏住位已經淘汰無用。
chmod 2755 a.out
-rwxr-sr-x   1 root root  8762 Feb 16 05:16 a.out
chmod 4755 a.out
-rwsr-xr-x   1 root root  8762 Feb 16 05:16 a.out
chmod 6755 a.out
-rwsr-sr-x 1 root root 8762 Feb 16 05:16 a.out

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-1989671/,如需轉載,請註明出處,否則將追究法律責任。

相關文章