Linux 系统安全SELinux讲解配置

1.1.3 SElinux配置文件
vi /etc/selinux/config

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

enforcing - SELinux security policy is enforced.

permissive - SELinux prints warnings instead of enforcing.

disabled - SELinux is fully disabled.

SELINUX=enforcing

SELINUX=disabled

SELINUXTYPE= type of policy in use. Possible values are:

targeted - Only targeted network daemons are protected.

strict - Full SELinux protection.

SELINUXTYPE=targeted

SELINUX有「disabled」「permissive」,「enforcing」3种选择。

1.模式的设置
enforcing:强制模式,只要selinux不允许,就无法执行
permissive:警告模式,将该事件记录下来,依然允许执行
disabled:关闭selinux;停用,启用需要重启计算机。

2.getsebool命令
获取本机selinux策略值,也称为bool值。
getsebool -a 命令同sestatus -b
[root@redhat files]# getsebool -a
NetworkManager_disable_trans –> off
allow_cvs_read_shadow –> off
allow_daemons_dump_core –> on
allow_daemons_use_tty –> off
allow_execheap –> off
allow_execmem –> on
allow_execmod –> off
allow_execstack –> on
allow_ftpd_anon_write –> off /是否允许ftp匿名访问/
allow_ftpd_full_access –> off

setsebool命令
setsebool -P allow_ftpd_anon_write=1
-P 是永久性设置,否则重启之后又恢复预设值。
示例:
[root@redhat files]# setsebool -P allow_ftpd_anon_write=1
[root@redhat files]# getsebool allow_ftpd_anon_write
allow_ftpd_anon_write –> on
说明:如果仅仅是安全上下文中设置了vsftpd进程对某一个目录的访问,配置文件中也允许可写,但是selinux中策略中不允许可写,仍然不可写。所以基于selinux保护的服务中,安全性要高于很多。
1.3 SElinux应用
selinux的设置分为两个部分,修改安全上下文以及策略,下面收集了一些应用的安全上下文,供配置时使用,对于策略的设置,应根据服务应用的特点来修改相应的策略值。
1.3.1 SElinux与samba
1.samba共享的文件必须用正确的selinux安全上下文标记。
chcon -R -t samba_share_t /tmp/abc
如果共享/home/abc,需要设置整个主目录的安全上下文。
chcon -R -r samba_share_t /home
2.修改策略(只对主目录的策略的修改)
setsebool -P samba_enable_home_dirs=1
setsebool -P allow_smbd_anon_write=1
getsebool 查看
samba_enable_home_dirs –>on

SELinux安全
一、SELinux配置文件
在CentOS 7系统中部署SELinux非常简单,由于SELinux已经作为模块集成到内核中,默认SELinux已经处于激活状态。对管理员来说,更多的是需要配置与管理SELinux,CentOS 7系统中SELinux全局配置文件为/etc/sysconfig/selinux,内容如下:
[[email protected] ~]# vim /etc/sysconfig/selinux

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

enforcing - SELinux security policy is enforced.

permissive - SELinux prints warnings instead of enforcing.

disabled - No SELinux policy is loaded.

SELINUX=enforcing

SELINUXTYPE= can take one of these two values:

targeted - Targeted processes are protected,

mls - Multi Level Security protection.

SELINUXTYPE=targeted
SELinux=enforcing为SELinux总开关,有效值可以是enforcing、permissive或disabled。
其中,disabled代表禁用SELinux功能,由于SELinux是内核模块功能,所以如果设置禁用,需要重启计算机。permissive代表仅警告模式,处于此状态下时,当主题程序试图访问无权限的资源时,SELinux会记录日志但不会拦截该访问,也就是最终访问是成功的,只是在SELinux日志中记录而已。enforcing模式代表强制开启,SELinux会拦截非法的资源访问并记录相关日志。
使用setenforce可以临时在enforcing模式与permissive模式之间切换,切换会被立刻应用于当前系统,计算机重启后无效,永久修改模式需要修改配置文件。
[[email protected] ~]# setenforce 0 #设置SELinux为permissive模式
[[email protected] ~]# setenforce 1 #设置SELinux为enforcing模式

6.2.6 查看与修改布尔值
SELinux布尔值可以实时被修改。如,你可以在不重新加载或编译SELinux策略的情况下允许服务访问NFS文件系统。getsebool是用来查看SELinux布尔值的命令,用法比较简单,-a选项用来查看所有的布尔值。一般建议管理员通过管道过滤自己需要的布尔值参数,如getsebool -a |grep ftp过滤与FTP相关的布尔值信息,显示效果中左侧为关键词,右侧为开关,on代表开,off代表关,具体命令如下。
[[email protected] ~]# getsebool -a
abrt_anon_write off
abrt_handle_event off
allow_console_login on
allow_cvs_read_shadow off
allow_daemons_dump_core on
allow_daemons_use_tcp_wrapper off
allow_daemons_use_tty on
allow_domain_fd_use on
… …部分内容省略… …
修改SELinux布尔值状态也非常简单,使用setsebool name X即可实现。其中,name是布尔值名称,X代表on或off。默认setsebool命令修改的布尔值参数会立即生效,但计算机重启后会被还原,如果希望永久修改,需要使用-p参数。
[[email protected] ~]# setsebool ftp_home_dir on
[[email protected] ~]# setsebool -p ftp_home_dir on

