为什么所有用户在 su 作为 root 后都在 /root 而不是他们的主目录中启动?

为什么所有用户在 su 作为 root 后都在 /root 而不是他们的主目录中启动?

我觉得这应该很简单,但我从未见过有人问过这个问题。情况相当简单。每当我成为用户时,它su user总是从 /root 目录而不是主目录开始。让我给你演示一下。

[root@st-test2 ~]# grep "postgres" /etc/passwd
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql/:/bin/bash
[root@st-test2 ~]# su postgres
bash-4.2$ pwd
/root
[root@st-test2 ~]# ls -lhart /var/lib |grep postgres
drwx------.  4 postgres postgres   86 May  5 16:07 pgsql

因此,您可以看到 postgres 用户的主目录存在,并且它在 /etc/passwd 中设置......但由于某种原因,它们从根目录开始。我创建的每个用户都会发生这种情况,我不知道为什么。我也不能说我以前曾见过这种情况发生。

答案1

如果您仅提供用户名作为参数,则su更改用户不做太多改变:

为了向后兼容,su默认不更改当前目录,只设置环境变量HOMEand SHELL(如果目标用户不是 root,则加上USERand )。LOGNAME

所以su postgres保留在同一目录中。但是由于HOME设置为新用户的主目录,cd 将要带你到正确的地方。

要登录并从用户的默认目录启动,您需要要求su启动适当设置的登录 shell:

su -l postgres

或其常见同义词,

su - postgres

答案2

你的雇主可能已经改变了这一点,因为 Debiansu自 Buster 以来改变了行为。新人巴斯特我还创建了alias su='su -'

相关内容