當前位置: 首頁>>技術教程>>正文


sudo – 如何以禁用登錄的用戶身份運行命令?

,

問題描述

我正在嘗試使用 su 命令以另一個用戶身份運行應用程序

在這種情況下,我正在嘗試運行 irssi

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

我運行 gksu 並設置相同的參數,它可以工作,並且不要求我輸入用戶密碼。問題是什麽?我該如何解決?

我應該注意用戶是這樣創建的

adduser --system --disabled-login [username]

如果有什麽不同的話……歎息。

最佳方法

This answer should still help you, even taking the edits to the question into account. In particular, an account created with --disabled-login has no password set and no other means of logging in, but it should still be possible to use sudo (explained below) to run commands or a shell as the user. This is, in fact, how the root account is set up in Ubuntu.

命令 su - irssi 存在多個問題。

此命令嘗試啟動名為 irssi 的用戶擁有的 shell。

如果出現以下情況,它將失敗:

  • 沒有 irssi 用戶。

  • irssi 用戶的帳戶被禁用。

  • irssi 用戶的帳戶已禁用交互式登錄。有時,允許帳戶使用 FTP 等服務,但通過將其 shell 設置為立即退出的內容(如 /bin/false )來禁止其正常登錄。然後登錄立即結束,沒有任何消息。

  • 您輸入的密碼對於 irssi 用戶不正確。

- 標誌使得 shell 模擬了一個初始登錄 shell——也就是說,它真的很像以 irssi 登錄。如果沒有 - 標誌,如果 su 命令成功,您仍然會獲得 irssi 擁有的 shell ,但 HOME 等環境變量將保持不變。

如果您想運行名為 irssi 的程序,則必須以不同的方式調用 su

su username - -c irssi

如果您省略 -c username ,則它與 -c root 相同 – 它嘗試以 root 身份運行命令。

或者,您可以啟動一個 shell,然後運行以下命令:

  1. 使用 su username - 啟動 shell。

  2. 在 shell 中,運行命令 ( irssi )。

  3. 如果完成,請運行 exit 離開 shell。

root 運行命令

如果您想將 irssi 作為 root 運行,則 su 不是這樣做的方法。根登錄是 disabled by default on Ubuntu, and there is only rarely any reason to re-enable them 。如果您啟用了 root 登錄,那麽您應該可以使用 su 成為 root 。無需啟用 root 帳戶的原因是,無論您是否啟用,您仍然可以使用 rootsudo 運行命令。

當您使用 sudo 運行命令時,輸入您的密碼,而不是您希望運行命令的用戶的密碼。隻有管​​理員可以使用 rootsudo 運行任意命令(當然,除非您重新配置 sudo 以允許其他人這樣做)。因此,不允許管理係統的用戶使用自己的密碼以 root 的身份運行命令。

使用 sudoirssi 作為 root 運行:

sudo irssi

你會在提示時輸入你的密碼,而不是 root 的。

除了您輸入的密碼外,這與以下內容相同:

su -c irssi

除了 sudo 版本可以成功,因為它不需要啟用 root 帳戶。

su 一樣,您可以使用 sudo 作為另一個非 root 用戶運行命令。使用 sudoirssi 作為 username 運行:

sudo -u username irssi

如果您希望 sudoHOME 方麵表現得像 su - ——也就是說,您想使用目標用戶的 HOME 環境變量,您可以使用 -H 標誌運行 sudo

sudo -H irssi
sudo -H -u username irssi

您可以使用 sudo 啟動整個 shell,就像使用 su 一樣。除了輸入誰的密碼外,此命令與 su 的效果相同:

sudo -s

此命令與 su - 具有相同的效果:

sudo -i

(i 代表初始登錄 shell。)

您也可以以其他用戶身份啟動 shell:

sudo -u username -s
sudo -u username -i

進一步閱讀 sudo

要了解有關 sudo 的更多信息,請查看:

