在linux中每個進程有三個[實際上有第4個]用戶標識符.
real uid : 真實用戶ID.
saved uid : 已保存用戶ID
effective uid : 有效用戶ID
真實用戶ID(real uid)是login時的用戶.而在運行過程中,用於所有的安全檢查的是有效用戶ID(effective uid).
用戶態軟件訪問root文件方法:
1、setuid(0) || seteuid(0) ||
2、chown root:root ${exe}
3、chmod 4111 ${exe} #改變有效id和已保存id
gtk3+ 不能使用setuid的方法,因爲setuid的時候gtk會初始化動態加載模塊,大概50萬行,這是一個安全漏洞,所以gtk禁用setuid,setgid。gtk程序想使用root權限可以嘗試使用一個root的後臺程序或者用gksu的方法啓動時輸入root密碼
現在有一個普通用戶operation,我想讓他有權限重啓nginx服務,但是不允許他操作其他的系統服務及程序,從網上找到了很多解決方法,都是基於sudoer的配置的
operation ALL=(ALL) NOPASSWD: /etc/init.d/nginx restart
格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD:COMMAND_FLAG
另外建議使用visudo
命令進行編輯,不要直接修改/etc/sudoers
。如命令格式不對、使用visudo編輯時保存退出會提示錯誤的參考文章:http://blog.chinaunix.net/uid-20722281-id-160009.html
http://www.gtk.org/setuid.html