当前位置: 首页>>技术教程>>正文


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/article/12555.html,未经允许,请勿转载。