San*_*kas 5 bash debian profile
自从我将服务器从 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$
Run Code Online (Sandbox Code Playgroud)
运行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)
...
Run Code Online (Sandbox Code Playgroud)
只有当我以普通用户身份登录时才会出现问题,一旦我 su 到 root,配置文件就会按预期加载。我怀疑现在可能只有 root 有权调用这些文件,但我快疯了,因为我检查的所有内容都应该是这样。
非常感谢任何提示或想法。
找到了解决方案,正如我怀疑的那样,它与权限有关。不知何故,setgid 位被设置在 /bin/bash 上。
为了解决这个问题,我运行以下命令:
sudo chmod g-s /bin/bash
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
617 次 |
最近记录: |