AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 806596
Accepted
Guss
Guss
Asked: 2016-10-03 01:27:32 +0800 CST2016-10-03 01:27:32 +0800 CST 2016-10-03 01:27:32 +0800 CST

SELinux:如何创建新的文件类型

  • 772

在 RHEL/CentOS 7 上,我正在尝试为文件创建新的 SELinux 安全上下文,以支持我正在编写的新服务。

我已经为我的新服务创建了一个类型强制文件,但我无法创建系统将识别为文件类型的新类型。

我正在根据这个CentOS 5“构建本地策略模块”文档工作,它指示我创建一个 TE 文件,然后使用checkmodule并semodule_package编译它。

如果我只是写在我的 TE 文件中:

type myservice_spool_t;

然后 TE 编译得很好,但是当我尝试时,semanage fcontext我得到了这个:

$ sudo semanage fcontext -a -t myservice_spool_t "/var/spool/myservice(/.*)?" 
ValueError: Type myservice_spool_t is invalid, must be a file or device type

我已经阅读了各种教程,但没有找到一个有效的例子——我看到的一切都是:

  • 过时的 - 例如这个RHEL 4 SELinux 文档页面说应该使用type myservice_spool_t, file_type;但checkmodule说:ERROR 'attribute file_type is not declared'
  • 不完整 - 例如这个答案会让我使用宏file_type(),但checkmodule说:ERROR 'This block has no require section.' at token 'files_type'
  • 或完全缺失 - 例如,针对 RHEL 7 的新 SELinux 指南没有任何关于如何创建新策略的信息,除了使用audit2allow.

SELinux 项目网站完全没用,因为我找不到一个工作示例

我会很感激一个简单的简洁示例,说明如何编写一个 TE 文件,该文件引入了一种新的类型,semanage fcontext将被批准。

[更新]

我找到了这个用于创建策略文件的 Gentoo 文档,其中有一些有用的解释和示例。

centos7 selinux rhel7
  • 3 3 个回答
  • 5016 Views

3 个回答

  • Voted
  1. Best Answer
    Guss
    2016-10-03T22:30:07+08:002016-10-03T22:30:07+08:00

    我发现我遇到的问题是因为我没有正确编译模块。结果,宏可能没有“接受”,并且checkmodule策略编译器错误消息并没有真正帮助理解这一点。

    要使所有这些宏正确扩展,需要使用 SELinux 提供的 Makefile 编译策略 - 使用名为 myservice_spool.te 的 TE 文件,应该执行:

    make -f /usr/share/selinux/devel/Makefile myservice_spool.pp
    

    这将创建一个扩展了所有宏的临时 TE 文件,然后调用相关编译器创建myservice_spool.pp.

    OP 中链接的 Gentoo 文档有更多信息,尽管文件路径对于 CentOS 系统不正确。

    如果您查看tmp目录中生成的 TE 模板(SELinux makefile 有助于保留该模板),您会发现“属性”确实是处理将类型指定为文件的正确方法,但我们必须使用require它们才能使它们工作- SELinux TE 文件似乎工作的方式是您不会将任何符号神奇地导入配置文件 - 您必须require使用您使用的任何东西。

    所以设置新文件类型的正确非宏化方法是这样的(从 TE 生成的模板复制):

    type myservice_spool_t;
    require {
        attribute spoolfile;
        attribute file_type, non_security_file_type, non_auth_file_type;
    } # end require
    typeattribute myservice_spool_t file_type, non_security_file_type, non_auth_file_type, spoolfile;
    
    • 3
  2. Matthew Ife
    2016-10-03T11:56:50+08:002016-10-03T11:56:50+08:00

    您需要将其声明为 files 属性的成员,以便它具有重新标记权限。

    尝试

    type myservice_spool_t;
    files_type(myservice_spool_t)
    

    或者在你的情况下更好..

    type myservice_spool_t;
    files_spool_file(myservice_spool_t)
    

    鉴于您实际上正在制作一个假脱机文件。如果其他宏在其策略中具有“管理假脱机”权限,则这使其他宏能够使用该假脱机。

    这是一个完整的策略模块示例。

    policy_module(`myservice', 1.0.0)
    
    type myservice_spool_t;
    files_spool_file(myservice_spool_t)
    

    这会起作用,但只声明类型,仅此而已。你需要一些允许规则来让它做一些有价值的事情。

    • 1
  3. dac.override
    2016-10-11T02:38:03+08:002016-10-11T02:38:03+08:00

    https://selinuxproject.org/page/TypeStatements有正确答案:

    # Using the typeattribute statement to associate a type of
    # setroubleshootd_exec_t to two attributes file_type and 
    # non_security_file_type. 
    
    # These are the previously declared attributes:
    attribute file_type;
    attribute non_security_file_type;
    
    # The previously declared type:
    type setroubleshootd_exec_t;
    
    # These are the associations using the typeattribute statement:
    typeattribute setroubleshootd_exec_t file_type, non_security_file_type;
    

    但是,是的,你的问题提出了一个有趣的观点。

    SELinux 原生知道三种语言,并且有一种第三方抽象语言称为“引用策略”。

    1. 单一策略语言(checkpolicy 用于编译policy.conf -- man checkpolicy)
    2. 模块策略语言(checkmodule 用于编译 $MODULE.{te.fc} -- man checkmodule)
    3. 通用中间语言(secilc 用于编译 $MODULE.cil -- man secilc)

    上述每种母语都有自己的特定属性,可能会造成混淆。

    参考策略基本上是围绕“模块策略语言”的包装器,其目标是使策略维护更容易。

    • -1

相关问题

  • 如何在 Centos 上保持 openvpn 连接打开

  • LIST 上的 ProFTPd 超时

  • 与 AWS 中的其他系统相比,CentOS 报告的总内存较低

  • SELinux 阻止 Apache 写入文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve