su命令和sudo命令都讓用戶可以執行非特權用戶(除root用戶之外的所有人)無權執行的系統管理任務。一些人偏愛sudo命令,比如Seth Kenlon最近發表了《在linux上使用sudo的五個理由》,該文盛贊sudo的諸多優點。
另一方面,我偏愛su命令,更喜歡用它而不是用sudo來處理我從事的大部分系統管理工作。我在本文中比較了這兩個命令,解釋了為什么我更喜歡su而不是sudo,但仍然同時使用這兩個命令。
系統管理員的歷史觀點
su命令和sudo命令是為不同的世界設計的。早期的Unix計算機需要全職系統管理員,他們使用root帳戶作為唯一的管理帳戶。在那個時代,擁有root密碼的人以root身份登錄電傳打字機或CRT終端,然后執行管理Unix計算機所必需的管理任務。root用戶也會擁有非root帳戶來處理非root活動,比如編寫文檔和管理個人電子郵件。
這些計算機上通常有許多非root用戶帳戶,這些用戶都不需要全面的root訪問權。用戶可能需要以root身份運行一兩個命令,但很少這樣。許多系統管理員以root身份登錄,完成工作后退出root會話。有時需要整天保持以root身份登錄的狀態。大多數系統管理員之所以很少使用sudo,是由于它需要輸入比運行基本命令所需的更多內容。這些工具都可以提升權限,但方式大不相同。這種差異歸因于它們最初面向不同的用例。
sudo
sudo的初衷是讓root用戶能夠向一兩個非root用戶授予這一權限:訪問他們經常需要的一兩個特定命令。sudo命令使非root用戶可以臨時訪問執行任務所需的提升權限,比如添加和刪除用戶、刪除屬于其他用戶的文件、安裝新軟件以及通常管理現代Linux主機所需的任何任務。
允許用戶訪問需要提升權限的一兩個常用命令可以讓系統管理員避免用戶的大量請求,并消除等待時間。sudo命令并不將用戶帳戶切換成root;大多數非root用戶永遠不應該擁有全面的root訪問權。在大多數情況下,sudo讓用戶可以發出一兩個命令,然后允許權限提升到期失效。在這個短暫的間隔(通常設置為5分鐘),用戶可以執行任何需要提升權限的必要管理任務。如果用戶需要繼續使用提升的權限,但尚未準備好發出另一個與任務相關的命令,可以運行sudo -v命令,重新驗證登錄信息,并將間隔時間再延長5分鐘。
使用sudo命令確實有這個副作用:生成非root用戶使用的命令的日志條目及其ID。日志便于事后分析問題,以確定用戶何時需要加強培訓。
su
su命令旨在允許非root用戶將權限級別提升到root——實際上就是非root用戶成為root用戶。唯一的要求是用戶需要知道root密碼。這方面沒有任何限制,因為用戶現在以root身份登錄。su命令提供的權限提升沒有時間限制。用戶以root身份想工作多久就可以多久,無需重新驗證身份。完成工作后,用戶可以發出exit命令,從root恢復到自己的非root帳戶。
爭議和變化
最近su與sudo的使用存在一些分歧。“真正的[系統管理員]不使用sudo”——Paul Venezia
Venezia在其文章中稱,對于許多充當系統管理員的人來說,sudo被用作不必要的道具。他沒有用太多的篇幅來捍衛或解釋這一立場,只是聲稱這是事實。我同意他的看法,對于系統管理員來說是這樣。我們不需要輔助輪來完成我們的工作。實際上,輔助輪很礙事。
然而,時代在“變化” ——美國民謠之父Bob Dylan是對的。自單人單機時代問世以來,管理計算機的方式發生了顯著變化。在許多環境中,計算機的用戶也是管理員。因此有必要為那些用戶提供root的部分權限。一些現代發行版(比如Ubuntu及衍生版)經配置后,可將sudo命令專門用于特權任務。在那些發行版中,不可能以root用戶身份直接登錄或者甚至使用su成為root,因此需要sudo命令允許非root用戶訪問root權限。在這種環境下,所有系統管理任務都使用sudo來執行。
如果鎖定root帳戶,并將常規用戶帳戶添加到wheel組,可以進行這種配置。這種配置很容易被規避。
不妨在任何Ubuntu主機或虛擬機上先進行試驗。我安裝了Ubuntu 16.04 LTS1,并使用VirtualBox將它安裝在虛擬機中。我在安裝過程中為這個試驗創建了一個非root用戶student,并使用了一個簡單的密碼。
以用戶student身份登錄,打開終端會話。查看/etc/shadow文件中root對應的條目,加密的密碼存儲在該文件中。
student@ubuntu1:~$ cat /etc/shadowcat: /etc/shadow: Permission denied1.2.
權限被拒絕,因此我們無法查看/etc/shadow文件。這對所有發行版都很常見,旨在防止非特權用戶查看和訪問加密的密碼,不然可以使用常見的黑客工具破解這些密碼。現在不妨嘗試使用su –成為root。
student@ubuntu1:~$ su -Password: <Enter root password – but there isn't one>su: Authentication failure1.2.3.
左右滑動查看完整代碼這會失敗,因為root帳戶沒有密碼,被鎖在外面。使用sudo命令查看/etc/shadow文件。
student@ubuntu1:~$ sudo cat /etc/shadow[sudo] password for student: <enter the student password>root:!:17595:0:99999:7:::<snip>student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::<snip>1.2.3.4.5.6.
左右滑動查看完整代碼我截斷了輸出結果,只顯示root和student用戶對應的條目。我還縮短了加密的密碼,因此條目將放在一行中。字段由冒號(:)隔開,第二個字段是密碼。請注意,root的密碼字段是bang,即是個感嘆號(!)。這表明該帳戶已被鎖住,無法使用。
現在,要使用root帳戶成為真正的系統管理員,就需要為root帳戶設置密碼。
student@ubuntu1:~$ sudo su -[sudo] password for student: <Enter password for student>root@ubuntu1:~# passwd rootEnter new UNIX password: <Enter new root password>Retype new UNIX password: <Re-enter new root password>passwd: password updated successfullyroot@ubuntu1:~#1.2.3.4.5.6.7.
左右滑動查看完整代碼現在您可以直接在控制臺上以root身份登錄,或者直接使用su成為root,而不是對每個命令使用sudo。當然,每當您想以root身份登錄,完全可以就使用sudo su -,但何必勞這個神?
請別誤解我的意思。Ubuntu及上下游衍生版之類的發行版非常好,這些年來我就用過其中幾個。在使用Ubuntu及相關發行版時,我最先做的事情之一是設置root密碼,以便我可以直接以root身份登錄。
其他發行版(如Fedora及衍生版)如今在安裝過程中提供幾個有意思的選擇。我注意到這點的第一個Fedora版本是Fedora 34。可以在頁面上找到這些安裝選項之一,以設置root密碼。新選項允許用戶以鎖定Ubuntu root帳戶的方式選擇“鎖定root帳戶”。該頁面上還有一個選項,允許使用密碼,以root身份遠程SSH登錄到該主機,但僅當root帳戶被解鎖時才適用。
頁面上的第二個選項允許創建非root用戶帳戶。該頁面上的選項之一是“將該用戶設為管理員”。選中該選項后,用戶ID被添加到名為wheel組的特殊組中,授權該組成員可以使用sudo命令。Fedora 36甚至在該復選框的描述中提到了wheel組。
可以將多個非root用戶設為管理員。使用該方法指定為管理員的任何人都可以使用sudo命令,在Linux計算機上執行所有管理任務。
Linux只允許在安裝過程中創建一個非root用戶,因此其他新用戶可以在創建時添加到wheel組中。root用戶或另一個管理員可以使用文本編輯器或usermod命令,將現有用戶直接添加到wheel組。在大多數情況下,今天的管理員只需要執行幾項基本任務,比如添加新打印機、安裝更新或新軟件,或者刪除不再需要的軟件。這些GUI工具需要root或管理員密碼,接受指定為管理員的用戶輸入的密碼。
我如何在Linux上使用su和sudo?
我既使用su又使用sudo。它們在我的系統管理員工具箱中都有重要的位置。
我無法鎖定root帳戶,因為我需要使用它來運行我的Ansible劇本和為執行備份而編寫的rsbu Bash程序。這兩個命令都需要以root身份運行,我編寫的另外幾個管理Bash腳本也是如此。我使用su命令將用戶切換成root用戶,那樣我就可以執行這些任務和其他許多常見任務。在確定和解決問題時,使用su將我的權限提升到root尤其有用。
當非root用戶需要執行需要root權限的任務時,我將sudo命令用于這些任務。我在sudoers文件中設置了非root帳戶,以便只訪問完成任務所需的一兩個命令。當我只需要運行一兩個擁有升級權限的快速命令時,我自己也會使用sudo。
結論
使用哪種工具其實不如完成工作那么重要。使用vim或Emacs、systemd或SystemV、RPM或DEB、sudo或su,并沒有那么大的區別。
歸根到底,應該使用最順手、最適合自己的工具。Linux和開源的最大優點之一便是,我們通常都有許多可供選擇工具幫助我們完成任務。su和sudo各有優點,適當用于預期的用例時,兩者都表現不俗。我偏愛用su處理自己的大部分工作,因為它最適合我和我的工作流程。
參考鏈接:
ps://opensource.com/article/22/6/linux-su-vs-sudo-sysadmin