是否有可能在 Ubuntu 下不用密碼執行 sudo 命令?答案是確定的。本文中,咱們提供了多種方法來實現它。sudo 是在Linux中以「 超級用戶權限 」 運行全部命令的基本命令。要授予用戶 sudo 訪問權限,須要將用戶添加到sudoers 文件中。在基於 Ubuntu 和 Debian 的發行版中,sudoers 用戶組被稱爲wheel
。vim
按root運行指令,或用當前用戶之外的用戶執行命令時,須要運行 sudo 命令,同時系統將提示輸入密碼。這一步驟將增長您的 Ubuntu 系統的安全性。它還能夠防止權限較低的用戶從 Ubuntu 系統安裝或刪除任何應用程序。segmentfault
在某些狀況下,您可能須要運行自動進程或自動腳本,這須要在 sudoers 文件中配置,以容許某些用戶在沒有輸入密碼的狀況下運行 sudo 命令。在下面的步驟中,教你在不輸入密碼的狀況下運行sudo命令的方法。安全
有關用戶的每一個信息僅存儲在 sudoers 文件中。這決定了用戶和組的sudo權限。在編輯此文件以前,咱們建議您備份此文件。您可使用如下命令編輯sudoers文件:網絡
sudo visudo
上面的命令將打開/ etc/sudoers
文件。用 visudo 命令編輯文件後,會檢查是否有語法錯誤。建議您在編輯以前備份sudoers
文件。只需按照如下命令便可。less
sudo cp /etc/sudoers{,.backup_$(date +%Y%m%d)}
上面的命令將備份sudoers
文件,日期將附加文件名。編輯器
完成備份過程後。您能夠開始編輯 sudoers 文件。如須要將可視化編輯器更改成「nano」編輯器,可以使用如下命令:code
sudo EDITOR=nano visudo
或使用vim編輯器:進程
sudo EDITOR=vim visudo
該文件中,幾乎全部的行都被註釋掉了,sudoers文件示例中重要的是:rem
root ALL=(ALL) ALL
此行表示:root用戶能夠從全部終端執行,充當全部(任何)用戶,並運行ALL(任何)命令。
第一部分是用戶,第二部分是用戶可使用sudo命令的終端,第三部分是他能夠充當哪些用戶,最後一部分是使用時能夠運行的命令sudo。terminal
sudoers的例子
operator ALL= /sbin/poweroff
以上命令,使用戶操做員能夠從任何終端,關閉命令電源。
您還能夠爲如下項建立別名:users - > User_Alias,以其餘用戶身份運行命令 - > Runas_Alias,主機 - > Host_Alias 命令 - > Cmnd_Alias
User_Alias OPERATORS = joe, mike, jude Runas_Alias OP = root, operator Host_Alias OFNET = 10.1.2.0/255.255.255.0 Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm
正如您所看到的別名OPERATORS包括用戶joe,mike和jude,別名OP包括用戶root和operator,別名OFNET包括網絡10.1.2.0(全部C類),命令別名PRINTING包含命令lpc和lprm。
所以,典型的sudoers文件可能以下所示:
User_Alias OPERATORS = joe, mike, jude Runas_Alias OP = root, operator Host_Alias OFNET = 10.1.2.0/255.255.255.0 Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm OPERATORS ALL=ALL #The users in the OPERATORS group can run any command from any terminal. linus ALL=(OP) ALL # The user linus can run any command from any terminal as any user in the OP group (root or operator). user2 OFNET=(ALL) ALL # user user2 may run any command from any machine in the OFNET network, as any user. user3 ALL= PRINTING # user user3 may run lpc and lprm from any machine. yujiaao ALL=(ALL) ALL
在編輯器中打開 sudoers 文件後,您須要向下滾動到編輯器的末尾並在其中添加如下代碼!
yujiaao ALL=(ALL) NOPASSWD:ALL
用您的用戶名替換「 yujiaao 」!(例如:anderson ALL =(ALL)NOPASSWD:ALL),命令NOPASSWD將在終端中運行SUDO命令時跳過密碼驗證。
如何在爲特定命令運行sudo時跳過密碼:
您能夠容許某些命令使用密碼運行sudo,使用如下命令來實現它:
yujiaao ALL=(ALL) NOPASSWD:/bin/cp,/bin/install,bin/remove
完成編輯後,請保存文件並退出終端。
NOPASSWD 是一個「標籤」,表示不會請求密碼。它有一個名爲的伴隨命令 PASSWD,是默認行爲。標籤與規則的其他部分相關,除非在其後面的「雙胞胎」標籤上被否決。
例如,咱們能夠有這樣的一行:
在 /etc/sudoers
文件
. . . GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill . . .
另外一個有用的標籤NOEXEC
,可用於防止某些程序中的某些危險行爲。
例如,某些程序(如「less」)能夠經過在其界面中鍵入如下內容來生成其餘命令:
!command_to_run
這基本上執行用戶賦予它的任何命令,具備「less」運行的相同權限,這可能很是危險。
爲了限制這一點,咱們可使用這樣的一行:
在 /etc/sudoers
文件中
. . . username ALL = NOEXEC: /usr/bin/less . . .
/etc/sudoers.d
文件跳過密碼在/etc/sudoers
文件中,最後一行:#include /etc/sudoers.d
,乍一看,最後一行看起來像註釋:
#includedir /etc/sudoers.d
它確實以#
開頭,一般表示註釋。可是該行實際上代表/etc/sudoers.d
目錄中的文件也將被採納和應用。
該目錄中的文件與/etc/sudoers
文件自己遵循相同的規則。任何不是以~
號且未包含.
的任何文件將被讀取並生效。
這主要是爲了在安裝應用程序時更方便改 sudo權限。將全部關聯的規則放在/etc/sudoers.d
目錄下的單個文件中能夠輕鬆查看哪些權限與哪些賬戶關聯,並輕鬆地反向回滾,而無需嘗試直接操做/etc/sudoers
文件。
與/etc/sudoers
文件自己同樣,您應始終使用visudo
編輯目錄/etc/sudoers.d
中的文件。編輯這些文件的語法是:
sudo visudo -f /etc/sudoers.d/file_to_edit
此方法是在不輸入密碼的狀況下運行 sudo 命令的備用方法。您能夠將新文件身份驗證添加到/etc/sudoers.d
目錄中,對於已在 sudoers
目錄的新文件中定義的一些經常使用命令,sudo 命令能夠在沒有密碼的狀況下運行。此步驟將不須要對sudoers
文件自己的編輯。
如今您須要打開終端並在sudoers目錄中建立新文件。
sudo nano /etc/sudoers.d/new_file
有件事可別忘了:
sudo chmod 0440 new_file
在上面的命令中,將「 new_file 」 替換爲您本身的文件名。如今運行相同的命令來運行 sudo 命令而不輸入密碼。
username ALL=(ALL) NOPASSWD:ALL
上面的命令將幫助您爲該特定用戶運行沒有密碼的sudo命令。
一般,不建議全部沒有權限的用戶在沒有密碼的狀況下運行 sudo。建議您建立一個新的 sudoers 文件並單獨分配命令必須運行沒有密碼的 sudo 命令! 若是您有任何疑問,請在下方發表評論。
若是用出現語法錯誤參考 https://segmentfault.com/n/13...