详细说明来源于一个台湾的网站http://www.suse.url.tw/redhat/SELinux.htm
下面总结一些重点。
以vsftp为例,一定要牢记type是什么类型。所对应的sebool是什么规则,一般的话都是allow_xxx_anon_write 这个xxx可替换为fpt的守护进程ftpd以及samba的守护进程smbd
要修改不同的权限先查看该目录是什么状态使用命令
一定要先使sebool生效
[root@localhost ftp]# getsebool -a|grep ftp
allow_ftpd_anon_write –> on
allow_ftpd_full_access –> off
allow_ftpd_use_cifs –> off
allow_ftpd_use_nfs –> off
ftp_home_dir –> off
ftpd_connect_db –> off
httpd_enable_ftp_server –> off
sftpd_anon_write –> off
sftpd_enable_homedirs –> off
sftpd_full_access –> off
sftpd_write_ssh_home –> off
tftp_anon_write –> off
如果红色标记为off 使用 setsebool -P allow_ftpd_anon_write on 注意:一定要跟上**-P** 意思是立即生效且重启时候同样有效
查看selinux 上下文ls -lZD /path/to/dir
修改selinux 上下文
方法一 直接修改 chcon -t allow_xxx_anon_write /path/to/dir
方法二 参照xxx文件[夹] chcon -t –reference=/path/to/dir/old /path/to/dir/new
环境说明。一台server 192.168.122.49 一台localhost 192.168.122.101
例如
[root@localhost ftp]# ls -lZD
drwxr-xrwx. root root system_u:object_r:public_content_t:s0 pub
上面所示type为public_content_t是不接受上传的。因为没有写权限。
例如我用server来测试
lftp 192.168.122.101:/pub> put root.ldif
put: Access failed: 553 Could not create file. (root.ldif)
我们需要把type修改为public_content_rw_t就需要在本地修改,使用下面的命令
chcon -t public_content_rw_t /var/ftp/pub
再来查看权限
[root@localhost ftp]# ls -lZD
drwxr-xrwx. root root system_u:object_r:public_content_rw_t:s0 pub
这样就有了写入的权限。
lftp 192.168.122.101:/pub> put root.ldif
203 bytes transferred#这就是成功的标志
FTP 服務:
ftpd_disable_trans:
是否關閉 SELinux 對 ftpd daemon 的保護。預設為 off。
allow_ftpd_anon_write:
是否允許 client 上傳檔案至標記為 public_content_rw_t 的目錄。預設為 off。
ftp_home_dir:
是否允許使用者讀取/寫入檔案於自己家目錄內。預設為 off。
SAMBA 服務:
smbd_disable_trans:
是否關閉 SELinux 對 smbd daemon 的保護。預設為 off。
nmbd_disable_trans:
是否關閉 SELinux 對 nmbd daemon 的保護。預設為 off。
allow_smbd_anon_write:
是否允許對標記為 public_content_rw_t 的目錄具有寫入的權限。預設為 off。
samba_enable_home_dirs:
是否允許使用者能存取自己的家目錄。預設為 off。