我在 WSL2 环境中添加了一个用户(用户 2),然后想将该用户 2 的主目录更改为其他目录。但肯定出了问题。
$ usermod -d /var/lib/app1 user2
usermod: no changes
$ vim /etc/passwd
user2:x:1001:1001::/var/lib/app1:/bin/sh
$ sudo su user2
/var/lib/app1
但事实并非如此/home/abc
。
我在这里遗漏了什么?
答案1
这是预期的行为。su
默认情况下不会更改工作目录。它只切换用户。根据su
手册页:
为了向后兼容,
su
默认不更改当前目录,只设置环境变量HOME
和SHELL
(USER
如果LOGNAME
目标用户不是 root 用户)。
su
确实改变了用户,$HOME
但没有改变cd
该用户的$HOME
。
例如,我有 2 个用户,kulfy
。BASHkulfy1
是前一个用户的默认 shell,而 sh(指向 DASH 的符号链接)是后一个用户的默认 shell。
kulfy@leo:~$ echo $HOME
/home/kulfy
kulfy@leo:~$ sudo su kulfy1
$ echo $USER
kulfy1 # User changed
$ pwd
/home/kulfy # but directory didn't change
$ echo $HOME
/home/kulfy1 # and HOME variable now points to the HOME of user2, i.e., kulfy1
要更改目录,您可以使用--login
或简单地-
使用su
。来自手册页:
-
,-l
,--login
以登录 shell 的形式启动 shell,其环境与真实登录类似:o 清除所有环境变量,除了
TERM
以及由指定的变量--whitelist-environment
o 初始化环境变量
HOME
,SHELL
,USER
,LOGNAME
, 和PATH
o 更改目标用户的主目录
o 将 shell 的 argv[0] 设置为 '-',以使该 shell 成为登录 shell
kulfy@leo:~$ sudo su --login kulfy1
$ echo $USER
kulfy1
$ pwd
/home/kulfy1 # directory changed automatically
$ echo $HOME
/home/kulfy1