我想以其他用户身份登录而不注销当前用户(在同一终端上)。我该怎么办?

评论

我问了类似的问题,因为我遇到了XDG环境变量(特别是$ XDG_RUNTIME_DIR)的问题,这些问题使我发疯。 -> unix.stackexchange.com/questions/354826 / ...

#1 楼

如何使用su命令?

$ whoami
user1
$ su - user2
Password:
$ whoami
user2
$ exit
logout


如果要以root用户身份登录,则无需指定用户名:

$ whoami
user1
$ su -
Password:
$ whoami
root
$ exit
logout


通常,您可以使用sudo以所需的用户身份启动新的shell; -u标志可让您指定所需的用户名:

$ whoami
user1
$ sudo -u user2 zsh
$ whoami
user2


如果您没有sudo访问权限,则还有更多circuit回方式,例如ssh username @ localhost,但sudo如果已安装并且您有权使用它,则它可能是最简单的。

评论


另外,su-[user]可能有用-多余的破折号为您提供了登录shell。

–短暂
2010-10-27 20:40

在使用su --login登录时执行此命令echo >> / dev / stderr后,出现此错误“ -su:/ dev / stderr:权限被拒绝”。我发现这个顺便说一句unix.stackexchange.com/questions/38538 / ...

–水瓶座力量
2014年11月24日18:58



这是否使每个新用户都有不同的环境变量替代值?例如用于工作,开源等的git config

–凯文·索特尔
15年12月23日在21:13

一个发现,当我列出环境时,发现一切都井井有条,而且可以目视检查。一件事是不正确的:XAUTHORITY = / home / user1 / .Xauthority'。不确定_为什么_?因此X窗口默认情况下不起作用,因为〜/ .Xauthority`文件上的保护为:-rw -------。我做了一个副本,然后让我运行gedit作为实验。

–将
15/12/26在11:47

如果收到“此帐户当前不可用”:su -s / bin / bash-www-data

–max4ever
19 Mar 15 '19 at 12:19

#2 楼

通常,您使用sudo以所需的用户身份启动新的外壳程序; -u标志可让您指定所需的用户名:

[mrozekma@etudes-1 ~] % whoami
mrozekma
[mrozekma@etudes-1 ~] % sudo -u nobody zsh
[nobody@etudes-1 ~] % whoami
nobody


如果您没有sudo访问权限,则还有更多circuit回方式,例如ssh username@localhost,但我认为sudo是如果已安装并且您有权使用它,则可能是最简单的方法

评论


如果我的系统既没有ssh服务器也没有sudo怎么办?你能在答案中提到那部分吗?

– tshepang
2010-10-27 19:52



好吧,普拉特回答说

– tshepang
10-10-27在20:01

sudo -s为您提供了一个像su这样的外壳,sudo -i模拟了像su-这样的登录。可以与-u $ user结合使用。

–短暂
2010-10-27 20:41



效率更高。能够以通常无法登录的用户身份“登录”是一项巨大的财富。完全允许我运行数据库实例而不会弄乱权限或selinux

–FélixGagnon-Grenier
16-10-12在15:01



#3 楼

$ whoami 


此命令将打印当前用户。要更改用户,我们将必须使用此命令(随后输入用户密码):

$ su secondUser
Password:


输入正确的密码后,您将以指定的身份登录用户(您可以通过重新运行whoami进行检查。

评论


如果您不懂事,就很有用。

–马可·苏拉(Marco Sulla)
15年6月24日在8:55

更好地真实测试密码(避免sudo)或新用户的行为。

– Peter Krauss
5月30日17:46

#4 楼

如果您正在运行Ubuntu,并且您要登录的用户没有设置密码:

sudo su - username


输入您自己的密码,则应设置为。当然,这要求您的用户有权使用sudo获得root特权。

#5 楼

要将终端会话切换到其他用户(该用户不能退出原来的用户),请使用exec:


$ |#exec su-[用户名]


从技术上讲,这将在新的任期过程中登录新用户,并关闭当前用户。这样,当用户尝试退出或按Ctrl-D时,终端将关闭,就好像该用户是实例化该终端的用户一样,即,用户无法退出到原始用户的术语中。毫无意义,考虑到他们仍然可以开始新的终端会话并自动使用原始用户名登录,但是确实如此。

编辑:
对于它的价值,您可以默认情况下,在〜/ .bashrc中使用linux vlock命令锁定终端会话,需要使用术语会话用户的密码来解锁。如果未使用已配置的用户非默认〜/ .bashrc实例化该术语,则在某种程度上可以防止上述术语在原始用户上下文中重新启动。

评论


当您使用SSH连接并且希望将现有连接“交给”另一个用户而无需重新连接时,使用exec是一个很好的用例。我想知道在这方面是否存在安全漏洞。

–叶提
1月5日21:12

这是一个直接的流程分支;除了环境变量和路径外,新进程不应继承任何东西!哦,可能还有ssh-agent。 Envars和ssh-agent密钥环可能令人担忧!

– SYANiDE
1月13日21:18

#6 楼

sudo -iu <your_username>对我有用吗

#7 楼

还有另一种方法是以其他(非root)用户身份启动新的shell,以该用户身份运行命令。

ubuntu@aws-ip:~$ sudo -u mongodb bash          #<-- or zsh, etc... 
mongodb@aws-ip:~$ mongod --configsvr --dbpath /data/configdb --fork


mongodb用户就是一个例子。部署分片的MongoDB集群时,所有必需的进程都必须以mongodb运行,并且不必(或完全方便)使用init脚本来为数十个节点守护进程。

#8 楼

让我们正确地说:您以UserA身份登录,并希望以UserB身份“登录”以运行一些命令,但是希望在完成后返回UserA。为了简单起见,我假设您要以UserB身份运行ls -l / tmp。如果您不想离开UserA的当前外壳,而是以UserB身份运行命令并仍然以UserA身份登录,则应执行以下操作:

su - UserB -c "ls -l /tmp"   <-- Just an example


此假设您知道UserB的密码。但是,如果您不知道UserB的密码,则需要知道root密码。然后:

sudo su - UserB -c "ls -l /tmp"   <-- UserB's pw not needed here


如果您希望临时以UserB身份登录以运行许多命令,则只需执行以下操作:

sudo su - UserB


这将为您提供UserB的新外壳(通过输入id进行检查)。完成后,您可以执行ctrl-d并返回您的登录名。

#9 楼

如果只需要运行一个命令,则可以使用sudo:
sudo -u username command

#10 楼

~$ sudo login


,然后它会提示您输入sudo密码(当前登录的用户密码)。

另外:确保当前用户在sudoers文件中!

评论


问题是关于以其他用户身份登录。

– Minix
2015年5月27日15:38