2008年11月16日星期日

[pitfall]在RHEL下要万分小心SELinux

SELinux(Security-Enhanced Linux)美国国家安全局(NAS)和SElinux社区的一个联合项目,在RHEL是必须安装的组件。它在linux自身提供的权限控制外,对于一些关键敏感的程序和文件提供额外的保护。

不错,系统更加安全了,但是SA如果不熟悉SELinux的话(或者根本不知道有这个玩意儿),就会出现很多权限出错的问题。

前几天就被SELinux折腾的够呛。

当时现象如下:

my.cnf里面配置的user=mysql.

mysqld_safe &启动时报错:InnoDB: Operating system error number 13 in a file operation,The error means mysqld does not have the access rights to the directory.


实际上存放这个数据文件的文件夹我已经chown mysql:mysql dirname ,chmon -R 777 dirname了。

怀疑是SELinux的问题,disabled重启之后问题依旧。

后来发现,只有把数据文件放在/var/lib/mysql下,数据库才可以正常启动.或者mysqld_safe --user=root &也可以启动。


当晚发现权限问题的时候,就怀疑是SELinux在捣乱,但是没有想到disabled重启机器以后,SELinux依然阴魂不散......又让我多花了一天的时间排除其他的可能性。

ls -Z可以看到selinux在文件夹或者文件上面打的‘标签’:user_u:object_r:user_home_t:s。

如果一个文件你是在SELinux打开的时候创建的,那么即使你关闭SELinux,它的权限控制还是会起作用的。

可以通过chcon来改变权限。或者干脆重装系统。

----------------------
ubuntu下面默认安装apparmor而不是SELinux,它同样也会导致一些莫名其妙的权限问题,也要注意。
链接

没有评论: