linux下selinux的控制与管理
SELINUX ( 安全增强型 Linux )
可保护你系统安全性的额外机制在某种程度上 , 它可以被看作是与标准权限系统并行的权限系统.在常规模式中 , 以用户身份运行进程 , 并且系统上的文件和其他资源都设置了权限 ( 控制哪些用户对哪些文件具有哪些访问权 SELINUX 的另一个不同之处在于 , 若要访问文件 ,你必须具有普通访问权限和 SELINUX 访问权限。因此 , 即使以超级用户身份root 运行进程 , 根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源限 ) 标签.
getenforce #查看selinux的模式
setenforce 0|1
0 表示 permissive # 警告
1 表示 enforcing # 强制
selinux的修改
vim /etc/sysconfig/selinux
SELINUX=enforcing 强制
SELINUX=permissive 警告
SELINUX=disabled 关闭
更改完成后需要对系统进行重启(reboot)
一、查看文件安全上下文,chcon -t l临时更改安全上下
ls -Z 显示文件安全上下文
semanage fcontext -l |grep /var/ftp 查看/var/ftp的安全上下文
chcon -t public_content_t westos 把westos文件安全上下文改为public_content_t(临时)
getenforce (此实验selinux为强制enforcing 模式)
实验程序:
423 touch /mnt/westos3
424 mv /mnt/westos3 /var/ftp 移动(mv)是重命名过程,不改变安全上下文复制(cp)是新建的过程,改变安全上下文
425 cd /var/ftp
426 ls
427 lftp 172.25.254.213 (此时/var/ftp里只会显示安全上下文符合的,新建的westos3不符合,不会显示)
428 ls -Z 显示文件安全上下文
429 semanage fcontext -l | grep /var/ftp 查看/var/ftp的安全上下文
430 chcon -t public_content_t westos1 把westos1文件安全上下文改为public_content_t
431 chcon -t public_content_t westos3 把westos3文件安全上下文改为public_content_t
432 ls -Z 显示文件安全上下文
433 lftp 172.25.254.213 (此时会显示westos3)
二、上面的更改安全上下文方式为临时的,当我们对selinux配置文件重启先更改为disabled-----》reboot------>再更改配置文件为enforcing------》reboot查看其安全上下文发现变为未改前的semanage fcontext -a -t永久性更改安全上下文
touch /.autorelabel
reboot 相当于对selinux配置文件重启(reset)即其先更改为disabled-----》reboot------>再更改配置文件为enforcing------》reboot
semanage fcontext -a -t public_content_t '/westos(/.*)?'
semanage fcontext -l | grep /westos
实验程序435 mkdir /westos 新建目录
436 touch /westos/westosfile
437 vim /etc/vsftpd/vsftpd.conf (更改家目录为/westos) 编辑ftp服务配置文件
438 systemctl restart vsftpd 重启ftp服务
439 cd /westos
440 ls
441 lftp 172.25.254.213
442 setenforce 0 设置selinux为警告模式
443 lftp 172.25.254.213
444 setenforce 1 设置selinux为强制模式
445 getenforce
446 chcon -t public_content_t /westos -R 把westos目录下面的文件安全上下文改为public_content_t(临时更改,重启后失效)
447 ls -Z /westos 显示/westos下文件的安全上下文
448 lftp 172.25.254.213
449 vim /etc/sysconfig/selinux 更改为disabled
450 reboot
452 vim /etc/sysconfig/selinux 更改为enforcing
453 reboot
454 ls -Zd /westos 查看安全上下文 (进行重启selinux后发现刚才对/westos的安全上下文更改已经没有了)
456 semanage fcontext -a -t public_content_t '/westos(/.*)?' 把westos目录及目录下所有的文件安全上下文改为public_content_t
fcontext 规则中最常用的扩展正则表达式是 (/.*)?, 表示随意地匹配 / 后跟任何数量的字符semanage fcontext 将递归地与在表达式前面列出的目录以及该目录中的所有内容相匹配
458 semanage fcontext -l | grep /westos 查看安全上下文
459 restorecon -FvvR /westos 刷新
460 systemctl start vsftpd 开启服务
461 systemctl stop firewalld 关闭火墙
462 systemctl enable vsftpd 开机自启ftp服务
463 systemctl disable firewalld 开机自动关闭火墙
464 lftp 172.25.254.213
465 touch /.autorelabel 新建一个文件,此文件在重起后会自动重启selinux服务
466 reboot 重启
467 getenforce
468 lftp 172.25.254.213
设置匿名用户家目录
更改目录及目录下文件的安全上下文,可以看见文件
重启后,上面的更改失效,上面所做的更改安全上下文是临时的
永久性修改安全上下文
重启后安全上下文的更改依旧生效
三、selinux对服务功能的影响
SELinux 布尔值是更改 SELinux 策略行为的开关。 SELinux 布尔值是可以启用或禁用的规则。安全管理员可
以使 SELinux 布尔值来调整策略 , 以有选择地进行调整
当我们用student用户登陆后发现无法上传文件报错553没有权限我们查看
ll -d /home/student
发现其有w权限但不能上传
更改selinux
setenforce 0(更该为警告模式之后可以上传)确定为selinux对服务的影响
getsebool -a | grep ftp (查看selinux对ftp服务某些的开关发现对其家目录没有打开)
setsebool -P(大写的P) ftp_home_dir on 开启ftp服务家目录(-p是指永久强制)
此时就可以上传了(在selinux强制模式下)
实验程序:getsebool 用于显示布尔值 , setsebool 用于修改布尔值、setsebool -P 修改 SELinux 策略 , 以永久保留修改
1 getenforce -----》 Enforcing
2 lftp 172.25.254.213 -u student
3 ll -d /home/student
8 chmod u+w /home/student
9 lftp 172.25.254.213 -u student (无法上传文件)
10 getsebool -a | grep ftp (ftp_home_dir off) 查看(在selinux为强制模式下)ftp服务允许功能
13 setsebool -P ftp_home_dir on 使功能(ftp_home_dir on) 打开
14 getsebool -a | grep ftp 查看(在selinux为强制模式下)ftp服务允许功能
15 lftp 172.25.254.213 -u student (可以上传)
显示报错530没有权限,但当我们查看时却发现是有权限的
修改selinux布尔值
修改完布尔值后可以上传文件了
四、关于selinux的警告都存放在/var/log/audit/audit.log下,这个里面的内容被setroubleshoot-server-3.2.17-2.el7.x86_64软件进行分析后发送到/var/log/message中,并附带解决方案
实验程序:
17 vim /etc/vsftpd/vsftpd.conf (将上个实验中匿名用户家目录的更改改回来)
18 systemctl restart vsftpd 重启其服务
19 cd /var/ftp
20 ls
21 rm -fr *
22 ls
23 touch /mnt/westos
24 mv /mnt/westos /var/ftp
25 > /var/log/messages
浏览器ftp://172.25.254.213 没有内容
26 cat /var/log/messages 查看日志
27 cat /var/log/audit/audit.log
28 restorecon -v /var/ftp/* ( /var/log/messages中提供的解决方案)
29 rpm -qa | grep setrouble 查找已安装软件setrouble
30 yum remove setroubleshoot-server-3.2.17-2.el7.x86_64 删除软件
31 > /var/log/messages 清空日志
32 > /var/log/audit/audit.log
33 touch /mnt/westos1
34 mv /mnt/westos1 /var/ftp/
37 cat /var/log/messages
38 /var/log/audit/audit.log
38 yum install setroubleshoot-server-3.2.17-2.el7.x86_64 安装软件
39 cat /var/log/messages
40 restorecon -v /var/ftp/* ( /var/log/messages中提供的解决方案 )
此时不能看到文件
通过查看日志找到解决办法此时可以看到文件
此时我们删除了setroubleshoot-server当我们再次出现问题时日志已不再提供给我们解决方案
当我们重新装上时又会给我们提供解决方案
五、httpd服务更改端口理论上是可以的但再selinux为强制时无法重启服务,证明selinux对这个有影响当我们将selinux设为警告时(setenforce 0)可以重启,当再强制模式下(setenforce 1)semanage port -a -t http_port_t -p tcp 6666 给http服务添加6666端口
实验程序:
41 yum install httpd
42 vim /etc/httpd/conf/httpd.conf (第42行更改端口为6666)
43 systemctl restart httpd 开启httpd服务
44 setenforce 0 设置selinux为警告模式
45 systemctl restart httpd
46 setenforce 1 设置selinux为强制模式
47 semanage port -l | grep http 查看http服务的端口
48 semanage port -a -t http_port_t -p tcp 6666 给http服务添加666端口
49 semanage port -l | grep http 查看http服务端口
50 systemctl restart httpd
cat /etc/services | grep ftp 查看ftp的端口
cat /etc/services | grep -E "\<**>\" 查看端口为**的服务是什么
更改端口为6666
添加httpd服务端口号6666
此时在selinux为强制的模式下httpd服务也可正常开启