/etc/profile Permission Denied


普通用戶登錄問題:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM