Linux系统中对selinux设定

1.什么是selinux

selinx(安全增强型linux),内核级的加强型火墙
内核上的插件,改变selinux状态后需要进行重启
是可以保护系统安全性的额外机制

2.selinux的作用

在某种程度上,他可以被看作是与标准权限系统并行的权限系统。
在常规模式中,以用户身份运行进程,并且系统上的文件和其它资源都设置了权限标签。
(即控制那些用户对哪些文件具有哪些访问权,selinux的另一个不同之处在于,若要访问文件,你必须具有普通访问权限和selinux访问权限。因此,即使以超级用户身份root运行进程,根据进程积极文件或资源的selinux安全性上下文可能拒绝访问文件或者资源)

3.selinux的模式

Disabled 不警告不拒绝
Enforcing 1 强制不可访问
Permissive 0 警告但可以访问

getenforce可以查看selinux的状态

4.更改selinux状态的方法

(1)文件中修改

[root@server_sshd ~]# vim /etc/sysconfig/selinux 
[root@server_sshd ~]# reboot

1 重新安装vsftpd包,安装完毕后开启服务

[root@server_ssh ~]# yum reinstall vsftpd -y
[root@server_ssh ~]# systemctl start vsftpd

2 查看selinux的状态,lftp匿名用户登陆,登陆后查看家目录下的内容

[root@server_ssh ~]# getenforce
Disabled
[root@server_ssh ~]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
drwxr-xr-x    2 0        0              31 Jun 23  2016 pub
-rw-r--r--    1 0        0               0 Feb 03 15:18 westos
lftp 172.25.254.227:/> quit

在这里插入图片描述
3 在/mnt下新建一个文件hello,将/mnt/hello移动到/var/ftp下,匿名用户登陆后可以查看到刚刚移动的文件

注意:移动是一个重命名的过程不会改变文件的权限以及其他属性,
而复制有可能会改变文件的权限以及属性

在这里插入图片描述
4 在文件中修改selinux的状态,修改后查看selinux的状态没有改变,重启虚拟机,再次查看selinux的状态发生改变

[root@server_ssh mnt]# vim /etc/sysconfig/selinux 
[root@server_ssh mnt]# getenforce
Disabled

在这里插入图片描述
在这里插入图片描述

[root@server_ssh mnt]# reboot
[root@server_ssh ~]# getenforce
Enforcing

在这里插入图片描述
5 匿名用户登陆后可以查看到之前的内容

[root@server_ssh ~]# systemctl restart vsftpd
[root@server_ssh ~]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
-rw-r--r--    1 0        0               0 Feb 10 16:06 hello
drwxr-xr-x    2 0        0              31 Jun 23  2016 pub
-rw-r--r--    1 0        0               0 Feb 03 15:18 westos
lftp 172.25.254.227:/> quit

在这里插入图片描述
再次重复之前的步骤,在/mnt下新建以和文件hello1,将/mnt/hello1移动到/var/ftp,再次匿名用户登陆查看不到新建的文件,这是因为文件的安全上下文不匹配

[root@server_ssh mnt]# cd /mnt
[root@server_ssh mnt]# ls
[root@server_ssh mnt]# touch hello1
[root@server_ssh mnt]# ls
hello1
[root@server_ssh mnt]# mv /mnt/hello1 /var/ftp
[root@server_ssh mnt]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
-rw-r--r--    1 0        0               0 Feb 10 16:06 hello
drwxr-xr-x    2 0        0              31 Jun 23  2016 pub
-rw-r--r--    1 0        0               0 Feb 03 15:18 westos
lftp 172.25.254.227:/> quit

在这里插入图片描述
6 ls -lZ /var/ftp/查看文件的安全上下文

[root@server_ssh mnt]# ls -lZ /var/ftp/
-rw-r--r--. root root system_u:object_r:public_content_t:s0 hello
-rw-r--r--. root root unconfined_u:object_r:mnt_t:s0   hello1
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 pub
-rw-r--r--. root root system_u:object_r:public_content_t:s0 westos

在这里插入图片描述
(2)命令修改
设置selinux的状态