可以执行以下命令
setsebool allow_ftpd_full_access 1
setsebool allow_ftpd_use_cifs 1
setsebool allow_ftpd_use_nfs 1
setsebool ftp_home_dir 1
setsebool httpd_enable_ftp_server 1
setsebool tftp_anon_write 1

setenforce: SELinux is disabled解决办法
2014-10-21 17:01 来源: IT技术学习网 阅读: 19674
如果在使用setenforce命令设置selinux状态的时候出现这个提示:setenforce: SELinux is disabled
那么说明selinux已经被彻底的关闭了
如果需要重新开启selinux,请按下面步骤:
vi /etc/selinux/config
更改为:SELINUX=1
必须重启linux,不重启是没办法立刻开启selinux的
重启完以后,使用getenforce,setenforce等命令就不会报“setenforce: SELinux is disabled”了
这时,我们就可以用setenforce命令来动态的调整当前是否开启selinux。

★★ 暂时性的关掉或开启 selinux ★★

getenforceEnforcing sudo setenforce 0
getenforcePermissive sudo setenforce 1
$ getenforce
Enforcing

★★ 永久性的关掉 selinux ★★
$ sudo vi /etc/sysconfig/selinux
找到
SELINUX=enforcing
然后修改为
SELINUX=disabled
要重新开机 reboot / restart 后才会套用

Linux中FTP的使用
转载 2015年09月28日 14:32:43
• 323
转自:http://blog.163.com/fankb222@126/blog/static/7117402320124743024279/
1、首先安装vsftpd,如果未安装,则执行yum -y install vsftpd,这样将会自动在网上down and setup
vsftpd。
2、创建ftp 用户组及用户:
# groupadd ftpgroup
# useradd ftpuser -g ftpgroup -d /ftp -m
# passwd ftpuser
输入密码2遍
/ftp是ftp 用户访问的文件夹
3、在windows中cmd执行ftp IP显现
500 OOPS: vsftpd: cannot locate user specified in ‘ftp_username’:ftp
的错误消息
需要在vsftpd.conf中加入了ftp_username=ftpuser(用户)这一行,ftp_username的缺省用户应该是ftp

4、修改vi /etc/vsftpd/vsftpd.conf 文件 将下面的注释去掉
Anon_upload_enable=yes
Anon_mkdir_write_enable=yes
Write_enable=yes
5、/etc/init.d/vsftpd restart后成功登陆
如果出现“550 create directory operation failed”
是SELinux安装机制搞的鬼.只要disable SELinux就可以了.

vi /etc/selinux/config

将 SELINUX=XXX –>XXX 代表级别
改为
SELINUX=disabled
或者setsebool -P ftpd_disable_trans on 或者 setsebool -P ftp_home_dir on
如果不能执行,提示“
Could not change active booleans: Invalid boolean

可以执行以下命令
setsebool allow_ftpd_full_access 1
setsebool allow_ftpd_use_cifs 1
setsebool allow_ftpd_use_nfs 1
setsebool ftp_home_dir 1
setsebool httpd_enable_ftp_server 1
setsebool tftp_anon_write 1

6、 service vsftpd restart

当然,我们现在知道这个问题是由于SELinux引起的,但还不知其所以然,实际上问题的原因此时已经被audit进程记录到了相应的日志里,可以这样查看:
shell> audit2why < /var/log/audit/audit.log

5.启动vsftp服务器
service vsftpd start 开启命令
service vsftpd restart 重启
service vsftpd stop 停止

关于CentOS/RHEL中SELinux的相关学习记录整理
linux入门教程 memory 发布于December 19, 2016 标签: CentOS, Linux
很多运维人出于方便,将seLinux默认给关闭了,我以前也这样干,后来发现,在内网这样干的确挺省事儿,但公网服务器这样干了,的确有点SB,所以这儿分享一些关于SELinux的学习笔记的整理文档
配置文件路径
/etc/sysconfig/seLinux
SELinux配置文件中可修改项有两项
开机的三种状态
SELINUX = Enforcing (默认)

Disabled : 停用SELinux功能
Permissive : 仅显示警告信息,不阻止
Enforcing : 强制执行SELinux功能,产生警告信息
SELINUXTYPE=targeted

