##selinux## 安全增强型linux
selinux是最最全面的的安全系统,所以会对文件和服务有一定的限制。
以ftp服务为例:
1.环境的设定
因为之前学的是ftp,所以环境会对后面的实验有所影响,要先还原一下
删除 /etc/vsftpd/ 下的所有文件
再reinstall一下vsftpd
再重新启动一下systemctl restart vsftpd
这样环境就和以前一样了
2.selinux的开启及级别设定
getenforce ##查看selinux的状态
setenforce ##设定selinux的状态 selinux 0 (permissive) ; selinux 1 (enforcing)
##只能在这两种状态相互切换。当要从disabled切换到任意一个时,要编辑vim /etc/sysconfig/selinux这个文件。强制有警告且不能访问,警告有警告但是可以访问。对内核更改,修改后需要reboot
(1)Disabled
cd /mnt
touch file ##在mnt下建立的文件的标识是mnt_t,而在/var/ftp的文件的标识是public_content_t 在selinux关闭的状态下可以查看
mv file /var/ftp
lftp 172.25.254.110 ##匿名用户登陆
lftp 172.25.254.110:~>ls
drwxrwxrwx 2 0 0 6 Aug 03 07:00 pub
-rw-r--r-- 1 0 0 0 Aug 03 07:01 file
lftp 172.25.254.110:~>quit
ls -Z /var/ftp
-rw-r--r-- root root ? file
drwxr-xr-x root root ? pub
lftp 172.25.254.110 -u student ##指定用户登陆
可删除可写可建立文件
ps auxZ| grep vsftpd
- root 3781 0.0 0.0 112644 956 pts/0 S+ 15:36 0:00 grep --color=auto vsftpd
注意:当这个enforce为disabled的时候,在mnt里面创建一个文件,移动到ftp下后,可以查看到移动的文件,但是文件的前面有 ? ,当显示/var/ftp的属性的时候,看到中间有一大段是空白的,缺失的
(2)
vim /etc/sysconfig/selinux
改为enforcing
重启系统reboot ##这次开机就会别较慢
touch file ##在mnt下建立的文件的标识是mnt_t,而在/var/ftp的文件的标识是 public_content_t 在selinux开启的状态下不能查看
mv file /var/ftp
再重复上面操作的时候,?和缺失处就会出现东西
现在touch新的文件mv以后,看不见了;然后现在用用户登录,发现上传下载不了文件。
getenforce --> Enforing(强制的)
ps auxZ| grep vsftpd
system_u:unconfined_r:ftpd_t:s0:c0.c102 root 3781 0.0 0.0 112644 956 pts/0 S+ 15:36 0:00 grep --color=auto vsftpd
注意:现在上面多出来的那一行就称为selinux的安全上下文
ls -Z /var/ftp
-rw-r--r-- root root system_u:object_r:public_content_t:s0 file
注意:这个下面也加上了安全上下文
注意:这个文件和程序的安全上下文要一致才能访问 ftpd_t程序这个只能访问public_content_t文件,而当selinux为enforcing后,touch的那个文件的安全上下文为mnt_t,不匹配所以lftp无法查看这个文件。使系统更加安全。开启enforcing这个以后,系统会把不安全的权限全部关掉。
优点:程序访问文件的时候,必须安全上下文一致才能访问;把程序不安全的功能默认关闭
服务本身功能和服务访问文件的影响
3.修改安全上下文
(1)目录的安全上下文和文件的安全上下文不对应,不能访问文件
ls -Z /var/ftp/
-rw-r--r-- root root system_u:object_r:public_content_t:s0 file
-rw-r--r-- root root unconfined_u:object_r:mnt_t:s0 student ##更改之前
修改方法:
chcon -t public_content_t /var/ftp/student ##这种更改是临时的,reboot之后文件安全上下文会恢复
-rw-r--r-- root root system_u:object_r:public_content_t:s0 file
-rw-r--r-- root root system_u:object_r:public_content_t:s0 student ##更改之后
(2)修改默认目录及其下的文件
vim /var/sysconfig/selinux
chcon -t public_content_t /westos/ -R ##递归修改文件的安全上下文
注意:为什么自己更改的目录的安全上下文会在reboot之后恢复,而/var/ftp/的却不会改变?
是因为/var/ftp/的安全上下文在内核上面有标识,叫做安全上下文列表(永久改变)
semanage fcontext -l | grep /var/ftp/ ##查看是否有安全上下文列表,列表中有/var/ftp
/var/ftp/bin(/.*)? all files system_u:object_r:bin_t:s0
/var/ftp/etc(/.*)? all files system_u:object_r:etc_t:s0
semanage fcontext -l | grep /student ##我们自己的没有安全上下文列表,因此会恢复成默认,如果想让我们自己的文件或目录的安全上下文也不变的话,就也要加到这个安全上下文列表里。
/var/ftp/bin(/.*)? ##后面表示目录本身和里面所有的内容的安全上下文设定为设定的
semanager fcontext -a -t public_content_t /student(先不写后面的内容)
restorecon -F(刷新)vv(显示过程)R(递归) ##只是改了内核的安全上下文列表里面的内容,要刷新,同步到目录上去。 但是这样做目录下的文件安全上下文没有被更改,因为安全上下文列表没有设定
semanager fcontext -a -t public_content_t /student(/.*)?
restorecon -F(刷新)vv(显示过程)R(递归) ##只是改了内核的安全上下文列表里面的内容,要刷新,同步到目录上去。 这样做目录下的文件安全上下文也就被更改了,因为安全上下文列表有设定。
注意:要把上面的删除 semanager fcontext -d /student 以后,再重新加安全上下文列表
4.sebool
getsebool -a | grep sebool ##发现一些功能是关闭的
setsebool -P(永久生效) ftp_home_dir on ##开启某一个功能
5.selinux的排错信息
查看报错信息 cat /var/log/audit/audit.log
/var/log/audit/audit.log和/var/log/messages的区别是:前者只会说明错误;后者不仅会说明错误,还会提供解决方案,会有解决方案的原因是有settrouble这个插件