[root@server_sshd mnt]# setenforce 0|1
0表示警告(Permissive),1表示强制(Enforcing)

例:
1 删除/var/ftp下之前移动来的文件hello和hello1

[root@server_ssh mnt]# rm -fr /var/ftp/hello*
[root@server_ssh mnt]# ls -lZ /var/ftp/
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 pub
-rw-r--r--. root root system_u:object_r:public_content_t:s0 westos

在这里插入图片描述
2 查看selinux的状态,在/mnt/下建立一个文件file,移动到/var/ftp/

[root@server_ssh mnt]# getenforce
Enforcing
[root@server_ssh mnt]# touch /mnt/file
[root@server_ssh mnt]# mv /mnt/file /var/ftp

在这里插入图片描述
匿名用户登陆,不可以访问file

[root@server_ssh mnt]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
drwxr-xr-x    2 0        0              31 Jun 23  2016 pub
-rw-r--r--    1 0        0               0 Feb 03 15:18 westos
lftp 172.25.254.227:/> quit

在这里插入图片描述
3 设定selinux状态为警告,再次登陆后可以访问新建文件file

[root@server_ssh mnt]# setenforce 0
[root@server_ssh mnt]# getenforce
Permissive
[root@server_ssh mnt]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
-rw-r--r--    1 0        0               0 Feb 10 16:26 file
drwxr-xr-x    2 0        0              31 Jun 23  2016 pub
-rw-r--r--    1 0        0               0 Feb 03 15:18 westos
lftp 172.25.254.227:/> quit

在这里插入图片描述
4 将selinux状态设定为1
登陆不可以访问

[root@server_ssh mnt]# setenforce 1
[root@server_ssh mnt]# getenforce
Enforcing
[root@server_ssh mnt]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
drwxr-xr-x    2 0        0              31 Jun 23  2016 pub
-rw-r--r--    1 0        0               0 Feb 03 15:18 westos
lftp 172.25.254.227:/> quit

在这里插入图片描述
5 若是要访问文件file就需要改变安全上下文

[root@server_ssh mnt]# ls -Z /var/ftp 
-rw-r--r--. root root unconfined_u:object_r:mnt_t:s0   file
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 pub
-rw-r--r--. root root system_u:object_r:public_content_t:s0 westos
[root@server_ssh mnt]# chcon -t public_content_t /var/ftp/file ##临时更改安全上下文
[root@server_ssh mnt]# ls -Z /var/ftp 
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 file
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 pub
-rw-r--r--. root root system_u:object_r:public_content_t:s0 westos

在这里插入图片描述
更该后可以访问文件file

[root@server_ssh mnt]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
-rw-r--r--    1 0        0               0 Feb 10 16:26 file
drwxr-xr-x    2 0        0              31 Jun 23  2016 pub
-rw-r--r--    1 0        0               0 Feb 03 15:18 westos
lftp 172.25.254.227:/> quit

在这里插入图片描述

5.更改安全上下文

(1)临时更改安全上下文
chcon 更改安全上下文是临时的

实验之前先删除/var/ftp下除了pub之外的所有文件

1 新建一个目录/westos,在目录下新建文件file1-file3,查看新建目录的安全上下文,

[root@server_ssh ~]# mkdir /westos
[root@server_ssh ~]# touch /westos/file{1..3} 
[root@server_ssh ~]# ls -Z /westos/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 file1
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 file2
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 file3

在这里插入图片描述
2 编辑服务的配置文件,写入
anon_root=/westos
设定匿名用户登陆的家目录为新建的/westos目录
[root@server_ssh ~]# vim /etc/vsftpd/vsftpd.conf
[root@server_ssh ~]# systemctl restart vsftpd

在这里插入图片描述
匿名用户登陆后无法访问/westos下的内容

[root@server_ssh ~]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
lftp 172.25.254.227:/> quit

在这里插入图片描述
3 查看/westos目录的安全上下文

[root@server_ssh ~]# ls -Zd /westos/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /westos/

在这里插入图片描述
4 更改安全上下文后查看

