/etc/profile、~/.bashrc 和其他配置文件均不为用户提供,仅针对 root

/etc/profile、~/.bashrc 和其他配置文件均不为用户提供,仅针对 root

自从我将服务器从 Debian 8 升级到 9 后,我的 bash 出现了奇怪的行为。当我通过 ssh 登录时,没有加载任何配置文件,我收到以下提示:

Linux myserver 4.9.0-7-amd64 #1 SMP Debian 4.9.110-1 (2018-07-05) x86_64
Last login: Mon Jul 16 22:37:12 2018 from x.x.x.x
-bash-4.4$

运行echo $0返回 -bash。我已将echo "sourcing ..."一行放入 /etc/profile、~/.bashrc 中以查看何时调用它们,但这些行均未显示。但是,如果我手动获取这些文件,则会显示文本,并且文件也会按应有的方式获取。

使用 strace (在这里找到)查看哪些文件已打开,我看到所有配置文件都已打开。 echo exit | strace bash -li |& less | grep '^open'

我得到以下输出:

...
open("/etc/profile", O_RDONLY)          = 3
open("/etc/bash.bashrc", O_RDONLY)      = 3
open("/etc/profile.d/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
open("/etc/profile.d/bash_completion.sh", O_RDONLY) = 3
...
open("/home/myuser/.bash_profile", O_RDONLY) = 3
open("/home/myuser/.bash_history", O_RDONLY) = 3
open("/home/myuser/.bash_history", O_RDONLY) = 3
...
open("/home/myuser/.bash_logout", O_RDONLY) = 3
open("/etc/bash.bash_logout", O_RDONLY) = -1 ENOENT (No such file or directory)
...

仅当我以普通用户身份登录时才会出现此问题,一旦我 su 到 root,配置文件就会按应有的方式加载。我怀疑现在可能只有 root 有权调用这些文件,但我快疯了,因为我检查的所有内容都应该是这样。

非常感谢任何提示或想法。

答案1

找到了解决方案,正如我怀疑的那样,它与权限有关。不知何故,setgid 位被设置在 /bin/bash 上。

左侧系统是有问题的系统,右侧是正常运行的系统: 解决方案

为了解决该问题,我运行以下命令:

   sudo chmod g-s /bin/bash

相关内容