普通用戶登錄問題:
root用戶登錄OK,但普通用戶登錄時提示:
-bash:/etc/profile Permission Denied
解決辦法:
在root的用戶下查看etc目錄權限,為744;這個權限是有問題的,其他用戶沒有列出etc目錄下文件的權限,所以其他用戶登錄會報錯!
chmod +x /etc 或者 chmod 755 /etc
給/etc/目錄加上x權限即可解決問題。
如果root用戶也出現該問題,可能的原因是/目錄權限問題,
stat / 查看根目錄權限,保持為755即可!
另,貼上用戶登錄過程:
用戶登錄后加載profile和bashrc的流程如下:
1)/etc/profile-------->/etc/profile.d/*.sh
2)$HOME/.bash_profile-------->$HOME/.bashrc---------->/etc/bashrc
說明:
bash首先執行/etc/profile腳本,/etc/profile腳本先依次執行/etc/profile.d/*.sh
隨后bash會執行用戶主目錄下的.bash_profile腳本,.bash_profile腳本會執行用戶主目錄下的.bashrc腳本,
而.bashrc腳本會執行/etc/bashrc腳本
至此,所有的環境變量和初始化設定都已經加載完成.
bash隨后調用terminfo和inputrc,完成終端屬性和鍵盤映射的設定.
其中PATH這個變量特殊說明一下:
如果是超級用戶登錄,在沒有執行/etc/profile之前,PATH已經設定了下面的路徑:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
如果是普通用戶,PATH在/etc/profile執行之前設定了以下的路徑:
/usr/local/bin:/bin:/usr/bin
這里要注意的是:在用戶切換並加載變量,例如su -,這時,如果用戶自己切換自己,比如root用戶再用su - root切換的話,加載的PATH和上面的不一樣.
准確的說,是不總是一樣.所以,在/etc/profile腳本中,做了如下的配置:
if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
如果是超級用戶登錄,在/etc/profile.d/krb5.sh腳本中,在PATH變量搜索路徑的最前面增加/usr/kerberos/sbin:/usr/kerberos/bin
如果是普通用戶登錄,在/etc/profile.d/krb5.sh腳本中,在PATH變量搜索路徑的最前面增加/usr/kerberos/bin
在/etc/profile腳本中,會在PATH變量的最后增加/usr/X11R6/bin目錄
在$HOME/.bash_profile中,會在PATH變量的最后增加$HOME/bin目錄
以root用戶為例,最終的PATH會是這樣(沒有其它自定義的基礎上)
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
以alice用戶(普通用戶)為例
/usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/alice/bin
原文地址:https://developer.aliyun.com/article/65212