su命令Permission denied


問題描述

在root用戶下su到普通用戶出現權限問題

[root@hehe ~]# su - zh
su: warning: cannot change directory to /home/zh: Permission denied
su: failed to execute /bin/bash: Permission denied

解決思路

由於報錯是權限問題,所以需要從文件系統權限着手排查,思路如下:

  • 用戶家目錄權限問題
  • su命令執行權限問題
  • 程序依賴的共享庫權限問題
  • SELinux導致
  • 系統根目錄權限問題

排查過程

1、檢查用戶家目錄權限

[root@hehe ~]# ll -a /home/|grep zh
drwx------   2 zh   zh     62 May 10 23:24 zh

由輸出可知 zh用戶對自己家目錄具有rwx權限,所以用戶家目錄權限沒有問題。

2、檢查su命令權限

[root@hehe ~]# ll `which su`
-rwsr-xr-x 1 root root 62104 Nov  9  2019 /usr/bin/su

可以看到su命令也是具有S位的,權限也沒有問題

3、檢查su命令的共享庫權限

[root@hehe ~]# ldd `which su`
    linux-vdso.so.1 (0x00007ffe3c94a000)
    libpam.so.0 => /lib64/libpam.so.0 (0x00007f2282542000)
    libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007f228233e000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f228213a000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f2281d77000)
    libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f2281b4d000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f2281949000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f228295d000)
    libcap-ng.so.0 => /lib64/libcap-ng.so.0 (0x00007f2281743000)
[root@hehe
~]# ll /lib64/ld-linux-x86-64.so.2 lrwxrwxrwx 1 root root 10 Feb 5 00:06 /lib64/ld-linux-x86-64.so.2 -> ld-2.28.so

 [root@hehe ~]# ll /lib64/ld-2.28.so
 -rwxr-xr-x 1 root root 385384 Feb 5 00:17 /lib64/ld-2.28.so

可以看到共享庫文件也都是具有執行權限的,也可以排除了。

4、檢查SELinux

[root@hehe ~]# getenforce 
Disabled

SELinux也是關閉了,也可以排除

5、檢查/home目錄的權限

 

 可以看到根目錄的權限是666,明顯除了問題,沒有執行權限。只有上級目錄具有執行權限時,才能進入到其子目錄。

解決問題

[root@hehe ~]# chmod 755 /
[root@hehe ~]# su - zh
Last login: Sun May 10 23:25:09 CST 2020 on pts/4
[zh@hehe ~]$ 

如果要檢查是誰操作的,可以通過stat命令和w命令查看:

[root@hehe ~]# stat /
  File: /
  Size: 4096          Blocks: 8          IO Block: 4096   directory
Device: fd01h/64769d    Inode: 128         Links: 21
Access: (0666/drw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-05-10 23:30:28.724451727 +0800
Modify: 2020-05-09 17:30:21.391659708 +0800
Change: 2020-05-10 23:25:03.372759080 +0800
 Birth: -

 

 可以看到是哪個用戶最后一個登陸的,登陸的IP

對於優化過的系統可以查看命令歷史

命令歷史優化

編輯/etc/bashrc文件,加入如下三行:
HISTFILESIZE=2000
HISTSIZE=2000
HISTTIMEFORMAT="%Y%m%d-%H%M%S: "  或者HISTTIMEFORMAT="%Y%m%d %T "
export HISTTIMEFORMAT

我這里是測試環境沒有優化,就不貼圖了

[root@hehe ~]# less .bash_history

 


免責聲明!

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



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