SELinux安全防护

1.SELinux安全防护
问题
本案例要求熟悉SELinux防护机制的开关及策略配置,完成以下任务:
1)将Linux服务器的SELinux设为enforcing强制模式
2)在SELinux启用状态下,调整策略打开vsftpd服务的匿名上传访问
3)从/root目录下移动一个包文件到FTP下载目录,调整策略使其能够被下载
步骤
实现此案例需要按照如下步骤进行。
步骤一:将Linux服务器的SELinux设为enforcing强制模式
1)固定配置:修改/etc/selinux/config文件
确认或修改SELINUX为enforcing模式:
[root@svr5 ~]# vim /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted
2)临时配置:使用setenforce命令
查看当前SELinux状态,如果是disabled则需要根据第1)步的配置重启系统;如果是permissive则使用setenforce命令修改为enforcing即可:
[root@svr5 ~]# getenforce
Permissive
[root@svr5 ~]# setenforce 1 //或者setenforce enforcing
[root@svr5 ~]# getenforce
Enforcing
步骤二:在SELinux启用状态下,调整策略打开vsftpd服务的匿名上传访问
1)配置一个允许匿名上传的vsftpd服务作为测试环境
[root@svr5 ~]# yum –y install vsftpd
… …
[root@svr5 ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES //开启匿名访问
write_enable=YES
anon_umask=022
anon_upload_enable=YES //允许上传文件
anon_mkdir_write_enable=YES //允许上传目录

[root@svr5 ~]# chown ftp /var/ftp/pub
[root@svr5 ~]# service vsftpd start
为 vsftpd 启动 vsftpd: [确定]
2)启用SELinux时验证FTP上传访问
在targeted策略的布尔值设置中,默认禁止FTP匿名写入和完全访问:
[root@svr5 ~]# ls > test.txt
[root@svr5 ~]# ftp 192.168.4.5
[root@svr5 ~]# ftp 192.168.4.5
… …
Name (192.168.4.5:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> put test.txt //尝试上传测试文件
local: test.txt remote: test.txt
227 Entering Passive Mode (192,168,4,5,121,146).
553 Could not create file. //上传失败
ftp> quit
221 Goodbye.
3)调整与FTP相关的SELinux布尔值,开放上传写入权限
检查与allow_ftpd相关的SELinux布尔值,如果是off,则将其修改为on:
[root@svr5 ~]# getsebool -a |grep allow_ftpd //查看布尔值
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
… .
[root@svr5 ~]# setsebool -P allow_ftpd_anon_write=1 //设置布尔值
[root@svr5 ~]# setsebool -P allow_ftpd_full_access=1
[root@svr5 ~]# getsebool -a |grep allow_ftpd //确认修改结果
allow_ftpd_anon_write --> on
allow_ftpd_full_access --> on
4)再次访问vsftpd服务,经测试发现匿名上传已经可用
[root@svr5 ~]# ftp 192.168.4.5
… …
Name (192.168.4.5:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> put test.txt //尝试上传测试文件
local: test.txt remote: test.txt
227 Entering Passive Mode (192,168,4,5,63,249).
150 Ok to send data.
226 Transfer complete. //上传成功
237 bytes sent in 6.3e-05 secs (3761.90 Kbytes/sec)
ftp> quit
221 Goodbye.
步骤三:从/root目录下移动一个包文件到FTP下载目录,调整文件的安全上下文
1)关闭FTP布尔值allow_ftpd_full_access以便测试
因为开启此项会扩大FTP目录的访问权限(忽略安全上下文),建议先将其关闭。
[root@svr5 ~]# setsebool allow_ftpd_full_access=0
[root@svr5 ~]# getsebool allow_ftpd_full_access
allow_ftpd_full_access --> off
2)建立两个FTP下载用的测试文件
由root用户创建两个测试压缩包,一个直接建立到/var/ftp/目录下,另一个先在/root/下建立,然后移动至/var/ftp/目录 。
[root@svr5 ~]# tar zcf /var/ftp/d1.tar.gz install.log*
[root@svr5 ~]# tar zcf d2.tar.gz install.log*
[root@svr5 ~]# mv d2.tar.gz /var/ftp/
[root@svr5 ~]# ls -lh /var/ftp/d?.tar.gz
-rw-r–r--. 1 root root 13K 8月 16 10:16 /var/ftp/d1.tar.gz
-rw-r–r--. 1 root root 13K 8月 16 10:16 /var/ftp/d2.tar.gz
3)通过FTP方式测试下载
使用wget命令分别下载这两个包文件,第二个包将会下载失败(看不到文件)。
[root@svr5 ~]# wget ftp://192.168.4.5/d1.tar.gz
… …
==> PASV … 完成。 ==> RETR d1.tar.gz … 完成。
… …
2013-08-16 10:36:16 (235 MB/s) - “d1.tar.gz” 已保存 [13124]

[root@svr5 ~]# wget ftp://192.168.4.5/d2.tar.gz
… …
==> PASV … 完成。 ==> RETR d2.tar.gz …
文件 “d2.tar.gz” 不存在。
4)检查该测试包的安全上下文,正确调整后再次下载第二个包成功。
[root@svr5 ~]# ls -Z /var/ftp/d?.tar.gz
-rw-r–r--. root root unconfined_u:object_r:public_content_t:s0 /var/ftp/d1.tar.gz
-rw-r–r--. root root unconfined_u:object_r:admin_home_t:s0 /var/ftp/d2.tar.gz
[root@svr5 ~]# chcon -t public_content_t /var/ftp/d2.tar.gz
[root@svr5 ~]# ls -Z /var/ftp/d2.tar.gz
-rw-r–r--. root root unconfined_u:object_r:public_content_t:s0 /var/ftp/d2.tar.gz

[root@svr5 ~]# wget ftp://192.168.4.5/d2.tar.gz
… …
==> PASV … 完成。 ==> RETR d2.tar.gz … 完成。
长度:13124 (13K) (非正式数据)
… …
2013-08-16 10:42:21 (178 MB/s) - “d2.tar.gz” 已保存 [13124]
注意:上例中的chcon操作可替换为restorecon /var/ftp/d2.tar.gz 或者chcon --reference=/var/ftp/d1.tar.gz /var/ftp/d2.tar.gz ,效果相同。

你可能感兴趣的:(SELinux安全防护)