如何在一个终端上的用户之间切换?


Answers:


560

使用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如果已安装并且您有权使用它,则可能是最简单的。


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

echo >>/dev/stderr在使用进行登录时执行此命令后,出现“ -su:/ dev / stderr:权限被拒绝”错误su --login ...,提示?我发现这个BTW unix.stackexchange.com/questions/38538/...
水瓶座电

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

一个发现,当我列出env它时,发现一切都井井有条,而且可以目视检查。一件事是不正确的: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on 〜/ .Xauthority`文件是:-rw-------。我做了一个副本,然后让我运行gedit作为实验。

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

46

通常,您可以使用sudo所需的用户身份来启动新的shell。该-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年

好的,普拉特回答了一个
tshepang 2010年

4
sudo -s给您一个shell susudo -i模拟登录su --u $user当然可以结合使用。
短暂

效率更高。能够以通常无法登录的用户身份“登录”是一项巨大的财富。完全让我没有与权限或SELinux的梅辛运行一个数据库实例
费利克斯·加侬-格尼尔

20
$ whoami 

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

$ su secondUser
Password:

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


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

15

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

sudo su - username

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


8

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

$ |#exec su-[用户名]

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

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



2

另一种方法是以其他(非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脚本为数十个节点守护进程。


2

让我们正确地说:您以UserA身份登录,并希望以UserB身份“登录”以运行一些命令,但是希望在完成后返回UserA。为了简单起见,我假设您要以UserB身份运行ls -l / tmp。如果你希望留下用户A的当前shell而是运行一个命令,用户B和仍保持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并返回您的登录名。



-1
~$ sudo login

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

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


2
问题是关于以其他用户身份登录。
Minix 2015年
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.