[root@server_ssh ~]# chcon -t public_content_t /westos -R
[root@server_ssh ~]# ls -Zd /westos/
drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /westos/
[root@server_ssh ~]# ls -Z /westos/
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 file1
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 file2
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 file3

在这里插入图片描述
5 匿名用户登陆后可以访问

[root@server_ssh ~]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
-rw-r--r--    1 0        0               0 Feb 10 16:50 file1
-rw-r--r--    1 0        0               0 Feb 10 16:50 file2
-rw-r--r--    1 0        0               0 Feb 10 16:50 file3
lftp 172.25.254.227:/> quit

在这里插入图片描述
6 更改seliinux状态为disabled,重启虚拟机
[root@server_ssh ~]# vim /etc/sysconfig/selinux
[root@server_ssh ~]# reboot

在这里插入图片描述
在这里插入图片描述
重启之后再次查看安全上下文,与之前一样
改变selinux状态再次重启

[root@server_ssh ~]# ls -Zd /westos/
drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /westos/
[root@server_ssh ~]# vim /etc/sysconfig/selinux 
[root@server_ssh ~]# reboot

在这里插入图片描述
在这里插入图片描述
重启之后查看安全上下文,变回默认的
内核上的安全上下文内容 default_t 默认的

[root@server_ssh ~]# ls -Zd /westos/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /westos/

在这里插入图片描述
匿名用户登陆,查看不了/westos中的内容

[root@server_ssh ~]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
lftp 172.25.254.227:/> quit

在这里插入图片描述

(2)永久更改安全上下文

semanage fcontext -a -t public_content_t '/westos(/.*)?'
##'/westos(/.*)?'  表示/westos目录以及目录中的内容
semanager fcontext -l |grep /westos
##查看
restorecon -FvvR  /westos/ ##刷新

1 更改/westos以及目录中内容的安全上下文

[root@server_ssh ~]# semanage fcontext -a -t public_content_t '/westos(/.*)?'
[root@server_ssh ~]# semanage fcontext -l | grep westos
/westos(/.*)?                                      all files          system_u:object_r:public_content_t:s0 
[root@server_ssh ~]# restorecon -FvvR /westos/
restorecon reset /westos context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /westos/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /westos/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /westos/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0

在这里插入图片描述
2 查看/westos的安全上下文,被更改

[root@server_ssh ~]# ls -Zd /westos/
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /westos/

在这里插入图片描述
3 匿名用户登陆查看

[root@server_ssh ~]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
-rw-r--r--    1 0        0               0 Feb 10 16:50 file1
-rw-r--r--    1 0        0               0 Feb 10 16:50 file2
-rw-r--r--    1 0        0               0 Feb 10 16:50 file3
lftp 172.25.254.227:/> quit

在这里插入图片描述
注:安全上下文匹配可以访问
特定的程序只能访问安全上下文匹配的文件
如果不匹配会被内核禁止
还会影响服务本身的功能
内核上的安全上下文内容 default_t 默认的

注:给每一个服务加上开关
bool值 布尔值
boolean型 开关0 1
有选择性的打开on开 off关
文件上的标签和所能访问的服务上的标签不一致则不能访问
getsebool -a 查看开关是否开启
setsebool -P xxx on 开启功能

6.设置用户上传文件

(1)让本地用户上传文件
1 本地用户登陆,上传文件,无法上传,系统报错553

[root@server_ssh ~]# lftp 172.25.254.227 -u student
Password: 
lftp [email protected]:~> ls      
-rw-r--r--    1 1000     1000          491 Feb 09 23:28 inittab
-rw-r--r--    1 1000     1000         2243 Feb 05 11:30 passwd
lftp [email protected]:~> put /etc/group
put: Access failed: 553 Could not create file. (group)
lftp [email protected]:~> quit

在这里插入图片描述
2 查看ftp相关功能的状态,本地用户上传文件的功能没有开启

[root@server_ssh ~]# getsebool -a | grep ftp
ftp_home_dir --> off ##本地用户家目录
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off

在这里插入图片描述
3 开启本地用户上传文件的功能,本地用户登陆后上传文件上传成功

