您好,登錄后才能下訂單哦!
一般來說,root權限是在系統管理員手中,不能輕易就給了普通用戶,但是有時普通用戶想做一些高級一點的操作,又得麻煩系統管理員,比如啊,改個程序文件重啟個Apache等等。
于是就有了root權限的下放,使得普通用戶能夠執行root用戶才能執行的命令。
一、有效的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)的不同。
[root@localhost ~]# ls -l /bin/vi /usr/bin/passwd
-rwxr-xr-x. 1 root root 910200 Jan 30 2014 /bin/vi
-rwsr-xr-x. 1 root root 27832 Jan 30 2014 /usr/bin/passwd
對比以上兩個文件的屬性,大家會發現在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的配置,將網絡配置文件的修改權限下放給其 他用戶。
四.用戶權限下放(sudo 命令權限下放)
在CentOS/Redhat中,root權限的下放可以通過/etc/sudoers 文件來實現。
我們打開這個文件。
這個文件的開頭就寫明了這個文件的用途:
Sudoers allows particular users to run various commands as the root user, without needing the root password.
在文件的最底部給出了使用的格式。
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
這里有四個部分,第一個%wheel表示的是用戶組,第二個部分ALL是作用對象,也就是在哪個主機上有效, 第三部分是以誰的身份來運行,第四個部分就是要執行的命令了。
舉個例子:我們要允許www組的用戶擁有重啟apache的權利,我們就可以在這個文件底部添加:
%www ALL=(root) /usr/sbin/apachectl -k start
www ALL=(root) /usr/sbin/apachectl -k restart
注意:加上%指定的是用戶組,不加%指定的是用戶。執行命令這里一定要寫完整路徑,畢竟每個用戶的環境變量都不一樣。
然后保存,注意一定要強制保存,加上嘆號。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。