root切换用户时遭遇"cannot change directory to /home/xxx: Permission denied"

系统:centos5.x

 以前我安装mysql时,新建用户的命令是这样的:

shell> groupadd mysql
shell> useradd  -g mysql mysql
shell> cd /usr/local

 

这时查看/etc/passwd时,记录这样的:

mysql:x:501:502::/home/mysql:/bin/bash

从上面的记录可以看出,此时的mysql是个普通用户(uid 500+)。

 

查看一下mysql的home目录:

drwx------ 2 mysql   mysql   4096 Apr 15 21:07 mysql

 

嗯,这时从root用户切换成mysql是没有问题的。所以我一直都没有在这个步骤上遇到过问题。接下来,我说说今天在这个步骤上遇到的问题。

如果细心留意观察mysql manual(2.2. Installing MySQL from Generic Binaries on Unix/Linux)的话,会发现它的操作命令是这样的:

shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> cd /usr/local

 

它的useradd 多加了一个选项'-r',这个参数的意思是"create system account"。可以从/etc/passwd中mysql的uid反映这一点:

mysql:x:101:502::/home/mysql:/bin/bash

 

在建立完用户以后,这时做root切换成mysql用户的操作,会出现一个意想不到的情况:

# su - mysql
su: warning: cannot change directory to /home/mysql: 权限不够
-bash: /home/mysql/.bash_profile: 权限不够
-bash-
3.2

 

 在我的印象当中,root的切换操作在正常情况下不会出现"Permission denied",是什么原因引起的?通过查询一些网上的资料,有一种说法是说用户的权限出现了问题。详情可以参阅这里。但我这个却不是这个原因。通过观察,问题的表现在这里:

drwx------ 2     504 mysql   4096 Apr 29 15:06 mysql
 

这个属主标识错误的问题,很好解决:

# chown -R mysql mysql/

 

原因分析:上述属主标识问题发生的原因其实很简单,就是在建立新的mysql用户(系统uid)时,它使用了以前的mysql普通用户(使用userdel删除具有相同名称的旧账号,没有加 '-r'选项,保留其主目录)的主目录。这样当uid不一致(系统没有更新此主目录的属主标识位),而此uid的用户已经不存在于系统中,所以root用户在切换用户时发生了" Permission denied"。

posted @ 2011-04-29 14:28  番茄侠  阅读(8112)  评论(0编辑  收藏  举报