semanage 命令不改变文件上下文

semanage 命令不改变文件上下文

我正在尝试更改上传目录的 selinux 上下文以启用匿名上传。

这是目录路径 /var/ftp/upload

这是默认上下文

[root@server ftp]# ls -Z upload
drwxr-xr-x.root root unconfined_u:object_r:public_content_t:s0 上传

我尝试使用此命令来更改目录的类型

[root@server ftp]# semanage fcontext -a -t public_content_rw_t upload
[root@server ftp]# restorecon -v 上传

它没有改变,这里有什么错误?

[root@server ftp]# ls -Z pub
drwxr-xr-x.root root unconfined_u:object_r:public_content_t:s0 上传

答案1

semange 和 chcon 之间的区别在于,chcon 是“临时的”,如果系统重新标记,文件/目录中存在的上下文将会丢失,而使用 semanage 可以使 selinux 上下文持久。

为了使 semanage 工作,您必须提供文件或目录的完整路径,这就是为什么 semanage fcontext -a -t public_content_rw_t upload/不起作用但semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)?可以;restorecon 不需要完整路径。

答案2

这是默认上下文

[root@server ftp]# ll -Zd upload/
drwxr-xr-x.root root unconfined_u:object_r:public_content_t:s0 upload/

我尝试使用此命令来更改上下文

[root@server ftp]# semanage fcontext -a -t public_content_rw_t upload/
[root@server ftp]# ll -Zd upload/
drwxr-xr-x.root root unconfined_u:object_r:public_content_t:s0 upload/
[root@server ftp]# restorecon -R -v upload
[root@server ftp]# ll -Zd upload/
drwxr-xr-x.root root unconfined_u:object_r:public_content_t:s0 upload/

它不起作用,但是这个命令会将上下文写入/etc/selinux/targeted/contexts/files/file_contexts.local文件中

看这里

# 此文件由 libsemanage 自动生成
# 不要直接编辑。

上传/system_u:object_r:public_content_rw_t:s0

现在我尝试了这个命令(工作指令

[root@server ftp]# semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)?”
[root@server ftp]# restorecon -R -v upload
restorecon 重置 /var/ftp/upload 上下文 unconfined_u:object_r:public_content_t:s0->unconfined_u:object_r:public_content_rw_t:s0
如今情况已经改变。
[root@server ftp]# ll -Zd upload/
drwxr-xr-x.root root unconfined_u:object_r:public_content_rw_t:s0 upload/

但我真的不知道它为什么起作用,看看命令的区别。

我在手册页中找到了答案man ftpd_selinux

semanage fcontext -a -t public_content_rw_t“ / var / ftpd / incoming(/.*)?”

答案3

根据这一页

file_contexts.local文件存储上下文未找到新创建的文件和目录file_contexts

这就是您在中找到日志消息的原因file_contexts.local

使用 更改 SELinux 上下文时semanage fcontext -a,使用完整路径到文件或目录,以避免在文件系统重新标记后或restorecon运行命令后文件被错误标记。

这是使用完整路径进行正确重新标记的提示。

答案4

尝试

chcon -t public_content_rw_t /var/ftp/upload

它会起作用的。

相关内容