[root@server_ssh ~]# setsebool -P ftp_home_dir on
[root@server_ssh ~]# lftp 172.25.254.227 -u student
Password: 
lftp [email protected]:~> ls      
-rw-r--r--    1 1000     1000          491 Feb 09 23:28 inittab
-rw-r--r--    1 1000     1000         2243 Feb 05 11:30 passwd
lftp [email protected]:~> put /etc/group
864 bytes transferred
lftp [email protected]:~> ls
-rw-r--r--    1 1000     1000          864 Feb 10 18:06 group
-rw-r--r--    1 1000     1000          491 Feb 09 23:28 inittab
-rw-r--r--    1 1000     1000         2243 Feb 05 11:30 passwd
lftp [email protected]:~> quit

在这里插入图片描述
(2)让匿名用户可写
1 匿名用户登陆,上传文件,上传失败,系统报错550,没有权限

[root@server_ssh ~]# lftp 172.25.254.227 
lftp 172.25.254.227:~> ls
drwxr-xr-x    2 0        0              31 Jun 23  2016 pub
lftp 172.25.254.227:/> cd /pub
lftp 172.25.254.227:/pub> ls
-rw-------    1 14       50            959 Feb 05 11:15 group
-rw-r--r--    1 1001     50           2243 Feb 05 11:14 passwd
lftp 172.25.254.227:/pub> put /etc/inittab
put: Access failed: 550 Permission denied. (inittab)
lftp 172.25.254.227:/pub> quit

在这里插入图片描述

2 修改pub的权限

[root@server_ssh ~]# cd /var/ftp
[root@server_ssh ftp]# ls
pub
[root@server_ssh ftp]# ls -ld pub
drwxr-xr-x. 2 root root 31 Jun 23  2016 pub
[root@server_ssh ftp]# chmod 775 /var/ftp/pub
[root@server_ssh ftp]# chgrp ftp /var/ftp/pub
[root@server_ssh ftp]# ls -ld pub
drwxrwxr-x. 2 root ftp 31 Jun 23  2016 pub

在这里插入图片描述
再次登陆仍然不能上传

[root@server_ssh ftp]# lftp 172.25.254.227 
lftp 172.25.254.227:~> ls
drwxrwxr-x    2 0        50             31 Jun 23  2016 pub
lftp 172.25.254.227:/> cd /pub
lftp 172.25.254.227:/pub> ls
-rw-------    1 14       50            959 Feb 05 11:15 group
-rw-r--r--    1 1001     50           2243 Feb 05 11:14 passwd
lftp 172.25.254.227:/pub> put /etc/inittab
put: Access failed: 550 Permission denied. (inittab)
lftp 172.25.254.227:/pub> quit

在这里插入图片描述
4 打开匿名用户可写开关,再次登陆依然不可写

[root@server_ssh ftp]# getsebool -a | grep ftp
ftp_home_dir --> on
ftpd_anon_write --> off  ##匿名用户可写开关
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@server_ssh ftp]# setsebool -P ftpd_anon_write on
[root@server_ssh ftp]# lftp 172.25.254.227 
lftp 172.25.254.227:~> cd /pub
cd ok, cwd=/pub
lftp 172.25.254.227:/pub> put /etc/inittab
put: Access failed: 550 Permission denied. (inittab)
lftp 172.25.254.227:/pub> quit

在这里插入图片描述
在这里插入图片描述
原因是服务的配置文件中没有设定匿名用户上传文件

5 配置文件中设定可以上传文件后,再次上传依然不成功

[root@server_ssh ftp]# vim /etc/vsftpd/vsftpd.conf
[root@server_ssh ftp]# systemctl restart vsftpd
[root@server_ssh ftp]# lftp 172.25.254.227 lftp 172.25.254.227:~> cd /pub
cd ok, cwd=/pub
lftp 172.25.254.227:/pub> put /etc/inittab
put: Access failed: 553 Could not create file. (inittab)
lftp 172.25.254.227:/pub> ls
-rw-------    1 14       50            959 Feb 05 11:15 group
-rw-r--r--    1 1001     50           2243 Feb 05 11:14 passwd
lftp 172.25.254.227:/pub> quit