為什麽 gksu 不工作而 su 工作?

gksu 可能通過運行 sudo 來工作。

gksususudo 的前端。在 Ubuntu 中,它默認使用 sudo (因為在 Ubuntu 中,su 通常不用於成為 root ,而隻是成為其他非 root 用戶的次要方式)。

您可以通過運行 gksu --su-mode 使 gksu 使用 su 作為前端。

您可以通過運行 gksu-properties 來確定 gksu 是處於 su 模式還是 sudo 模式,並且(如果您願意)更改此設置。這是一個 per-user 設置。

gksu 處於 sudo 模式時,它的行為與 gksudo 相同。

進一步閱讀 gksu


Post-Solution 分析

您最終發現您能夠使用以下命令運行必要的命令:

sudo -u username irssi

(這是上麵列出的技術。)

最終,您報告了兩條信息,足以解釋為什麽其他技術失敗了,但成功了:

  1. username 帳戶是使用 --disabled-login 標誌創建的,這使得它沒有密碼(也沒有其他登錄方式)。沒有密碼並不意味著可以使用空白密碼登錄。這意味著沒有密碼足以進行身份​​驗證。結合其他身份驗證方式的消除,這意味著 username 根本無法進行身份驗證。

    因此,所有基於 su 的解決方案都已淘汰。但是 sudo 可以工作,因為使用 sudo 您不會以您將要模擬的用戶身份進行身份驗證。相反,您必須是 authorized 才能冒充他們,並以您自己的身份進行身份驗證(即輸入您自己的密碼,而不是他們的密碼)。

    可以在帳戶上設置密碼,從而消除登錄障礙:

    sudo passwd username

    但是,不允許用戶登錄可能是有充分理由的。例如,如果允許該用戶登錄並以圖形方式登錄,那麽用戶的環境或權限不適合運行 X11 應用程序是否會出現不好的問題?如果該用戶可以登錄,是否可以以該用戶的身份遠程登錄(對於您已公開網絡服務的機器)?

    如果你想 re-disable 它:

    sudo passwd -dl username

    相關:Re-disabling 臨時啟用後的 root 帳戶。

  2. username 帳戶將 /bin/false 作為其登錄 shell。

    當像 bash 這樣的 shell 作為您的登錄 shell 運行時,它會設置您的環境並為您提供控製機器的交互式提示。

    另一方麵,當 /bin/false 運行時,它什麽也不做,並報告失敗。 ( /bin/true 什麽都不做並報告成功。)

    falsetrue 命令在腳本編寫和各種測試目的中很有用,但也可用於禁用帳戶,以便當有人登錄時,他們的登錄會話立即結束。這樣,可以啟用密碼(或其他身份驗證方式),並且人們可以登錄,但不能用於 shell 訪問。例如,如果有 FTP 服務器,他們仍然可以通過 FTP 訪問他們的帳戶。如果有 SSH 服務器,他們將無法通過 SSH 獲取 shell,但他們仍然可以使用 sftpscp 傳輸文件。

    由於 username 的登錄 shell 不起作用,因此 su usernamesu - usernamesudo -u username -ssudo -u username -i 等命令無法工作。

    但是不提供 shell 的命令,如 sudo -u username commandsu username -c 'command' 仍然可以工作。

    由於可以運行命令,因此您可以將用戶的登錄 shell 更改為功能:

    sudo chsh -s /bin/bash username

    但是,這也應該謹慎進行,因為可能有充分的理由禁用用戶的交互式登錄。

在這裏,username 都禁用了密碼和 “disabled” shell。沒有任何工作密碼會阻止所有基於 su 的解決方案工作,而沒有工作的交互式登錄 shell 會阻止所有 shell-spawning 解決方案工作(除了手動調用 shell,如 sudo -u username bash )。

sudo -u username command 是剩下的。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/12555.html,未經允許,請勿轉載。