Unix中將root帳戶權限下放給其他用戶
在實際工作中,Unix系統工程師可能需要將一些本來應該是root用戶才能夠運行的一些命令程序下放給普通的用戶進行執行。如passwd命令,默認情況下只有root管理員才能夠修改用戶帳戶的密碼。不過系統工程師更喜歡用戶自己來修改密碼。如此的話,用戶自己的密碼只有自己知道,可能更加的安全。當用戶忘記了自己的密碼之后,系統工程再利用root帳戶的權限去初始化用戶的密碼。在Windows系統中,這個功能可以輕而易舉的實現。不過在Unix系統中,實現起來就沒有這么容易了。在這篇文章中,筆者就跟大家討論一下這個話題。
一、有效的UID與真實的UID。
當系統管理員在shell環境中運行passwd命令時,shell首先會創建另一個shell進程。新創建的shell進程映像將載入passwd可執行映像并覆蓋自己的映像,passwd進程就開始運行。當一個進程被創建之后,passwd進程會從shell父進程中繼承大部分的屬性。跟今天這個話題有關的屬性主要有兩個。一是進程真實的UID。這個屬性與程序文件有關。這個參數代表了運行這個進程的用戶(而非程序文件)的UID,通常情況下這個參數保存在/etc/passwd中與用戶有關的記錄中。二是進程有效的UID。這個參數其實就表示程序文件的所有者,即誰能夠執行這個命令。通常情況下,進程的有效UID與真實UID是相同的。但是當非root用戶運行passwd命令時,他們就會不同。
二、PASSWD文件的特殊性。
在講解如何實現將root帳戶的權限下放給其他用戶之前,筆者要先給大家介紹一下passwd這個命令文件跟其他文件的不同。如下圖所示,系統管理員可以運行圖中所示的命令,來查看passwd程序文件與其它程序文件(如vi)的不同。
對比以上兩個文件的屬性,大家會發現在passwd文件里的一個權限位上標有s這個特殊的字符。這個參數就被稱為屬主身份設置位,英文簡稱為SUID,它可以用來改變一般用戶的權限模式。當非root用戶執行passwd更改自己帳戶的名字時,真實的UID就是這個用戶自己的UID,即運行這個程序的用戶。但是有效的UID則不是。有效的UID是root用戶,即這個程序文件的所有者。通常情況下,進程或者命令的存取、運行權限不是由真是UID而是有有效UID決定的,故如果沒有這個s這個特殊屬主身份設置時,其他用戶將無法使用這個命令。而現在其他用戶也可以利用passwd命令來更改自己的命令,可見這個屬主身份設置位可以改變一般用戶的權限模式,可以將本來只有root帳戶才能夠運行的進程下放給其他用戶運行。
三、臨時權限SUID。
將本來只有root帳戶才能夠運行的進程下放給其他用戶運行,有專家就把這種權限的轉移叫做臨時權限SUID。大部分的Unix系統都有這么一個特殊的權限設置模式,允許用戶更新一些敏感的系統文件。往往在這些文件的用戶權限組里面有一個特殊的字母s,就代表一種特殊的模式,即屬主身份設置位。利用這種模式系統工程師可以讓進程暫時擁有文件所有者的特權。因此當一個非特權用戶執行passwd命令時,進城有效的UID并不是用戶真實的UID。Passwd命令真是利用這個特性讓其他非特權用戶可以執行這個passwd命令。Passwd命令默認情況下系統就允許其他非特權用戶運行。但是其他一些系統維護命令,如網絡配置文件則不是。如果系統工程師要把網絡維護的工作分配給他人,就需要借鑒passwd的配置,將網絡配置文件的修改權限下放給其他用戶。
關鍵字:網絡、PASSWD、SUID
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解