在这里插入图片描述
在这里插入图片描述
6 设定目录可写,再次上传文件,上传成功

[root@server_ssh ftp]# ls -Zd /var/ftp/pub/
drwxrwxr-x. root ftp system_u:object_r:public_content_t:s0 /var/ftp/pub/
[root@server_ssh ftp]# semanage fcontext -a -t public_content_rw_t /var/ftp/pub
[root@server_ssh ftp]# restorecon -FvvR /var/ftp/pub/
restorecon reset /var/ftp/pub context system_u:object_r:public_content_t:s0->system_u:object_r:public_content_rw_t:s0
[root@server_ssh ftp]# ls -Zd /var/ftp/pub/drwxrwxr-x. root ftp system_u:object_r:public_content_rw_t:s0 /var/ftp/pub/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.查看报错的解决方法

1 删除/var/ftp/pub/目录,再次新建目录,更改权限以及目录所有组

[root@server_ssh ~]# rm -fr /var/ftp/pub/
[root@server_ssh ~]# mkdir /var/ftp/pub/
[root@server_ssh ~]# chmod 775 /var/ftp/pub/
[root@server_ssh ~]# chgrp ftp /var/ftp/pub/
[root@server_ssh ~]# ls -ld /var/ftp/pub/
drwxrwxr-x. 2 root ftp 6 Feb 10 13:39 /var/ftp/pub/

在这里插入图片描述
在这里插入图片描述
2 清空日志文件

[root@server_ssh ~]# > /var/log/messages
[root@server_ssh ~]# > /var/log/audit/audit.log 

3 匿名用户登陆上传文件

[root@server_ssh ~]# lftp 172.25.254.227
lftp 172.25.254.227:~> ls
drwxrwxr-x    2 0        50              6 Feb 10 18:39 pub
lftp 172.25.254.227:/> cd /pub
lftp 172.25.254.227:/pub> ls
lftp 172.25.254.227:/pub> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd)
lftp 172.25.254.227:/pub> quit

在这里插入图片描述
4 查看日志文件的内容,文件中含有解决办法

[root@server_ssh ~]# cat /var/log/audit/audit.log 
[root@server_ssh ~]# cat /var/log/messages

*****  Plugin allow_anon_write (53.1 confidence) suggests   ******************

If you want to allow /usr/sbin/vsftpd to be able to write to shared public content
Then you need to change the label on  to public_content_rw_t, and potentially turn on the allow_httpd_sys_script_anon_write boolean.
Do

    # semanage fcontext -a -t public_content_rw_t 
    # restorecon -R -v 
    # setsebool -P allow_ftpd_anon_write 1

在这里插入图片描述
在这里插入图片描述
按照日志文件中的解决办法操作即可解决

#######################################
日志可以查看报错解决办法主要依赖于
setroubleshoot-server-3.2.17-2.el7.x86_64软件包
卸载软件报后日志中不会有解决办法

[root@server_ssh ~]# rpm -qa | grep setroubleshoot
setroubleshoot-server-3.2.17-2.el7.x86_64
setroubleshoot-3.2.17-2.el7.x86_64
setroubleshoot-plugins-3.0.59-1.el7.noarch
[root@server_ssh ~]# yum remove setroubleshoot-server-3.2.17-2.el7.x86_64

在这里插入图片描述
清空日志文件,再次登陆上传文件,查看日志文件

[root@server_ssh ~]# > /var/log/messages
[root@server_ssh ~]# > /var/log/audit/audit.log 
[root@server_ssh ~]# cat /var/log/audit/audit.log 
[root@server_ssh ~]# cat /var/log/messages
[root@server_ssh ~]# lftp 172.25.254.227
lftp 172.25.254.227:~> cd /pub
cd ok, cwd=/pub
lftp 172.25.254.227:/pub> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd)
lftp 172.25.254.227:/pub> quit

在这里插入图片描述
再次安装软件包,重复之前的操作,即可得到报错的解决方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44224894/article/details/86773271
今日推荐