strict : 完整的保护功能,包含网络服务,一般指令及应用程序
targeted : 保护网络相关服务
网络相关服务包括
dhcpd
httpd
mysqld
named
nscd
ntpd
portmap
postgres
snmpd
squid
syslogd
SELinux相关命令
sestatus #查看SELinux的状态
sestatus -b#查看application管理状态
getenforce #显示目前SELinux工作模式
setenforce 0#临时将SELinux模式设为宽容模式
setenforce 1#临时将SELinux模式设为强制模式
注:setenforce必需在SELinux enable状态才有用
ls -Z 文档名#查看SELinux对档案管理状态
ls -dZ 资料夹#查看SELinux对资料夹管理状态
chcon#变更档案、资料夹管理
getsebool#查看application管理状态
setsebool#变更application管理
restorecon#恢复成原有的SELinux type
semanage#安全性文件的查询与修改
semanage port -l |grep http#查看SELinux管理http套件所使用的端口
semanage port -a -t http_port_t -p tcp 90#加入90端口给httpd使用
注:必需安装policycoreutils-python套件,在加入Port时需先检查该port是否已经被使用了。
seinfo#查看政策中规则数量
注:必需安装setools-console套件
sealert -l #SELinux错误信息详细列出,为错误代码。
注:必需安装setroubleshoot及setroubleshoot-server套件,安装完后需要重启系统。
查看SELinux状态
sestatus

getenforce
SELinux 使用思路 在SELinux开启的情况下,配置vsftpd服务
1】设置SELinux 允许模式
setenforce Permissive
2】安装启动vsftpd 服务
yum install vsftpd -y
service vsftpd start
3】测试
匿名登录并下载
使用本地用户登录,并下载,上传
4】设置SELinux 强制模式
setenforce Enforcing
5】再次测试相关功能
匿名用户登录并下载 仍然可以
使用本地用户登录,并下载,上传 — 被拒绝
6】配置SELinux,放行需要的功能
6.1】方法一 看日志
正常情况下 日志会在服务器的 /var/log/messages 文件中存在
还会在 /var/log/audit/audit.log 存在
查看日志
tail /var/log/messages
sealert -l xxxxxxxxxxxxxxxxxxxx
sealert -a /var/log/audit/audit.log
日志中提示说
setsebool -P ftp_home_dir=1
6.2】方法二 看man手册
man -k ftp | grep selinux
man 8 ftp_selinux

开了SELinux和防火墙,没想到引出了vsftp的问题。FTP登录报错:500 OOPS: cannot change directory。下面来看看产生这个问题的原因和对策。

首先,分析一下冲突原因:
1. 为锁定用户在自己的home目录中,在vsftpd.conf打开chroot_local_user。
这样FTP登录用户的“/”,就是passwd中的home path,比如/var/www/a.com/。避免FTP用户跑到/etc乱闯。这样设置过,FTP登录时,会自动执行CWD /var/www/html/www.xxx.com,并且把这个目录设置为FTP进程的根目录,用户就无法离开了。
vi /etc/vsftpd/vsftpd.conf

You may specify an explicit list of local users to chroot() to their home

directory. If chroot_local_user is YES, then this list becomes a list of

users to NOT chroot().

chroot_local_user=YES

chroot_list_enable=YES

(default follows)

chroot_list_file=/etc/vsftpd/chroot_list

当然也可以用chroot_list_enable=YES的办法。但要逐个在chroot_list中指定FTP用户名,很麻烦。也容易出现疏漏。所以还是推荐用chroot_local_user来限制。

  1. 下面,问题就出来了。打开SELinux后,SELinux会阻止ftp daemon读取用户home目录。所以FTP会甩出一句 “500 OOPS: cannot change directory”。无法进入目录,出错退出。

解决办法有两个:

  1. 降低SELinux安全级别,把enforcing降低到permissive
    vi /etc/sysconfig/selinux

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

enforcing - SELinux security policy is enforced.

permissive - SELinux prints warnings instead of enforcing.

disabled - SELinux is fully disabled.

SELINUX=permissive

这时FTP的登录功能就正常了。但降低整体系统安全作为代价来解决一个小问题,这总不是最佳方案。

  1. 经过研究,又找到了另一个更理想的办法。首先查看SELinux中有关FTP的设置状态:
    getsebool -a|grep ftp

allow_ftpd_anon_write –> off
allow_ftpd_full_access –> off
allow_ftpd_use_cifs –> off
allow_ftpd_use_nfs –> off
allow_tftp_anon_write –> off
ftp_home_dir –> off
ftpd_connect_db –> off
ftpd_disable_trans –> on
ftpd_is_daemon –> on
httpd_enable_ftp_server –> off
tftpd_disable_trans –> off

经过尝试发现,打开ftp_home_dir或者 ftpd_disable_trans。都可以达到在enforcing级别下,允许FTP正常登录的效果。

setsebool -P ftp_home_dir 1

CentOS6里,是这样

setsebool -P allow_ftpd_full_access 1

service vsftpd restart

加-P是保存选项,每次重启时不必重新执行这个命令了。最后别忘了在/etc/sysconfig/selinux中,修改SELINUX=enforcing。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章