在linux当中selinux是一个非常好的安全工具,它的目标是,用最小的权限做要做的事情。一开始遇到selinux相关的问题的时候,总是按照网上最通用的办法,关掉selinux,当他不存在,既然不存在,也不必研究。但是在生产环境当中,需要在selinux开启的时候完成一些功能,于是,学习就此展开。我们的需求是这样的,使用sftp将文件传送至服务器端的指定目录下,而这个目录是apache httpd 服务存放文件的地方,并且这个用户不能访问除此之外的其他目录。
这里需要记下的是sshd的chroot,selinux的策略
1.chroot部分,依靠下列片段实现。在sshd_config 当中注释掉冲突设置并增添以下内容:
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /var/www/html
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
2,增加对应的seliunx策略组。
module sshdhttpd 1.0;
require {
type httpd_sys_content_t;
type sshd_t;
class dir { getattr unlink ioctl execute append read setattr swapon write lock create rename link search rmdir remove_
name reparent add_name open } ;
class file { open getattr relabelto link unlink ioctl append read setattr write lock create rename relabelfrom } ;
}
#============= sshd_t ==============
allow sshd_t httpd_sys_content_t:dir { getattr unlink ioctl execute append read setattr swapon write lock create rename link s
earch rmdir remove_name reparent add_name open } ;
allow sshd_t httpd_sys_content_t:file { open getattr relabelto unlink ioctl append read setattr write lock create rename relab
elfrom link };
激活方式为:
require {
type httpd_sys_content_t;
type sshd_t;
class dir { getattr unlink ioctl execute append read setattr swapon write lock create rename link search rmdir remove_
name reparent add_name open } ;
class file { open getattr relabelto link unlink ioctl append read setattr write lock create rename relabelfrom } ;
}
#============= sshd_t ==============
allow sshd_t httpd_sys_content_t:dir { getattr unlink ioctl execute append read setattr swapon write lock create rename link s
earch rmdir remove_name reparent add_name open } ;
allow sshd_t httpd_sys_content_t:file { open getattr relabelto unlink ioctl append read setattr write lock create rename relab
elfrom link };
#checkmodule -M -m -o sshdhttpd.mod sshdhttpd.te
#semodule_package -o sshdhttpd.pp -m sshdhttpd.mod
#semodule -i sshdhttpd.pp
#semodule_package -o sshdhttpd.pp -m sshdhttpd.mod
#semodule -i sshdhttpd.pp
参考资料:
http://www.selinuxproject.org/page/ObjectClassesPerms#dir
http://www.selinuxproject.org/page/ObjectClassesPerms#dir