在 Linux 中運行特定命令而無需 sudo 密碼 | Linux 中國

2022-01-13 Linux中國

我有一臺部署在 AWS 上的 Ubuntu 系統,在它的裡面有一個腳本,這個腳本的原有目的是以一定間隔(準確來說是每隔 1 分鐘)去檢查某個特定服務是否正在運行,如果這個服務因為某些原因停止了,就自動重啟這個服務。但問題是我需要 sudo 權限來開啟這個服務。正如你所知道的那樣,當我們以 sudo 用戶運行命令時,我們應該提供密碼,但我並不想這麼做,實際上我想做的是以 sudo 用戶的身份運行這個服務但無需提供密碼。假如你曾經經歷過這樣的情形,那麼我知道一個簡單的方法來做到這點。今天,在這個簡短的指南中,我將教你如何在類 Unix 的作業系統中運行特定命令而無需 sudo 密碼。

就讓我們看看下面的例子吧。

正如上面的截圖中看到的那樣,當我在根目錄(/)中創建一個名為 ostechnix 的目錄時,我需要提供 sudo 密碼。每當我們嘗試以 sudo 特權執行一個命令時,我們必須輸入密碼。而在我的預想中,我不想提供 sudo 密碼。下面的內容便是我如何在我的 Linux 機子上運行一個 sudo 命令而無需輸入密碼的過程。

在 Linux 中運行特定命令而無需 sudo 密碼

基於某些原因,假如你想允許一個用戶運行特定命令而無需提供 sudo 密碼,則你需要在 sudoers 文件中添加上這個命令。

假如我想讓名為 sk 的用戶去執行 mkdir 而無需提供 sudo 密碼,下面就讓我們看看該如何做到這點。

使用下面的命令來編輯 sudoers 文件:

將下面的命令添加到這個文件的最後。

sk ALL=NOPASSWD:/bin/mkdir

其中 sk 是用戶名。根據上面一行的內容,用戶 sk 可以從任意終端執行 mkdir 命令而不必輸入 sudo 密碼。

你可以用逗號分隔的值來添加額外的命令(例如 chmod),正如下面展示的那樣。

sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod

保存並關閉這個文件,然後註銷(或重啟)你的系統。現在以普通用戶 sk 登錄,然後試試使用 sudo 來運行這些命令,看會發生什麼。

看到了嗎?即便我以 sudo 特權運行 mkdir 命令,也不會彈出提示讓我輸入密碼。從現在開始,當用戶 sk 運行 mkdir 時,就不必輸入 sudo 密碼了。

當運行除了添加到 sudoers 文件之外的命令時,你將被提示輸入 sudo 密碼。

讓我們用 sudo 來運行另一個命令。

看到了嗎?這個命令將提示我輸入 sudo 密碼。

假如你不想讓這個命令提示你輸入 sudo 密碼,請編輯 sudoers 文件:

像下面這樣將 apt 命令添加到 sudoers 文件中:

sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt

你注意到了上面命令中 apt 二進位執行文件的路徑與 mkdir 的有所不同嗎?是的,你必須提供一個正確的可執行文件路徑。要找到任意命令的可執行文件路徑,例如這裡的 apt,可以像下面這樣使用 whichis 命令來查看:

apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz

如你所見,apt 命令的可執行文件路徑為 /usr/bin/apt,所以我將這個路徑添加到了 sudoers 文件中。

正如我前面提及的那樣,你可以添加任意多個以逗號分隔的命令。一旦你做完添加的動作,保存並關閉你的 sudoers 文件,接著註銷,然後重新登錄進你的系統。

現在就檢驗你是否可以直接運行以 sudo 開頭的命令而不必使用密碼:

