如何创建自定义SELinux标签


11

我编写了一个服务/单个二进制应用程序,试图在Fedora 24上运行,它使用systemd运行,二进制文件已部署到 /srv/bot

我编写的此服务/应用程序需要在该目录中创建/打开/读取和重命名文件。

我首先开始基于SELinux创建新策略:允许进程在特定目录中创建任何文件

但是当我的应用需要重命名时,输出将显示警告:

#!!!! WARNING: 'var_t' is a base type.
allow init_t var_t:file rename;

我四处搜寻,发现我应该使用比基本类型更具体的SELinux标签,但是所有在线示例都向您展示了httpd / nginx / etc中的现有标签。

有没有一种方法可以仅为我自己的应用程序创建自定义标签?

我的想法是创建类似myapp_var_t的东西,使用

semanage fcontext -a -t my_app_var_t '/srv/bot(/.*)?'
restorecon -R -v /srv/bot

.pp将使用此自定义类型的自定义文件

如果有更好的解决方法,那也可以。

谢谢

更新资料

经过更多搜索之后,我认为我要执行的操作的正确术语是创建新词types,这使我进入了 https://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3036916

基本上说,运行

sepolgen /path/to/binary

而且我能够得到一个模板,然后将其编译成pp文件并加载,仍然会出现一些错误,但是看起来我已经接近要执行的操作了。

如果我可以使用,我会更新这篇文章

Answers:


11

以跑步为起点

sepolgen /path/to/binary

这给你:

app.fc
app.sh
app.if
app.spec
app.te

要创建一个新文件SELinux file context以应用于包含程序/守护程序将要修改的文件的父目录,请编辑app.te文件并添加:

type app_var_t;
files_type(app_var_t)

第一行声明了新类型,第二行调用了执行一些魔术操作并将其设置为文件类型的宏(结果是您不能在文件或目录上使用流程上下文行app_exec_t),有关更多信息,请参见“重新访问SELinux类型”。不同类型的信息

声明类型后,您需要告诉SELinux您的应用程序可以使用它,就我而言,我添加了

allow app_t app_var_t:dir { add_name remove_name write search};
allow app_t app_var_t:file { unlink create open rename write read };

这两行基本上说,允许app_t类型(这是我的应用程序的域),并使用上下文写入/搜索/ etc目录,app_var_t并允许它使用上下文app_var_t创建/打开/删除/ etc文件

难题的最后一部分是以某种方式告诉SELinux哪种文件夹和文件应该获得每种类型,您可以通过编辑app.fc文件来完成此操作(fc =>文件上下文)

在我的情况下,该文件只有两行:

/srv/bot/app        --  gen_context(system_u:object_r:app_exec_t,s0)
/srv/bot(/.*)?          gen_context(system_u:object_r:app_var_t,s0)

第一行直接指向部署在我的服务器上的二进制文件,因此该行获取app_exec_t上下文。

第二行表示:

将app_var_t应用于目录/ srv / bot以及目录/ srv / bot内的所有文件

请注意第一行在--路径和到之间的调用方式gen_context--意味着,仅将其应用于文件。在第二种情况下,我们什么都没有(只有空格),这意味着将其应用于所有匹配的目录和文件,这正是我想要的,另一种选择是-d仅应用目录。

我现在有一个有效的策略,可以使用自定义策略部署我的应用程序,并且一切正常。(我的策略在.te文件中有很多条目,但这不在此问题的范围内。)

帮助我获得此解决方案的额外阅读材料:

sepolgen让事情变得更轻松

在盲目地审核之前先想一想-2 mydomain

SELinux FOR RED HAT DEVELOPERS(Long PDF)

SElinux模块(1):类型和规则

样本策略(特别是PostgreSQL)

了解文件上下文文件


或使用CIL
Jakuje

sepolgen /path/to/binary为我吐出语法错误。我正在使用RHEL 7.6。sepolgen --application /path/to/binary如果您的目标是为特定应用程序编写策略,我认为这是正确的语法?
jayhendren

您的.te文件在编译模块时也会对我抛出语法错误:app.te:5:ERROR 'This block has no require section.' at token 'files_type' on line 5:。如果我添加一个require部分,ERROR 'syntax error' at token 'files_type' on line 13:
则会

抱歉,我无法再使用Fedora机器对其进行测试,但是可能是因为从版本24开始,他们更改了语法。
fmpwizard
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.