在 Linux 中執行特定命令而無需 sudo 密碼
我有一臺部署在 AWS 上的 Ubuntu 系統,在它的裡面有一個指令碼,這個指令碼的原有目的是以一定間隔(準確來說是每隔 1 分鐘)去檢查某個特定服務是否正在執行,如果這個服務因為某些原因停止了,就自動重啟這個服務。但問題是我需要 sudo 許可權來開啟這個服務。正如你所知道的那樣,當我們以 sudo 使用者執行命令時,我們應該提供密碼,但我並不想這麼做,實際上我想做的是以 sudo 使用者的身份執行這個服務但無需提供密碼。假如你曾經經歷過這樣的情形,那麼我知道一個簡單的方法來做到這點。今天,在這個簡短的指南中,我將教你如何在類 Unix 的作業系統中執行特定命令而無需 sudo 密碼。
就讓我們看看下面的例子吧。
$ sudo mkdir /ostechnix
[sudo] password for sk:
正如上面的截圖中看到的那樣,當我在根目錄(/
)中建立一個名為 ostechnix
的目錄時,我需要提供 sudo 密碼。每當我們嘗試以 sudo 特權執行一個命令時,我們必須輸入密碼。而在我的預想中,我不想提供 sudo 密碼。下面的內容便是我如何在我的 Linux 機子上執行一個 sudo
命令而無需輸入密碼的過程。
在 Linux 中執行特定命令而無需 sudo 密碼
基於某些原因,假如你想允許一個使用者執行特定命令而無需提供 sudo 密碼,則你需要在 sudoers
檔案中新增上這個命令。
假如我想讓名為 sk
的使用者去執行 mkdir
而無需提供 sudo 密碼,下面就讓我們看看該如何做到這點。
使用下面的命令來編輯 sudoers
檔案:
$ sudo visudo
將下面的命令新增到這個檔案的最後。
sk ALL=NOPASSWD:/bin/mkdir
其中 sk
是使用者名稱。根據上面一行的內容,使用者 sk
可以從任意終端執行 mkdir
命令而不必輸入 sudo 密碼。
你可以用逗號分隔的值來新增額外的命令(例如 chmod
),正如下面展示的那樣。
sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod
儲存並關閉這個檔案,然後登出(或重啟)你的系統。現在以普通使用者 sk
登入,然後試試使用 sudo
來執行這些命令,看會發生什麼。
$ sudo mkdir /dir1
看到了嗎?即便我以 sudo 特權執行 mkdir
命令,也不會彈出提示讓我輸入密碼。從現在開始,當使用者 sk
執行 mkdir
時,就不必輸入 sudo 密碼了。
當執行除了新增到 sudoers
檔案之外的命令時,你將被提示輸入 sudo 密碼。
讓我們用 sudo
來執行另一個命令。
$ sudo apt update
看到了嗎?這個命令將提示我輸入 sudo 密碼。
假如你不想讓這個命令提示你輸入 sudo 密碼,請編輯 sudoers
檔案:
$ sudo visudo
像下面這樣將 apt
命令新增到 sudoers
檔案中:
sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt
你注意到了上面命令中 apt
二進位制執行檔案的路徑與 mkdir
的有所不同嗎?是的,你必須提供一個正確的可執行檔案路徑。要找到任意命令的可執行檔案路徑,例如這裡的 apt
,可以像下面這樣使用 whichis
命令來檢視:
$ whereis apt
apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz
如你所見,apt
命令的可執行檔案路徑為 /usr/bin/apt
,所以我將這個路徑新增到了 sudoers
檔案中。
正如我前面提及的那樣,你可以新增任意多個以逗號分隔的命令。一旦你做完新增的動作,儲存並關閉你的 sudoers
檔案,接著登出,然後重新登入進你的系統。
現在就檢驗你是否可以直接執行以 sudo
開頭的命令而不必使用密碼:
$ sudo apt update
看到了嗎?apt
命令沒有讓我輸入 sudo 密碼,即便我用 sudo
來執行它。
下面展示另一個例子。假如你想執行一個特定服務,例如 apache2
,那麼就新增下面這條命令到 sudoers
檔案中:
sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin/systemctl restart apache2
現在使用者 sk
就可以執行 sudo systemctl restart apache
命令而不必輸入 sudo 密碼了。
我可以再次讓一個特別的命令提醒輸入 sudo 密碼嗎?當然可以!只需要刪除新增的命令,登出然後再次登入即可。
除了這種方法外,你還可以在命令的前面新增 PASSWD:
指令。讓我們看看下面的例子:
在 sudoers
檔案中新增或者修改下面的一行:
sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod,PASSWD:/usr/bin/apt
在這種情況下,使用者 sk
可以執行 mkdir
和 chmod
命令而不用輸入 sudo 密碼。然而,當他執行 apt
命令時,就必須提供 sudo 密碼了。
免責宣告:本篇指南僅具有教育意義。在使用這個方法的時候,你必須非常小心。這個命令既可能富有成效但也可能帶來摧毀性效果。例如,假如你允許使用者執行 rm
命令而不輸入 sudo 密碼,那麼他們可能無意或有意地刪除某些重要檔案。我警告過你了!
那麼這就是全部的內容了。希望這個能夠給你帶來幫助。更多精彩內容即將呈現,請保持關注!
乾杯!
via: https://www.ostechnix.com/run-particular-commands-without-sudo-password-linux/
作者:SK 選題:lujun9972 譯者:FSSlc 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
相關文章
- 無需sudo使用Podman在Linux上執行容器Linux
- 如何在 Linux 中不輸入密碼執行 sudo 命令Linux密碼
- ansible基於密碼sudo執行命令密碼
- sudo以其他使用者身份身份執行命令-linux命令學習Linux
- 在 Windows 中執行 Linux 命令的 4 種方法WindowsLinux
- 在linux上定期執行命令、指令碼(cron,crontab,anacron)Linux指令碼
- Linux Sudo 被爆重要漏洞,允許黑客提權執行root命令Linux黑客
- Linux 中如何設定每個特定的時間執行特定的程式Linux
- Linux基礎命令---sudoLinux
- Linux基礎命令—sudoLinux
- 在 Linux 中執行.sh 指令碼 No such file or directoryLinux指令碼
- Linux命令su、sudo、sudo su、sudo -i使用和區別Linux
- Linux 下用 SCP 無需輸入密碼傳輸檔案Linux密碼
- Vs Code中執行vue命令顯示"系統禁止執行指令碼"無法在終端使用Vue指令碼
- Linux 定時執行指令碼、命令Linux指令碼
- docker 中vim 命令 無法執行Docker
- Docker命令-docker exec-在執行的容器中執行命令Docker
- 在Linux中修改MySQL的密碼LinuxMySql密碼
- Linux 系統中 sudo 命令的 10 個技巧Linux
- 在指令碼中呼叫git命令:指定git命令執行上下文指令碼Git
- 如何在命令列上建立符合特定規範的密碼?命令列密碼
- shell指令碼linux命令連續執行指令碼Linux
- Linux sudo 被曝提權漏洞,任意使用者均能以 root 身份執行命令Linux
- 設定非root賬號不用sudo直接執行docker命令Docker
- 在Linux中,如何重置 mysql root 密碼?LinuxMySql密碼
- 威力強大的Linux sudo 命令Linux
- 用大寫字母輸入 Linux 命令以將其作為 sudo 使用者執行Linux
- Linux 命令 su 和 sudo 的區別Linux
- 收集 Linux 命令列執行的命令Linux命令列
- Linux中su和sudo命令有什麼區別?Linux學習教程Linux
- JetBrians的clion在執行程式碼時無法進行system("cls")清屏命令行程
- php執行shell指令碼需要sudo許可權PHP指令碼
- 雲需而動安全隨行
- linux執行環境&命令Linux
- Linux 後臺執行命令Linux
- shell 命令在終端可以執行成功,為什麼放在 groovy 指令碼中不執行?指令碼
- 在DOS視窗執行java命令中文顯示正常,執行javac命令中文亂碼Java
- Deepin Linux 在 Wine 中執行微信Linux