我正在尝试使用 su 命令以另一个用户身份运行应用程序
在这种情况下,我正在尝试运行 irssi
blah@ubuntu: su - [username] irssi
(enter password)
blah@ubuntu:
(nothing happens)
blah@ubuntu: su - [username] -c irssi
(nothing)
Run Code Online (Sandbox Code Playgroud)
我运行 gksu 并设置相同的参数,它可以工作,并且不会询问我的用户密码。问题是什么?我该如何解决?
我应该注意到用户是这样创建的
adduser --system --disabled-login [username]
Run Code Online (Sandbox Code Playgroud)
如果它有任何区别....叹息。
Eli*_*gan 30
这个答案应该仍然对你有帮助,即使考虑到对问题的编辑。特别是,创建的帐户
--disabled-login没有设置密码,也没有其他登录方式,但仍然可以使用sudo(如下所述)以用户身份运行命令或 shell。实际上,这就是root在 Ubuntu 中设置帐户的方式。
su - irssi。此命令尝试启动一个名为的用户拥有的 shellirssi。
如果出现以下情况,它将失败:
irssi用户。irssi用户的帐户将被禁用。irssi用户的帐户进行交互式登录禁用。有时,允许帐户使用 FTP 等服务,但通过将其 shell 设置为立即退出的内容(例如/bin/false. 然后登录立即结束,没有消息。irssi用户不正确。该-标志使外壳程序模拟初始登录外壳程序——也就是说,它真的很像以irssi. 如果没有-标志,如果su命令成功,您仍然会得到一个由 拥有的外壳irssi,但环境变量 likeHOME将保持不变。
如果您想运行名为 的程序irssi,则必须以su不同方式调用:
su username - -c irssiRun Code Online (Sandbox Code Playgroud)
如果您省略,则与--it 尝试以 root 身份运行命令相同。-c username-c root
或者,您可以启动一个 shell,然后运行以下命令:
su username -irssi)。exit.root如果你想运行irssi的root,su是不是这样做的方式。在 Ubuntu 上默认禁用root 登录,并且很少有任何理由重新启用它们。如果您启用了root登录,那么您应该可以使用su成为root. 这是不必要的,使的原因root帐户是,你是否这样做,你仍然可以运行命令,root与sudo.
当您使用 运行命令时sudo,您输入的是您的密码,而不是您希望运行命令的用户的密码。只有管理员可以像rootwith一样运行任意命令sudo(当然,除非您重新配置sudo以允许其他人这样做)。因此,不允许管理系统的用户不能像root使用自己的密码一样运行命令。
要运行irssi的root有sudo:
sudo irssi
Run Code Online (Sandbox Code Playgroud)
并且您将在提示时输入您的密码,而不是root's。
除了您输入的密码外,这与以下内容相同:
su -c irssi
Run Code Online (Sandbox Code Playgroud)
除非sudo版本可以成功,因为它不需要root启用帐户。
与 一样su,您可以使用sudo以另一个非root用户身份运行命令。要运行irssi的username有sudo:
sudo -u username irssiRun Code Online (Sandbox Code Playgroud)
如果你想sudo 表现得像个su -相对于HOME凹口-是,你要使用的目标用户的HOME环境变量,你可以运行sudo与-H标志:
sudo -H irssi
Run Code Online (Sandbox Code Playgroud)
sudo -H -u username irssiRun Code Online (Sandbox Code Playgroud)
您可以使用 启动整个外壳sudo,就像使用su. 除了您输入的密码外,此命令与以下效果相同su:
sudo -s
Run Code Online (Sandbox Code Playgroud)
此命令具有与以下相同的效果su -:
sudo -i
Run Code Online (Sandbox Code Playgroud)
(i代表初始登录外壳。)
您也可以以其他用户身份启动 shell:
sudo -u username -sRun Code Online (Sandbox Code Playgroud)
sudo -u username -iRun Code Online (Sandbox Code Playgroud)
sudo要了解有关 的更多信息sudo,请查看:
gksu有效su而无效?gksu可能通过运行工作sudo。
gksu是一个前端都 su和sudo。在 Ubuntu 中,它默认为 using sudo(因为在 Ubuntu 中,su通常不用于成为root,并且只是成为其他非root用户的次要方式)。
您可以通过运行gksu将其su用作前端gksu --su-mode。
你可以找出是否gksu是su模式或sudo模式,并且(如果你愿意的话)更改此设置,通过运行gksu-properties。这是每个用户的设置。
当gksu处于sudo模式时,它的行为与 相同gksudo。
gksusudo”。man gksugksu网站(由 的制造商提供gksu)。gksuvs.gksudo的。您最终发现您可以使用以下命令运行必要的命令:
sudo -u username irssiRun Code Online (Sandbox Code Playgroud)
(这是上面列出的技术。)
最终,你报告了两条信息,足以解释为什么其他技术失败了,但成功了:
该username帐户是使用--disabled-login标志创建的,这使得它没有密码(也没有其他登录方式)。没有密码并不意味着可以使用空白密码登录。这意味着没有密码就足以进行身份验证。结合消除其他身份验证方式,这种方式username根本无法进行身份验证。
所以su基于所有的解决方案已经过时了。sudo可以工作,因为sudo您不会以您将要冒充的用户身份进行身份验证。相反,您必须获得授权才能模拟他们,并且您以自己的身份进行身份验证(即,输入您自己的密码,而不是他们的密码)。
可以在帐户上设置密码,从而消除登录障碍:
sudo passwd usernameRun Code Online (Sandbox Code Playgroud)
然而,可能有一个很好的理由不允许用户登录。例如,如果允许此用户登录,并以图形方式登录,那么用户的环境或权限是否不适合运行 X11 应用程序会导致不良问题? 如果此用户可以登录,是否可以以该用户身份远程登录(对于您已公开网络服务的计算机)?
如果您想重新禁用它:
sudo passwd -dl usernameRun Code Online (Sandbox Code Playgroud)
该username帐户具有/bin/false作为其登录外壳。
当 shell 像bash您的登录shell 一样运行时,它会设置您的环境并为您提供一个交互式提示来控制机器。
/bin/false另一方面,当运行时,它什么都不做,并报告失败。(/bin/true什么都不做并报告成功。)
该false和true命令在脚本非常有用和各种测试的目的,同时也为禁用一个帐户,以便在时,他们的登录会话立即结束别人的日志。这样,可以启用密码(或其他身份验证方式),并且人们可以登录,而不是shell 访问。例如,如果有 FTP 服务器,他们仍然可以通过 FTP 访问他们的帐户。如果有 SSH 服务器,他们将无法通过 SSH 获得 shell,但他们仍然可以使用sftp和scp传输文件。
由于username的登录shell是不起作用的命令一样,,,和无法工作。su usernamesu - usernamesudo -u username -ssudo -u username -i
但是不提供外壳的命令,例如或仍然可以工作。sudo -u username commandsu username -c 'command'
由于可以运行命令,您可以将用户的登录 shell 更改为某些功能:
sudo chsh -s /bin/bash usernameRun Code Online (Sandbox Code Playgroud)
但是,这也应该谨慎进行,因为可能有充分的理由禁用用户的交互式登录。
在这里,username两者都禁用了密码和“禁用”shell。没有任何有效密码会阻止su基于all的解决方案工作,而没有有效的交互式登录 shell 会阻止所有生成 shell 的解决方案工作(手动调用 shell 除外,例如)。sudo -u username bash
sudo -u username command 剩下的是什么。
| 归档时间: |
|
| 查看次数: |
48346 次 |
| 最近记录: |