Fedora CentOS 等Linux发行版SELinux安全设置问题重谈

 

我曾经写过两篇日志,都是关于SELinux的安全设置问题,请参考:

我们到底该不该使用SELinux

关于SELINUX的权限问题

前两天,一同事去现场给客户部署系统,装好RHEL5.6之后,发现ftp和http都连不上,但是服务器的启动和服务状态都正常,ftp的返回结果是

500 OOPS: cannot change directory:/home/userDir

我再让他查看下权限、登陆的用户等,这些都没有问题,然后我问他,SELinux的状态是什么样的?他说是打开的,我就知道是这个问题了,在这些版本之后,默认SELinux都对网络操作本地文件系统做了很严格的控制,我觉得有必要在说一说这些东西。

首先是两个命令,getsebool和setsebool,从名字上面就可以知道,这是设置SELinux相关配置的开关(布尔值),那就说明各项开关的作用就行了。

//用此命令即可查询对应的SELinux开放情况
[root@rhel6 www]# getsebool -a |grep httpd
allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> on
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_read_user_content --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
 
ftp
//打开Anonymous文件共享
chcon -R -t public_content_t /var/ftp
//设置一个可以上传文件的文件夹
chcon -t public_content_rw_t /var/ftp/incoming
//同时需要打开allow_ftpd_anon_write
setsebool -P allow_ftpd_anon_write=1
//设置用户可以访问家目录
setsebool -P ftp_home_dir 1
//以镜像方式运行ftp服务器
setsebool -P ftpd_is_daemon 1
//彻底关闭SELinux对FTP的保护
setsebool -P ftpd_disable_trans 1
 
{httpd}
//特定的域写入权限
setsebool -P allow_httpd_anon_write=1
//或者
setsebool -P allow_httpd_sys_script_anon_write=1
//打开http 的cgi功能
setsebool -P httpd_enable_cgi 1
//打开http访问用户家目录
setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t ~user/public_html
//运行http登陆终端
setsebool -P httpd_tty_comm 1
//打开http服务互不干扰
setsebool -P httpd_unified 0
//可装载模块作为http服务在同样的context下服务
setsebool -P httpd_builtin_scripting 0
//打开http脚本访问网络
setsebool -P httpd_can_network_connect 1
//禁用suexec传输
setsebool -P httpd_suexec_disable_trans 1
//停止SELinux对httpd的保护
setsebool -P httpd_disable_trans 1
service httpd restart
 
{named}
//打开更新主域
setsebool -P named_write_master_zones 1
//停止SELinux对named的保护
setsebool -P named_disable_trans 1
service named restart
 
{nfs}
//设置nfs为只读
setsebool -P nfs_export_all_ro 1
//设置nfs可写
setsebool -P nfs_export_all_rw 1
//打开nfs家目录访问
setsebool -P use_nfs_home_dirs 1
 
{samba}
//打开另外的目录共享
chcon -t samba_share_t /directory
//打开多域共享
setsebool -P allow_smbd_anon_write=1
//将服务器设置成samba服务器,并允许家目录共享
setsebool -P samba_enable_home_dirs 1
//用其他samba服务器共享本机的家目录
setsebool -P use_samba_home_dirs 1
//停止SELinux对samba的保护
setsebool -P smbd_disable_trans 1
service smb restart
 
rsync
//打开rsync共享
chcon -t public_content_t /directories
//打开多域共享
setsebool -P allow_rsync_anon_write=1
//停止SELinux对rsync的保护
setsebool -P rsync_disable_trans 1
 
{kerberos}
//打开kerberos
setsebool -P allow_kerberos 1
//以 kadmind 或 krb5kdc 方式运行
setsebool -P krb5kdc_disable_trans 1
service krb5kdc restart
setsebool -P kadmind_disable_trans 1
service kadmind restart
 
{nis}
//打开nis支持
setsebool -P allow_ypbind 1

看完这些,就应该知道大概怎么设置SELinux了,这里只列出经常要用的。

具体请参考:http://linux.die.net/man/8/setsebool