問題描述
在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