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

扫描二维码关注公众号,回复: 6393538 查看本文章

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 ,效果相同。

猜你喜欢

转载自blog.csdn.net/weixin_44792728/article/details/90677931