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


21

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

如果有什么不同...。


您是否忘记了-c标志来启动irssi?(su -c irssi)
eephyne

也尝试过...尝试了上千种内容...为什么如此难以运行,因为WTF正是手册页所希望的...但是什么都没发生grrrr
user123361 2013年

可能只是irssi有问题并且su命令有效吗?
Nanne

“用户名”是否具有运行irssi的适当权利?
多卡

Answers:


28

即使将问题的编辑考虑在内,此答案仍应为您提供帮助。特别是,创建的帐户 --disabled-login没有设置密码,也没有其他登录方式,但是仍然可以使用sudo(下面说明)以用户身份运行命令或Shell。实际上,这就是 root在Ubuntu中设置帐户的方式。

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

此命令尝试启动名为的用户拥有的外壳irssi

如果出现以下情况,它将失败:

  • 没有 irssi用户。
  • irssi用户的帐户将被禁用。
  • irssi用户的帐户被禁用以进行交互式登录。有时,允许帐户使用FTP之类的服务,但通过将其shell设置为立即退出的内容(例如)来禁止其正常登录/bin/false。然后,登录立即结束,没有任何消息。
  • 您输入的密码不正确irssi

-标志使它能够使shell模拟一个初始登录shell,也就是说,它实际上非常类似于as的登录irssi。没有该-标志,如果su命令成功执行,您仍将拥有的shell irssi,但是像HOME这样的环境变量将保持不变。

如果您想运行名为 的程序irssi,则必须以其他方式调用su

su username - -c irssi

如果省略,则与-c username-c root -尝试以root用户身份运行命令相同。

或者,您可以启动外壳程序,然后运行以下命令

  1. 用以下命令启动外壳 su username -
  2. 在外壳中,运行命令(irssi)。
  3. 完成后,通过运行离开外壳exit

运行命令为 root

如果你想运行irssirootsu是不是这样做的方式。默认情况下, root登录在Ubuntu上禁用的,并且很少有理由重新启用它们。如果您启用了root登录,那么您应该可以使用su成为root。这是不必要的,使的原因root帐户是,你是否这样做,你仍然可以运行命令,rootsudo

当您使用来运行命令时sudo,您输入的是密码,而不是您希望运行该命令的用户的密码。只有管理员可以为运行任意命令rootsudo(除非你重新配置sudo,让其他人这样做,当然)。因此,不允许管理系统的用户root使用自己的密码运行命令。

要运行irssirootsudo

sudo irssi

你可以输入你的提示时的密码,不是root的。

除了您输入的密码外,这与以下操作相同:

su -c irssi

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

与一样su,您可以使用另一个非用户sudo身份运行命令root。要运行irssiusernamesudo

sudo -u username irssi

如果要sudo 表现出su -HOME - 一样的行为,即要使用目标用户的HOME环境变量,可以sudo使用以下-H标志运行:

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工作

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这样的shell bash作为您的登录shell运行时,它会设置您的环境并为您提供一个交互式提示,用以控制计算机。

    /bin/false运行,而另一方面,它什么都不做,并报告故障。(/bin/true不执行任何操作并报告成功。)

    falsetrue命令在脚本非常有用和各种测试的目的,同时也为禁用一个帐户,以便在时,他们的登录会话立即结束别人的日志。这样,就可以启用密码(或其他身份验证方式),并且人们可以登录,而无需访问shell。例如,如果有一个FTP服务器,他们仍然可以通过FTP访问其帐户。如果有SSH服务器,他们将无法通过SSH获取外壳程序,但仍可以使用sftpscp传输文件。

    由于username的登录shell是不起作用的命令一样,,,和无法工作。su usernamesu - usernamesudo -u username -ssudo -u username -i

    但是没有外壳的命令,例如orsudo -u username commandsu username -c 'command'仍然可以正常工作。

    由于可以运行命令,因此您可以将用户的登录shell更改为可运行的功能:

    sudo chsh -s /bin/bash username

    但是,这也应谨慎行事,因为可能有充分的理由为用户禁用交互式登录。

在这里,username两个都禁用了密码 “ disabled” shell。缺少任何有效的密码会阻止所有su基于基础的解决方案正常工作,而缺少有效的交互式登录shell则会阻止所有产生于shell的解决方案正常工作(除非手动调用shell,如)。sudo -u username bash

sudo -u username command 剩下的就是。


很抱歉,您正在处理答案。哇。谢谢。当我执行cat / etc / passwd时,我配置的用户最后有/ bin / false -这是什么导致它失败?任何想法如何解决?
user123361 2013年

无论出于何种原因,使用sudo -u username irssi都可以。感谢您冗长而详尽的答案!
user123361 2013年

@db我很高兴它起作用了!(顺便说一句,无需道歉进行编辑,编辑非常非常好,并且由于编辑的结果,您的问题也可能对更多其他人有用。)至于您的其他问题,我已经将我的回答编辑为最后包括一个分析部分。
伊利亚·卡根
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.