linux系统常见故障:用su切换用户引起的疑惑,重启系统后没有问题,但是后来,当客户要切换到oracle用户启动数据库时,无论如何su切换不了,于是问题就出现了。一、案例现象root用户下,su切换到普通用户oracle时报错,如图1所示。图1su切换时出现Permissiondenied错误。然后,我尝试直接通过oracle用户登录系统,发现此时oracle用户无法登录,出现了和上面一样的错误。2、解决办法从上面的报错信息可以看出是权限有问题,所以可以从权限入手进行排查。基本思路如下:●用户目录/home/oracle权限问题。●su程序执行权限问题。●程序依赖的共享库权限问题。●由SELinux问题引起。●系统根空间问题。3.排查问题按照以上思路,一一排查,考虑到su切换到oracle用户时会读取oracle目录下的环境变量配置文件,所以先排查/的权限是否有问题home/oracle目录:[root@loaclhosthome]#ls-al/home|greporacledrwx----4oralceoinstall409601-3110:45oracle从输出可以看出/home/oracle目录的属主是oracle用户,并且oracle用户对该目录具有“rwx”权限。所以,oracle用户目录的权限设置是正确的,可以排除这个问题。然后查看su的执行权限:[root@loaclhosthome]#11/bin/su-rwsr-xr-x1rootroot241202007-11-30/bin/su可以看出su命令的执行权限没有问题,也排除了这个问题。继续查看su依赖的共享库权限,使用ldd命令查看su命令依赖的共享库文件,如图2所示。图2使用ldd命令查看su命令依赖的共享库文件su命令取决于。根据以上操作,依次查看su命令所依赖的各个库文件的权限,发现都正常,并且具有可执行权限。所以,共享库的问题也就排除了。根据以上思路,继续检查SELinux设置,执行图3所示命令。图3查看SELinux设置从输出可以看出SELinux是关闭的,也排除了这个原因。至此,问题变得扑朔迷离,问题出在哪里?作为一名Linux运维人员,日常检查系统根分区的状态是非常有必要的,所以首先检查根分区的磁盘空间大小,发现还有很多剩余空间,于是至于排除空间问题。由于报错是权限有问题,所以只要以权限为线索,不偏离这个核心是正确的,所以继续尝试查看/home中各个用户的权限目录,执行命令如图4所示。图4查看/home目录下各个用户的权限从输出中可以看出,各个用户的目录权限为“rwx------”,即“700",完全没有问题。仔细查了一下思路,发现当前的眼睛一直停留在用户对应的目录上,而忽略了其他的输出信息,问题就出在之前没有注意的信息上。该命令输出的前两行,第一行权限对应的目录为“.”,代表当前目录,即/home目录,权限为“rwxr-xr-x”,即“755”,第二行权限对应的目录为“..”,即根目录,但权限为“rw-rw-rw-”,即“666”。这个时候终于找到问题所在了,原来是根目录权限的问题。将根目录权限设置为“rw-rw-rw-”显然是不正常的。一般情况下,根目录的权限应该是“755”。为什么这么设置很可能是误操作。通过ls命令查看根目录的权限时,显示不是很清楚,容易被很多运维人员忽略。其实我们可以使用另外一个命令stat来详细查看各个目录的权限,如图5所示。图5通过stat命令查看根目录权限通过这个命令可以清楚的看到根目录权限为“0666”,这是su执行失败的根本原因。4、解决问题知道了问题的原因,解决问题就很简单了。执行如下命令:[root@localhost~]#chmod755/然后就可以成功执行suswitch命令了。最后简单总结一下,这个问题主要是因为根目录没有可执行权限,Linux下的所有操作都是在根目录下进行的,导致/home/oracle目录没有可执行权限。事实上,根目录权限的丢失对系统中运行的每一个用户的影响都是一样的。因此,当权限出现问题时,一定要注意根目录的权限。
