如何以登录被禁用的用户身份运行命令?

如何以登录被禁用的用户身份运行命令?

我正在尝试使用 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]

如果有任何区别......叹息。

答案1

即使考虑到对问题的编辑,这个答案仍然应该对你有帮助。特别是,使用创建的帐户 --disabled-login没有设置密码,也没有其他方式在登录,但仍可以使用sudo(如下所述)以用户身份运行命令或 shell。事实上,这就是 root在 Ubuntu 中设置帐户的方式。

该命令存在多个问题su - irssi

此命令尝试启动 shell拥有名为irssi

如果发生以下情况,它将失败:

  • 没有irssi用户。
  • irssi用户的帐户已被禁用。
  • 用户irssi的帐户被禁用,无法进行交互式登录。有时,帐户被允许使用 FTP 等服务,但通过将 shell 设置为立即退出的命令(如 )来禁止正常登录/bin/false。然后登录立即结束,没有任何消息。
  • 您输入的密码对于用户来说不正确irssi

-标志使得 shell 模拟初始登录 shell——也就是说,它实际上非常类似于以 身份登录irssi。如果没有该-标志,如果su命令成功执行,您仍然会获得 拥有的 shell irssi,但环境变量HOME将保持不变。

如果你想运行一个程序称为 irssi,则必须以su不同的方式调用:

su username - -c irssi

如果你省略,它的作用相同——它会尝试以 root 身份运行该命令。-c username-c root

或者你可以启动 shell 然后运行命令

  1. 使用 启动 shell 。su username -
  2. 在 shell 中,运行命令 ( irssi)。
  3. 如果你已完成,请运行 退出 shell exit

运行命令root

如果你想以irssi身份运行rootsu这不是办法。root 登录是在 Ubuntu 上默认禁用,并且很少有理由重新启用它们。如果您已启用root登录,那么您应该能够使用su成为root。无需启用该帐户的原因root是,无论是否启用,您仍然可以像root使用一样运行命令sudo

当您使用 运行命令时sudo,您输入你的密码,不是您希望以其身份运行命令的用户的密码。只有管​​理员可以像 一样运行任意命令root(当然sudo,除非您重新配置sudo以允许其他人这样做)。因此,未获准管理系统的用户不得使用root自己的密码像 一样运行命令。

运行方式irssi如下:rootsudo

sudo irssi

你会进入你的提示时输入密码,而不是root

除了您输入的密码外,它还执行与以下内容相同的操作:

su -c irssi

但该sudo版本可以成功,因为它不需要root启用帐户。

和 一样su,你可以sudo使用以另一个非root用户身份运行命令irssi.以以下身份运行usernamesudo

sudo -u username irssi

如果你想sudo 表现su -得像HOME——也就是说,您想使用目标用户的HOME环境变量,您可以sudo使用该-H标志运行:

sudo -H irssi
sudo -H -u username irssi

您可以使用 启动整个 shell sudo,就像使用 一样su。除了您输入的密码不同之外,此命令与 具有相同的效果su

sudo -s

此命令与下列命令效果相同su -

sudo -i

i代表初始登录 shell

您也可以以另一个用户的身份启动 shell:

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

进一步阅读sudo

要了解更多信息sudo, 看一眼:

为什么没gksu起作用呢?su

gksu可能有效通过运行sudo

gksu是一个前端两个都 susudo。在 Ubuntu 中,它默认使用sudo(因为在 Ubuntu 中,su通常不用于成为root,而只是成为其他非root用户的次要方式)。

您可以通过运行来将gksu其用作su前端gksu --su-mode

您可以通过运行 来了解 是否gksu处于su模式或sudo模式,并且(如果您愿意)更改此设置gksu-properties。这是每个用户的设置。

gksu处于sudo模式时,其行为与 相同gksudo

进一步阅读gksu


解决方案后分析

您最终发现,您可以使用以下命令运行必要的命令:

sudo -u username irssi

(这是上面列出的技术之一。)

最终,您报告了两条信息,足以解释为什么其他技术失败了,而这个技术却成功了:

  1. username帐户创建时带有--disabled-login标志,这使得它具有没有密码(并且没有其他登录方式)。没有密码并不意味着可以使用空白密码。 它的意思是没有密码足以进行身份​​验证。结合消除其他身份验证手段,这意味着username根本无法进行身份验证。

    因此,所有su基于 的解决方案都行不通。sudo但是,由于sudo您没有以您要冒充的用户的身份进行身份验证,因此您必须已授权冒充他们,并以您自己的身份进行身份验证(即输入您自己的密码,而不是他们的密码)。

    可以为帐户设置密码,从而消除登录障碍:

    sudo passwd username

    但是,不允许用户登录可能有充分的理由。例如,如果允许此用户登录并以图形方式登录,那么用户的环境或权限是否不适合运行 X11 应用程序,这是否会导致严重问题?如果此用户可以登录,那么是否可以以该用户身份远程登录(对于已公开网络服务的计算机)?

    如果您想重新禁用它:

    sudo passwd -dl username

    有关的:root暂时启用该帐户后重新禁用它。

  2. username帐户有/bin/false其登录 shell。

    当像这样的 shellbash作为您的登录 shell 运行时,它会设置您的环境并为您提供一个交互式提示来控制机器。

    /bin/false另一方面,当运行时什么也没做, 和报告失败. (/bin/true不执行任何操作并报告成功。)

    false和命令true在编写脚本和进行各种测试时很有用,但也可用于禁用帐户,以便当有人登录时,他们的登录会话立即结束。这样,就可以启用密码(或其他身份验证方式),人们可以登录,但不能外壳访问。例如,如果有 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均已禁用密码“已禁用” shell。由于缺少有效的密码,所有su基于 的解决方案都无法工作,而由于缺少有效的交互式登录 shell,所有基于 shell 的解决方案都无法工作(手动调用 shell 除外,如)。sudo -u username bash

sudo -u username command是剩下的。

相关内容