不用密碼情況下執行 sudo 命令
是否有可能在 Ubuntu 下不用密碼執行 sudo 命令?答案是肯定的。本文中,我們提供了多種方法來實現它。sudo 是在Linux中以“ 超級用戶權限 ” 運行所有命令的基本命令。要授予用戶 sudo 訪問權限,需要將用戶添加到sudoers 文件中。在基於 Ubuntu 和 Debian 的發行版中,sudoers 用戶組被稱爲wheel
。
爲什麼Ubuntu中的有 sudo 命令
按root運行指令,或用當前用戶以外的用戶執行命令時,需要運行 sudo 命令,同時系統將提示輸入密碼。這一步驟將增加您的 Ubuntu 系統的安全性。它還可以防止權限較低的用戶從 Ubuntu 系統安裝或刪除任何應用程序。
爲什麼需要不用密碼運行 sudo 命令?
在某些情況下,您可能需要運行自動進程或自動腳本,這需要在 sudoers 文件中配置,以允許某些用戶在沒有輸入密碼的情況下運行 sudo 命令。在下面的步驟中,教你在不輸入密碼的情況下運行sudo命令的方法。
將用戶添加到 sudoers 文件以跳過密碼
有關用戶的每個信息僅存儲在 sudoers 文件中。這決定了用戶和組的sudo權限。在編輯此文件之前,我們建議您備份此文件。您可以使用以下命令編輯sudoers文件:
sudo visudo
上面的命令將打開/ etc/sudoers
文件。用 visudo 命令編輯文件後,會檢查是否有語法錯誤。建議您在編輯之前備份sudoers
文件。只需按照以下命令即可。
sudo cp /etc/sudoers{,.backup_$(date +%Y%m%d)}
上面的命令將備份sudoers
文件,日期將附加文件名。
完成備份過程後。您可以開始編輯 sudoers 文件。如需要將可視化編輯器更改爲“nano”編輯器,可使用以下命令:
sudo EDITOR=nano visudo
或使用vim編輯器:
sudo EDITOR=vim visudo
該文件中,幾乎所有的行都被註釋掉了,sudoers文件示例中重要的是:
root ALL=(ALL) ALL
此行表示:root用戶可以從所有終端執行,充當所有(任何)用戶,並運行ALL(任何)命令。
第一部分是用戶,第二部分是用戶可以使用sudo命令的終端,第三部分是他可以充當哪些用戶,最後一部分是使用時可以運行的命令sudo。
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...