Permissions
Setuid、SUID 位不提供 root 權限
我編寫並編譯了一個簡短的程序,以允許任何使用者更改我的
/sys/class/backlight/intel_backlight/brightness
文件的內容,但我未能升級他們的權限。我能錯過什麼。#include <stdio.h> #include <stdlib.h> #define FILENAME "/sys/class/backlight/intel_backlight/brightness" int main (int argc, char * argv[]) { int res; setuid(0); // I didn't intend to keep this, but I included it just in case printf("euid %d\n", geteuid()); system("whoami"); // Attempt to open FILENAME; print "Can't open..." on failure }
但是,
whoami
始終返回exampleuser
而不是root
,並且程序始終無法打開輸出文件。我編譯它並設置 uid 位然後執行程序:
$ gcc -o example.bin example.c # compile $ sudo chown root:root example.bin # set owner & group $ sudo chmod 4770 example.bin # set uid bit $ ./example.bin 75 # execute euid 1000 exampleuser Can't open output file /sys/class/backlight/intel_backlight/brightness
目標輸出文件確實存在:
$ ls -l /sys/class/backlight/intel_backlight/brightness -rw-r--r-- 1 root root 4096 May 2 07:57 /sys/class/backlight/intel_backlight/brightness
我正在執行 Ubuntu 14.04 LTS
文件系統不支持 setuid 執行檔(因為它是使用
nosuid
選項掛載的,或者因為它是由非 root 使用者掛載的 FUSE 文件系統),或者存在諸如 SELinux 或 AppArmor 之類的安全框架在此處阻止 setuid(我不要認為Ubuntu設置了這樣的東西)。那,或者你實際上並沒有執行這些命令——你已經使文件不能被其他人執行,所以它們只有在你在root
組中時才能工作,這是你不應該的。無論如何,這不是一個好方法。更改文件的權限要簡單得多。
chgrp users /sys/class/backlight/intel_backlight/brightness chmod g+w /sys/class/backlight/intel_backlight/brightness
如果您不是該組的成員,請使用您所屬的
users
組。將這些命令添加到
/etc/rc.local
或在引導序列結束時執行的其他一些腳本中。