FreeBSD程式的許可權(轉)
由於FreeBSD是多使用者系統,因此程式必須要受到許可權的控制和保護。出於安全性的考慮,一個使用者不可能殺死其他使用者啟動的程式,一個程式也不能非法存取其他使用者的檔案資料。只有超級使用者和超級使用者啟動的程式才有最大的許可權,普通程式就只與程式的執行者相關,只具有這個使用者的許可權。
一些情況下(特別是執行系統維護任務時),要求普通使用者也能完成特殊許可權的任務,那麼就必須在程式執行過程中改變程式的身份。改變程式的身份則必須同時具備兩個要求:程式檔案本身具有SetUID或SetGID屬性,同時程式中需要相應呼叫setuid()或setgid()系統呼叫,這兩個系統呼叫能夠檢查檔案的屬性,並完成更改程式許可權的操作。
通常只有系統程式才需要利用這兩個屬性,例如系統程式su允許普通使用者成為root使用者,就使用的是這個能力。
$ ls -l a*-rwxr-xr-x 1 user wheel 3212 Dec 4 12:36 a1-rwxr-xr-x 1 user wheel 3212 Dec 4 12:36 a2$ chmod u+s a1$ ls -l a*-rwsr-xr-x 1 user wheel 3212 Dec 4 12:36 a1-rwxr-xr-x 1 user wheel 3212 Dec 4 12:36 a2$ chmod g+s a2$ ls -l a*-rwsr-xr-x 1 user wheel 3212 Dec 4 12:36 a1-rwxr-sr-x 1 user wheel 3212 Dec 4 12:36 a2
上面第一個chmod(chmod u+s a.out)為a.out增加設定屬主身份許可權,然後列表中對應屬主的執行許可權位的 “x” 標誌將改變為 “s” (檔案屬性顯示為rwsr-xr-x)。第二個c hmod (chmod g+s a.out)為a.out增加設定組身份許可權,則列表中對應組的執行許可權位的 “x ” 標誌將改變為 “s” (檔案屬性顯示為rwxr-sr-x)。同樣,SetUID和SetGID 屬性也都有相應的八進位制表示方式,SetUID為04000,後面的三個八進位制位屬於檔案的讀寫訪問屬性設定,相應S etGID為02000,它們兩個屬性位處於讀寫屬性位之前。下面是一個更改屬性設定的例子:
# ls -l /bin/ps-r-xr-sr-x 1 bin kmem 163840 May 6 06:02 /bin/ps# chmod a=r /bin/ps# su user$ psbash: ps: Permission denied$ ^D# chmod a+x /bin/ps# su user$ psps: /dev/mem: Permission denied$ ^D# chmod g+s /bin/ps# su user$ ps PID TT STAT TIME COMMAND 226 p2 S 0:00.56 bash 239 p2 R+ 0:00.02 ps$
第一次以user身份執行ps時,ps的檔案屬性被改為對所有使用者只有讀許可權,因此不能執行,shell報告 Permission denied;第二次以user身份執行ps時,ps報告不能開啟/dev/mem檔案,這是因為普通使用者無權存取記憶體映象檔案。而第三次執行ps時,由於設定了setgid位,和kmem同組的程式就能夠開啟 /dev/mem檔案,從而正確執行了ps程式。
具有SetUID或SetGID屬性的程式,能夠在程式執行中呼叫系統呼叫setuid()或setgid() ,呼叫成功後這個程式就具有了程式檔案屬主和組的許可權,就可以完成以前改變身份之前不能完成的任務。因為透過它們程式可以改變程式的使用者標識,繞過系統的許可權設定,因此這兩個屬性對於系統安全非常重要。尤其是屬於root的檔案,並設定了SetUID屬性的程式,更是系統安全中值得注意的地方。為了保證系統安全,必須保證沒有非法的SetUID或 SetGID程式的存在,通常管理員可以使用find命令來完成這個任務,例如查詢具有SetUID的程式,則執行:
# find / -perm 4000 -print
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-944755/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- AIX 的許可許可權(轉)AI
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- Guest許可權突破——許可權提升方法總結(轉)
- .NET 程式許可權控制、獲得管理員許可權程式碼
- 許可權之選單許可權
- FreeBSD可執行程式格式(轉)行程
- 【轉】關於MySQL許可權MySql
- FreeBSD下的可執行程式格式(轉)行程
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- 呼叫者許可權與定義者許可權的pl/sql子程式SQL
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- 許可權系統:一文搞懂功能許可權、資料許可權
- Oracle 許可權常用語句【轉】Oracle
- Mysql存取許可權系統(轉)MySql
- Linux作業系統的許可權程式碼分析【轉】Linux作業系統
- Linux-許可權管理(ACL許可權)Linux
- 【自然框架】許可權的視訊演示(二):許可權到欄位、許可權到記錄框架
- public_html的許可權問題(轉)HTML
- 【Git】程式碼許可權&分支管理Git
- 小程式許可權設定(位置)
- Linux 下程式許可權分析Linux
- 程式請求管理員許可權
- Android系統許可權和root許可權Android
- Windows環境下提升程式的許可權Windows
- 如何檢測應用通知許可權?如何跳轉通知許可權設定頁?
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- 阿里雲RDS的高許可權不是真正的高許可權阿里
- Linux的檔案存取許可權和0644許可權Linux
- 擁有GRANT ANY OBJECT PRIVILEGE許可權時的許可權回收Object
- mysql許可權MySql
- MySQL 許可權MySql
- ORACLE許可權Oracle
- ORACLE FGAC(細粒度許可權控制)(轉)Oracle
- mysql 管理:mysql 執行許可權(轉)MySql
- 物件許可權的回收物件
- Linux 許可權管理之目錄許可權限制Linux
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- 【LIUNX】目錄或檔案許可權,許可權授予