看到了嗎?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[2] 選題:lujun9972 譯者:FSSlc 校對:校對者ID

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關焦點

  • Linux中設置'sudo'的10個小技巧
    在Linux和其他類Unix作業系統中,只有root用戶可以運行所有命令並在系統上執行某些關鍵操作,如安裝和更新,刪除包,創建用戶和組,修改重要的系統配置文件等。然而,承擔root用戶角色的系統管理員可以允許其他正常系統用戶在sudo命令和幾個配置的幫助下運行某些命令以及執行包括上述的一些重要系統操作。
  • linux系統管理指令Sudo出現重大漏洞!影響絕大多數Linux系統
    sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su
  • 關於 sudo 你可能不知道的 | Linux 中國
    只有極少數人提到,當你在同一個系統上有多個管理員時,可以使用 sudo 日誌查看誰做了什麼。那麼,sudo 是什麼?根據 sudo 網站:「sudo 允許系統管理員通過授予某些用戶以 root 用戶或其他用戶身份運行某些命令的能力,同時提供命令及其參數的審核記錄,從而委派權限。」
  • 在 Linux 上安裝安卓 8.1 Oreo 來運行應用程式和遊戲 | Linux 中國
    在你安裝 QEMU 後,我們將需要運行下面的命令來創建 android.img 文件,它就像某種分配給安卓系統的磁碟空間。在你運行上面的命令後,該安卓系統將啟動:Install Android 8.1 Oreo on Linux To Run Apps & Games 40 android 8.1 oreo on linux安裝系統從這個窗口中,選擇 「Advanced options」, 它將引導到下面的菜單,你應如下在其中選擇 「Auto_installation
  • 漏洞分析|linux sudo root 權限繞過漏洞(CVE-2019-14287)
    此漏洞編號是CVE-2019-14287,當sudo配置為允許用戶以任意方式運行命令時用戶通過Runas規範中的ALL關鍵字,可以通過指定用戶ID -1或4294967295以root用戶身份運行命令。
  • Linux提權
    sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。這樣不僅減少了root用戶的登錄 和管理時間,同樣也提高了安全性。sudo不是對shell的一個代替,它是面向每個命令的。sudo的幾個特點:        • sudo能夠限制用戶只在某臺主機上運行某些命令。
  • Linux運維基礎 - su 和 sudo 命令
    命令2.1 命令簡介sudo 可以用指定的用戶身份執行指定的指令,而無需輸入指定用戶的密碼,只需要輸入當前用戶的密碼。如果沒有可用的輔助程序,sudo 將錯誤退出-b 選項 -b(background)把 sudo 所要運行的命令放到後臺運行-E 選項 -E(preserve Environment)向安全策略指示用戶希望保存他們現有的環境變量。
  • Linux useradd命令添加新用戶圖文詳解
    例如,執行 "useradd -u 0 -o usertest" 命令建立用戶 usertest,它的 UID 和 root 用戶的 UID 相同,都是 0;-m建立用戶時強制建立用戶的家目錄。在建立系統用戶時;-r創建系統用戶,也就是 UID 在 1~499 之間,供系統程序使用的用戶。由於系統用戶主要用於運行系統所需服務的權限配置,因此系統用戶的創建默認不會創建主目錄。
  • 通過 Linux 命令行連接 Wifi | Linux 中國
    難度:簡單約定:◈ # - 需要使用 root 權限來執行指定命令,可以直接使用 root 用戶來執行,也可以使用 sudo 命令簡介許多人喜歡用圖形化的工具來管理電腦,但也有很多人不喜歡這樣做。如果你比較喜歡命令行工具,管理 WiFi 會是件很痛苦的事情。然而,事情本不該如此。
  • 如何在 Linux 中使用 history 命令 | Linux 中國
    隨著我在終端中花費越來越多的時間,我感覺就像在不斷地尋找新的命令,以使我的日常任務更加高效。GNU 的 history 命令是一個真正改變我日常工作的命令。GNU history 命令保存了從該終端會話運行的所有其他命令的列表,然後允許你重放或者重用這些命令,而不用重新輸入它們。
  • 12 個 ip 命令範例 | Linux 中國
    默認是沒有設置廣播地址的,設置廣播地址的命令為:[linuxtechi@localhost]$ sudo  ip addr add broadcast 192.168.0.255 dev enp0s3我們也可以使用下面命令來根據 IP 地址設置標準的廣播地址:[linuxtechi@localhost]$  sudo ip addr
  • 面試:說說Linux 命令 su 和 sudo 的區別?
    準備工作因為本篇博客中涉及到用戶切換,所以我需要提前準備好幾個測試用戶,方便後續切換。Linux 中新建用戶的命令是 useradd ,一般系統中這個命令對應的路徑都在 PATH 環境變量裡,如果直接輸入 useradd 不管用的話,就用絕對路徑名的方式:/usr/sbin/useradd 。
  • 12個讓您震撼的Linux終端命令
    每當您輸入一個命令,並且出現權限不夠的時候,您都會感謝有這個命令。怎麼使用sudo !!呢?假設您輸入了以下命令:apt-get install vlc除非您以root權限登錄,否則將出現權限不夠提示。sudo !!以sudo的形式運行前面的命令。
  • Sudo漏洞允許非特權Linux和macOS用戶以root身份運行命令
    實用程序中的一個重要漏洞,即在特定配置下,它可能允許低特權用戶或惡意程序在Linux或macOS系統上以 root身份執行命令。Sudo是最重要、功能最強大且最常用的實用程序之一,是預裝在macOS設備和幾乎所有UNIX或Linux作業系統上的重要命令。Sudo給了用戶不同身份的特權來運行應用程式或命令,而無需切換運行環境。Sudo漏洞(CVE-2019-18634)最新發現的提權漏洞(CVE-2019-18634)主要是因為1.8.26之前的Sudo版本中的堆棧緩衝區溢出問題。
  • linux系統帳號密碼破解
    (string.ascii_letters + string.digits) for _ inrange(16)]))"1.1.5使用oclHashcat破解linux密碼oclHashcat32是一款開源軟體,有linux和windows兩個版本,其Windows下破解linux三種加密算法命令如下:1.破解linux下md5算法加密密碼oclHashcat32
  • Anbox:在 Linux 上運行 Android 應用程式的簡單方式 | Linux 中國
    Anbox 可以讓你在 Linux 系統上運行 Android,而沒有虛擬化的遲鈍,因為核心的 Android 作業系統已經使用 Linux 命名空間(LXE)放置到容器中了。Android 容器不能直接訪問到任何硬體,所有硬體的訪問都是通過在主機上的守護進程進行的。每個應用程式將在一個單獨窗口打開,就像其它本地系統應用程式一樣,並且它可以顯示在啟動器中。
  • Linux命令: useradd/adduser 新增用戶
    語法:useradd [參數] name參數:-c:加上備註文字,備註文字保存在passwd的備註欄中。-d:–home-dir HOME_DIR 指定home目錄-e:指定帳號的失效日期,日期格式為MM/DD/YY,例如06/30/12。預設表示永久有效。-f:指定在密碼過期後多少天即關閉該帳號。
  • 如何設置 Linux 系統的密碼策略 | Linux 中國
    這樣一來,用戶現在不能設置小於 8 個字符的密碼。在基於 RPM 的系統中設置密碼長度在 RHEL、CentOS、Scientific Linux 7.x 系統中, 以 root 身份執行下面的命令來設置密碼長度。
  • Linux中運行有時間限制的命令(timeout)
    timeout是一個命令行實用程序,它運行指定的命令,如果在給定的時間段後仍在運行,則終止該命令。timeout命令是GNU核心實用程序軟體包的一部分,該軟體包幾乎安裝在所有Linux發行版中語法格式:timeout [OPTION] DURATION COMMAND [ARG]...
  • linux基礎命令和使用(基礎入門篇,看完就課上手linux作業系統)
    linux基礎命令和使用(基礎入門篇,看完就課上手linux作業系統)通常用全部大寫的變量名表示常量動態變量的申明不用指定變量類型