哦,SElinux,一个令人感觉不舒服的词语。接触过linux的人或多或少会对他有点了解(例如只是查过怎么去关闭它...),今天在搭建vsftp实验环境的时候,被他折磨的死去活来,无法访问用户的主目录。现在已经解决该问题,特意把当时的思路以及解决办法写出,方便日后参考。
ps:本文只是说明了如何解决在指定建立家目录下该如何解决selinux,这么一个简单的问题而已。
----L
y.
知己知彼,首先goole了一下SElinux是什么。
还原当时场景
需要注意的
一,什么是SElinux
“
SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于
明确的指明某个进程可以访问哪些资源(文件、网络端口等)
。
”
其实,关键也就是黑体字那一句而已,很简单。
SElinux就是指明进程能访问那些资源,如果其访问了非指明的资源,SElinux就会阻止他,并告诉这个程序,你没有权限,不能让你访问。然后这时候程序一般因访问不到资源会中断或报错
例如,我们的Web服务器apache,进程一般的访问目录是/var/www/,因为网站存储在这里。那么假如因为apache本身的漏洞,黑客入侵并获得了账户的信息,想试图下载
/etc/passwd
这个文件。
因为 /etc/passwd 不具有
Apache 的访问标签,所以 Apache 对于
的访问会被 SELinux 阻止。从这点看来
SELinux 可以起到弥补该漏洞的缓和方案
。
/etc/passwd
二,关于vsftp和SElinux结合
当一个系统新安装了vsftp,并在SElinux开启的状态下进行网络分享,那么可能确实有一点小麻烦(就像我遇到的那样)。
在网上查到的大部分帖子中,大概80%的帖子会要求直接关闭SElinux,大概19%的帖子告知了处理一些基本配置的方法,但是一些出错或者更为显得“偏僻”的功能却没查到。(剩下那1%就是他们写了但是我没搜到的)
我在做实验的时候遇到了一个实际的需求。因为需要ext4格式的
磁盘来
测试vsftp的磁盘配额功能,但我本身磁盘格式是xfs的,无法完成实验,所以我想了一个方案
1,新建一个镜像并格式化成ext4格式
2,根下建立一个test目录,并挂载这个镜像。
3,将新用户ccc家目录指定到/test
我想这样我应该能继续我的实验。于是我开工
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
255
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
正常情况到此应该万事大吉了才对,我登录ccc后应该显示出我的家目录,并且家目录里面有我事先建立好的文件,可事实是
空空如也,没有想象中的家目录,并且新建东西也提示没权限,是哪里出了问题了吗?
首先想到的是检查iptable,
连开启都没有,头号嫌疑犯防火墙排除。
其次是不是vsftp的问题呢,于是新建一个bbb用户,登录测试下
当时的思想卡在了这么一个循环里
1,如果SElinux有问题,那么它不可能同是系统用户,一个能访问,另一个不能访问,只针对一个这样不符合公平的原理啊,当时排除了SElinux的嫌疑。(当时我错误在认为开启home目录是“所有"用户的home目录都被开启了,后面会详细说)
2,同样如果vsftp有问题,那应该是两个都不能访问。而现在的情况是一个正常完全不受影响,vsftp排除
3,iptables没开...
4,文件权限没问题
找笔记发现那天偷懒了没记,借笔记看了下仍未有收获
感觉全部地方都想到了,但是还是不能查处问题的原因所在,最后的最后的最后我突然想到了一个神器,日志!
查看message信息,发现罪魁祸首,SElinux组织了vsftp的访问
selinux对文件控制是通过控制文件的上下文来实现的,我打开了seinux对ftp的man手册(摘抄了关键的部分)
分享文件
1
2 3 4 5 6 7 8 |
SHARING
If the semanage restorecon setsebool |
第一行写明了,如果你想分享给 (Apache, FTP, rsync, Samba) 可以怎么做。
结合这些事情,那我大概猜到之前setsebool -P ftp_home_dir 1这条命令的作用了,一直以为这个home是开启每个用户的家目录的意思,但现在看来它指的单单是/home这个位置了。
现在理解布尔值选项,对于一个新手来说感觉很高大上的一个东西,那说白了其实就是一些开关。一个功能越庞大的系统,那么他的需要设置的要求也就越多,则是必然的。(每多一个新功能就要加一个开关)如果某个功能实现的功能太过繁琐是非常不合理的,假如说我仅仅要共享一个文件夹但却需要我设置50个选项,那么我绝笔不干。这时候就可以把这些常用的选项封装成一个总的选项,通过0或1开表达开启或关闭,可以方便我们执行,我想这就是所谓的布尔值吧,想明白也就没感觉它怎么神奇了。
好了扯远了,按照之前的man手册给步骤继续做
最后,成功解决问题。所以处理问题的诀窍就是:1,多看日志理。2,想问题要思路清晰。解决了才发现什么都不难,解决不了感觉比登天都难
。

明天可以继续我的实验啦,
最后的最后还有一个插曲,就是
1
2 3 4 5 |
#这两个的意思是不同的 semanage semanage #坑了我好久 |