自打一肩挑的高手不在身边,三太爷就免不了自己要做运维的活儿了。前些日子把公司的内网摸查了一遍,无聊的时候改改口令啥的。但昨天出了件怪事。高手搭建的一个内部服务器,系统是 CentOS,上面有两个通过 Samba 服务共享出来的目录,有一个突然无法访问了,提示没有权限。
在网上搜索,有人指出这类问题可能出在 SELinux 上,但给出的解决方案是把 SELinux 关闭,没敢接受。咨询了下三火兄,果然大有收获,知道了好几条命令。
首先是 sestatus,可以显示 SELinux 的状态,和已经知道的一样,确实是 enforcing 的启用状态。接着是 setenforce 命令,可以开关 SELinux。最后是 chcon 命令,可以调整对象的 SELinux 策略。
关闭 SELinux 后,该共享果然可以打开,这就证实了问题确实是 SELinux 导致。经过搜索,了解到了 chcon 的几个常见用法:
1、开启 Samba 用户 HOME 目录权限
/usr/sbin/setsebool -P samba_enable_home_dirs=1
2、开启单个共享目录的权限
chcon -t samba_share_t path
3、开启所有共享目录的权限
3.1、只读权限
/usr/sbin/setsebool -P samba_export_all_ro on
3.2、读写权限
/usr/sbin/setsebool -P samba_export_all_rw on
4、查看某个目录(path)是否开启了权限
ls -ldZ path
心中暗自度忖,chcon 的 -t 参数乃是指定模板。照猫画虎设置了一下,把 SELinux 打开,果然共享目录还可以访问。但是其中的子目录仍然不行,查看了一下 chcon 的命令行帮助,找到了期盼的 -R 参数,放到 -t 参数前又执行了一遍,韦小宝就又可以和双儿亲个嘴儿了。
附注一下,重启 Samba 服务的命令行:service smb restart。