即使将问题的编辑考虑在内,此答案仍应为您提供帮助。特别是,创建的帐户
--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用户身份运行命令相同。
或者,您可以启动外壳程序,然后运行以下命令:
- 用以下命令启动外壳
su username -
。
- 在外壳中,运行命令(
irssi
)。
- 完成后,通过运行离开外壳
exit
。
运行命令为 root
如果你想运行irssi
的root
,su
是不是这样做的方式。默认情况下, root登录在Ubuntu上是禁用的,并且很少有理由重新启用它们。如果您启用了root
登录,那么您应该可以使用su
成为root
。这是不必要的,使的原因root
帐户是,你是否这样做,你仍然可以运行命令,root
用sudo
。
当您使用来运行命令时sudo
,您输入的是密码,而不是您希望运行该命令的用户的密码。只有管理员可以为运行任意命令root
用sudo
(除非你重新配置sudo
,让其他人这样做,当然)。因此,不允许管理系统的用户root
使用自己的密码运行命令。
要运行irssi
的root
有sudo
:
sudo irssi
你可以输入你的提示时的密码,不是root
的。
除了您输入的密码外,这与以下操作相同:
su -c irssi
除了sudo
版本可以成功,因为它不需要root
启用帐户。
与一样su
,您可以使用另一个非用户sudo
身份运行命令root
。要运行irssi
的username
有sudo
:
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
是一个前端都 su
和sudo
。在Ubuntu中,它默认为使用sudo
(因为在Ubuntu中,su
通常不用于成为root
,它只是成为其他非root
用户的第二种方式)。
您可以gksu
使用su
运行作为前端gksu --su-mode
。
您可以通过运行以下命令来确定gksu
是处于su
模式还是sudo
模式,并(如果需要)更改此设置gksu-properties
。这是每个用户的设置。
当gksu
处于sudo
模式时,它的行为一样gksudo
。
继续阅读 gksu
溶液后分析
您最终发现可以使用以下命令运行必要的命令:
sudo -u username irssi
(以上列出的技术中的一种。)
最终,您报告了两条信息,这些信息足以解释为什么其他技术失败了,但是成功了:
该username
帐户是使用该--disabled-login
标志创建的,因此该帐户没有密码(也没有其他登录方式)。没有密码并不意味着可以使用空白密码登录。这意味着没有足够的密码来进行身份验证。结合消除其他身份验证方法,该方法username
根本无法进行身份验证。
因此,所有su
基于解决方案的解决方案均已淘汰。sudo
之所以可以正常工作,是因为sudo
您没有身份验证您将要假冒的用户。相反,您必须获得授权模拟它们,然后以您自己的身份进行身份验证(即,输入您自己的密码,而不是密码)。
可以在帐户上设置密码,这消除了登录的障碍:
sudo passwd username
但是,可能有一个很好的理由,不允许该用户登录。例如,如果允许该用户登录并以图形方式登录,则会由于用户的环境或权限不适合运行X11应用而引起严重问题?如果该用户可以登录,这是否有可能以该用户身份远程登录(对于已公开网络服务的计算机)?
如果您想重新禁用它:
sudo passwd -dl username
相关:临时启用帐户后,请重新禁用该root
帐户。
该username
帐户具有/bin/false
其登录外壳。
当像shell这样的shell bash
作为您的登录shell运行时,它会设置您的环境并为您提供一个交互式提示,用以控制计算机。
当/bin/false
运行,而另一方面,它什么都不做,并报告故障。(/bin/true
不执行任何操作并报告成功。)
该false
和true
命令在脚本非常有用和各种测试的目的,同时也为禁用一个帐户,以便在时,他们的登录会话立即结束别人的日志。这样,就可以启用密码(或其他身份验证方式),并且人们可以登录,而无需访问shell。例如,如果有一个FTP服务器,他们仍然可以通过FTP访问其帐户。如果有SSH服务器,他们将无法通过SSH获取外壳程序,但仍可以使用sftp
和scp
传输文件。
由于username
的登录shell是不起作用的命令一样,,,和无法工作。su username
su - username
sudo -u username -s
sudo -u username -i
但是没有外壳的命令,例如orsudo -u username command
su 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
剩下的就是。