SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系统。在某种程度上 , 它可以被看作是与标准权限系统并行的权限系统。在常规模式中 , 以用户身份运行进程 ,并且系统上的文件和其他资源都设置了权限 ( 控制哪些用户对哪些文件具有哪些访问权 SELINUX 的另一个不同之处在于 , 若要访问文件 , 你必须具有普通访 问权限和 SELINUX 访问权限。因此 , 即使以超级用户身份 root 运行进程 , 根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源限 )标签
示例:
在无 selinux 保护时 , 恶意人员可以尝试利用 web 服务器中的安全漏洞强行进入系统。如果成功 , 将会控制以用户apache 身份运行的进程 , 这时再由一个本地安全漏洞就可能使攻击者获得超级用户的访问权限
查看selinux状态
getenforce
当selinux处于disabled的状态下,不会有任何影响。处于enforcing状态时,会将不符合自己规则的动作拒绝,并给出警告。处于permissive状态,对不符合自己规则的行为进行警告,但不会拒绝。
要改变selinux的状态,需要对/etc/sysconfig/selinux文件进行修改,如下:
vim /etc/sysconfig/selinux
selinux=disabled 关闭状态
selinux=Enforcing 强制状态
selinux=Permissive 警告状态
修改后要重启reboot
当selinux开启时,如果只需要进行enforcing与permissive的状态转换,可以使用以下方式临时修改,重启系统后会恢复原来的状态:
setenforce 0|1 更改selinux运行级别(警告|强制)
WEB服务器的 lftp 进程设置了selinux安全上下文标签public_content_t。 lftp 系统上的文件和资源也设置了 selinux 的上下文标签 , Seliux 策略具有:允许以 lftp 身份运行的进程访问安全上下文为public_content_t的文件的规则,不允许这些进程访问标记其他安全上下文的文件 , 即使常规文件权限指出应该允许这些访问
selinux对文件影响==>安全上下文
selinux对软件影响==>功能开关,关
许多处理文件的命令具有一个用于显示或设置 SELinux 上下文的选项 ( 通常是 -Z ) 。例如 , ps 、 ls 、 cp 和 mkdir 都使用 -Z 选项显示或设置 SELinux 上下文
显示上下文
– ps axZ
– ps -ZC
– ls -Z
[root@localhost ftp]# ls -Zd /var/ftp/
drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /var/ftp/
[安全上下文]:这种格式的文件是lftp可以查看的
更改文件的上下文是为了lftp不能访问的文件可以访问
(文件的上下文为public_content_t:s0 lftp是可以访问的,其他上下文类型lftp是不能访问的)
将/mnt/file1移动到/var/ftp/pub下,file1的安全上下文与原本在/var/ftp/pub下的文件不相同(受到selinux的限制);
可以i看到lftp是无法查看这类文件的,即使默认普通权限是可以的!!!!
什么确定文件的初始 selinux 上下文 ? 通常是父目录。将父目录的上下文指定给新创建的文件。这对 vimcp 和 touch 等命令其作用 , 但是 , 如果文件是在其他位置创建的并且保留了权限 ( 与 mv 或 cp -a 一样 ) 则还将保留 selinux 上下文
1>临时更改(但重启后,又恢复到原来的)
chcon -t 安全上下文 文件
chcon -t public_content_t /var/ftp/file1
2>永久更改
1 semanage fcontext -l 列出所有内核安全上下文列表内容(截图只有一部分)
2 semanage fcontext -l | gerp /var/ftp 查看/var/ftp的内核安全上下文
3 semanage fcontext -a -t public_content_t '/ftphome(/.*)?'
将/ftphome/目录及目录下的所有文件的安全上下文修改为public_content_t。以这种方式修改文件安全上下文是写入文件中的,可以用semanage fcontext -l命令进行查看:
这种永久修改的方式,在系统重启之后才会生效,或者使用restorecon -RvvF /ftpuserhome/命令使其生效。
4 restorecon -FvvR /publicftp/ 进行刷新
5 [root@localhost ~]# semanage fcontext -l | grep /ftpuserhome
/ftpuserhome(/.*)? all files system_u:object_r:public_content_t:s0
6 ls -Z /ftpuserhome/ -R
对于程序selinux是通过getsebool程序安全开进行控制,以vsftpd作为示例,其他配置请参考文章《Linux_ftp服务及常用的文件参数》。
查看软件的服务功能开启状况:
getsebool -a | grep 服务名称
getsebool -a | grep ftp
控制软件的服务功能开关:
setsebool -P 功能bool值 on|off
setsebool -P ftpd_anon_write on
例如:
1>在setenforce 0 警告状态下匿名用户的上传
setenforce 0
getsebool -a | grep ftp 查看ftp的功能状态
setsebool -P ftp_home_dir on 开启建立目录功能(默认OFF)
vim /etc/vsftpd/vsftpd.conf(允许匿名用户上传)
匿名用户的默认身份为ftp,下面两条命令让ftp用户可以上传
chgrp ftp /var/ftp/pub/
chmod 775 /var/ftp/pub/
2>在setenforce 1 强制状态下匿名用户的上传
setenforce 1
getsebool -a | grep ftp
setsebool -P ftpd_anon_write on 开启匿名用户写的功能
chcon -t public_content_rw_t /var/ftp/pub/ 更改文件上下文,不改无法上传
ls -Zd /var/ftp/pub/ 查看修改是否生效
生效!!!
出现问题后,selinux 日志被采集到 cat /var/log/audit/audit.log,但不提供解决方案
yum install setroubleshoot-server.x86_64 软件会对采集到的日志进行处理,将解决方案保存到/var/log/messages