详细说明来源于一个台湾的网站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。