SELINUX ( 安全增强型 Linux ) 是可保护系统安全性的额外机制。
在某种程度上,它可以被看作是与标准权限系统并行的权限系统。在常规模式中,以用户身份运行进程 , 并且系统上的文件和其他资源都设置了权限 ( 控制哪些用户对哪些文件具有哪些访问权。 SELINUX 的另一个不同之处在于 , 若要访问文件 ,
你必须具有普通访问权限和 SELINUX 访问权限。因此,即使以超级用户身份root 运行进程,根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源限 ) 标签。
getenforce
Disabled 代表 SELinux 被禁用
Permissive 代表仅记录安全警告但不阻止可疑行为
Enforcing 代表记录警告且阻止可疑行为
状态切换
在关闭(Disabled)与开启警告permissive、开启强制Enforcing之间进行切换。需要对配置文件:/etc/sysconfig/selinux 进行修改,后重新启动系统。
setenforce 0 ##临时更改SELinux的状态为警告不阻止 Permissive
setenforce 1 ##临时更改SELinux的状态为警告并且阻止 Enforcing
2、类型强制的安全上下文
安全上下文是一个简单的、一致的访问控制属性,主要体现在以下两点:
1 限制文件访问。文件必须拥有相匹配的安全上下文才能being识别访问。
2 对服务,限制认为不安全的服务功能, 设置开关。 开关默认关闭需要时可以打开。
ls -Z #检查文件、目录的安全上下文;
ps -Z #检查进程的安全上下文;
mv:安全上下文则不变;
cp:会重新生成安全上下文。
当selinux处于disabled时候,无安全上下文。文件以及服务的功能不会被限制。
[root@localhost ~]# touch /mnt/file1 #新建文件
[root@localhost ~]# mv /mnt/file1 /var/ftp/ #将其移动到公共家目录中
[root@localhost ~]# ls /var/ftp/
file1 pub
[root@localhost ~]# lftp 172.25.254.111 #使用匿名用户进行访问
lftp 172.25.254.204:~> ls #可以看到所有存在的文件,没有安全上下文的限制
-rw-r--r-- 1 0 0 0 Apr 19 01:33 file1
drwxr-xr-x 2 0 0 31 Mar 07 2014 pub
lftp 172.25.254.204:/> quit
[root@localhost ~]# ls -Z /var/ftp/ #在disabled状态下没有安全上下文 显示?
-rw-r--r-- root root ? file1
drwxr-xr-x root root ? pub
[root@localhost ~]# lftp 172.25.254.111 -u student #本地用户访问
Password:
lftp [email protected]:~> ls
-rw-r--r-- 1 1002 1002 2380 Apr 22 12:10 passwd
lftp [email protected]:~> put /etc/group 上传功能
1006 bytes transferred
lftp [email protected]:~> ls #上传成功
-rw-r--r-- 1 1002 1002 1006 Apr 22 12:13 group
-rw-r--r-- 1 1002 1002 2380 Apr 22 12:10 passwd
lftp [email protected]:~> quit
当selinux处于Enforcing时候,存在安全上下文。文件以及服务的功能被限制。
[root@localhost ~]# vim /etc/sysconfig/selinux
[root@localhost ~]# reboot #在配置文件中修改selinux状态为Enforcing
[root@localhost ~]# getenforce # 查看selinux状态
Enforcing
[root@localhost ~]# ls -Z /var/ftp/ #查看目录中内容的安全上下文
-rw-r--r--. root root system_u:object_r:public_content_t:s0 file1
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 pub
[root@localhost ~]# lftp 172.25.254.204 -u student 使用本地用户进行访问
Password:
lftp [email protected]:~> ls
-rw-r--r-- 1 1000 1000 2380 Apr 22 12:10 passwd
lftp [email protected]:~> put /etc/group
put: Access failed: 553 Could not create file. (group) #无法进行上传功能,功能被限制。
lftp [email protected]:~> quit
[root@localhost ~]# touch /mnt/file2
[root@localhost ~]# mv /mnt/file2 /var/ftp/ #再次创建新文件移动到公共家目录中
[root@localhost ~]# ls /var/ftp/
file1 file2 pub #该目录中确实存在该文件
[root@localhost ~]# lftp 172.25.254.111
lftp 172.25.254.204:~> ls #但是连接后无法显示查看该file2文件
-rw-r--r-- 1 0 0 0 Apr 19 01:33 file1
drwxr-xr-x 2 0 0 31 Mar 07 2014 pub
lftp 172.25.254.111:/> quit
[root@localhost ~]# ls -Z /var/ftp/ #查看文件的安全上下文
-rw-r--r--. root root system_u:object_r:public_content_t:s0 file1
-rw-r--r--. root root unconfined_u:object_r:mnt_t:s0 file2 #其中file2的安全上下文不适合
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 pub
bool值为0:off 开关关闭。功能无法使用
bool值为1:on 开关开启。功能可以使用
getsebool -a#查看当前selinux的bool值列表。
getsebool -a |grep ftp #筛选出包含ftp的bool值列表。
setsebool -P ftp_home_dir 1 #设置某一项的布尔值,-P表示 永久开启
修改之后本地用户的上传与删除功能可以正常使用:
4、修改文件以及目录的安全上下文
临时修改
chcon -t 新的安全上下文 文件名称/目录名称
chcon -t public_content_t /var/wei -R 临时修改selinux 安全上下文
semanage fcontext -a -t public_content_t "/var/wei(/.)?" #永久更改目录的安区上下文;(/.)?表示目录本身以及已经存在的文件和将来新建的文件。
restorecon -R /varwei/ # 更该完之后进行扫描 使得更改生效。
semanage fcontext -l |grep /var/ftp #查看目录/var/ftp的安全上下文设置情况。
[root@localhost ~]# systemctl restart vsftpd.service
Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details.
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# mkdir /var/weihome #创建目录
[root@localhost ~]# cd /var/weihome/
[root@localhost weihome]# ls
[root@localhost weihome]# touch test{1..5}
[root@localhost weihome]# ls
test1 test2 test3 test4 test5
[root@localhost weihome]# ls -ZR /var/weihome/ #检查上下文
/var/weihome/:
-rw-r--r--. root root unconfined_u:object_r:var_t:s0 test1
-rw-r--r--. root root unconfined_u:object_r:var_t:s0 test2
-rw-r--r--. root root unconfined_u:object_r:var_t:s0 test3
-rw-r--r--. root root unconfined_u:object_r:var_t:s0 test4
-rw-r--r--. root root unconfined_u:object_r:var_t:s0 test5
[root@localhost weihome]#
永久修改目录的安全上下文,并核实实验效果。
[root@localhost weihome]# semanage fcontext -a -t public_content_t "/var/weihome(/.*?)"
[root@localhost weihome]# ls -Zd /var/weihome/
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 /var/weihome/
[root@localhost weihome]# restorecon -R /var/weihome/ #重新扫描,确定修改
[root@localhost weihome]# ls -Zd /var/weihome/
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 /var/weihome/
[root@localhost weihome]# ls -ZR /var/weihome/
/var/weihome/:
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 test1
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 test2
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 test3
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 test4
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 test5
[root@localhost weihome]#
[root@localhost ~]# > /var/log/messages #清空日志
[root@localhost ~]# cat /var/log/messages
[root@localhost ~]# ls /var/ftp/
file1 file2 pub test1 # 强制安全上下文公共目录无法显示
[root@localhost ~]# lftp 172.25.254.111
lftp 172.25.254.111:~> ls
drwxr-xr-x 2 0 0 6 Jun 23 2016 pub
lftp 172.25.254.111:/> exit
[root@localhost ~]# cat /var/log/messages #在次查看时被记录到日志中
Apr 22 22:14:03 localhost dbus[660]: [system] Activating service name='org.fedoraproject.Setroubleshootd' (using servicehelper)
Apr 22 22:14:03 localhost dbus-daemon: dbus[660]: [system] Activating service name='org.fedoraproject.Setroubleshootd' (using servicehelper)
Apr 22 22:14:04 localhost dbus[660]: [system] Successfully activated service 'org.fedoraproject.Setroubleshootd'
当不存在该插件的时候,不会讲问题以及解决办法出现在/var/log/messages 中
在另一个生成日志的文件里还有
/var/log/audit/audit.log