如何用“system_u”标记新创建的文件?

a c*_*der 13 rhel selinux

我刚刚为 freetds 创建了一个空白的 conf 文件,并注意到权限错误:

[root@box etc]# touch freetds.conf.new
[root@box etc]# ll -lZ freetds.conf*
-rw-r--r--. root root system_u:object_r:etc_t:s0   freetds.conf
-rw-rw----. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new
Run Code Online (Sandbox Code Playgroud)

所以我试过:

[root@box]# semanage fcontext -a -t system_u /etc/freetds.conf.new 
Run Code Online (Sandbox Code Playgroud)

但这失败了:

ValueError: Type system_u is invalid, must be a file or device type
Run Code Online (Sandbox Code Playgroud)

我应该使用什么unconfined_usystem_u将文件 freetds.conf.new 上的标签从 更改为?

Ste*_*ris 22

“临时”标签更改是通过以下chcon命令完成的:

bash-4.2# touch freetds.conf.new
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new
bash-4.2# chcon -t etc_t -u system_u freetds.conf.new 
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root system_u:object_r:etc_t:s0       freetds.conf.new
Run Code Online (Sandbox Code Playgroud)

将通过该semanage命令进行永久性更改。这将添加(或修改)一行,/etc/selinux/targeted/contexts/files/file_contexts.local然后可以在其中应用restorecon.

所以,让我们重新开始一个新文件:

bash-4.2# rm freetds.conf.new
bash-4.2# touch freetds.conf.new
bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new
Run Code Online (Sandbox Code Playgroud)

我们可以为此添加一个规则:

bash-4.2# semanage fcontext -a -t etc_t -s system_u /etc/freetds.conf.new
bash-4.2# cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

/etc/freetds.conf.new    system_u:object_r:etc_t:s0
Run Code Online (Sandbox Code Playgroud)

不过,这还没有改变文件

bash-4.2# ls -lZ freetds.conf.new
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   freetds.conf.new
Run Code Online (Sandbox Code Playgroud)

所以现在我们应用它:

bash-4.2# restorecon -vF /etc/freetds.conf.new
restorecon reset /etc/freetds.conf.new context unconfined_u:object_r:etc_t:s0->system_u:object_r:etc_t:s0
bash-4.2# ls -lZ /etc/freetds.conf.new
-rw-r--r--. root root system_u:object_r:etc_t:s0       /etc/freetds.conf.new
Run Code Online (Sandbox Code Playgroud)

ETA:如果您要在更新后将其复制freetds.conf.newfreetds.conf,那么我可能会坚持使用该chcon命令;它更容易,并且现有规则集将在具有正确名称时处理重新标记。semanage如果这是最终名称,我只会使用该表单。