6.22. pam_namespace-设置私有名称空间

pam_namespace.so [调试] [unmnt_remnt] [unmnt_only] [require_selinux] [gen_hash] [ignore_config_error] [ignore_instance_parent_mode] [unmount_on_close] [use_current_context] [use_default_context]

6.22.1. DESCRIPTION

pam_namespace PAM 模块为具有多实例化目录的会话设置私有名称空间。一个多实例化的目录根据用户名或使用 SELinux,用户名,安全上下文或同时使用这两者来提供其自身的不同实例。如果存在可执行脚本/etc/security/namespace.init,则在安装实例实例目录并将其安装在多实例化目录上后,该脚本用于初始化实例目录。该脚本接收多实例化的目录路径,实例目录路径,标记实例目录是否是新创建的(0 表示否,1 表示是)以及用户名作为其参数。

pam_namespace 模块将会话名称空间与父名称空间解除关联。在父名称空间中执行的任何安装/卸载(例如设备的安装)都不会反映在会话名称空间中。要将选定的安装/卸载事件从父名称空间传播到未关联的会话名称空间,Management 员可以使用特殊的共享子树功能。有关共享子树功能的其他信息,请参考 mount(8)手册页和 http://lwn.net/Articles/159077 和 http://lwn.net/Articles/159092 上的共享子树描述。

6.22.2. DESCRIPTION

  • pam_namespace.so *模块允许设置带有多实例化目录的私有名称空间。目录可以基于用户名进行多实例化,对于 SELinux,可以基于用户名,敏感度级别或完整的安全上下文进行实例化。如果存在可执行脚本/etc/security/namespace.init,则每次设置和安装实例目录时,都会使用该脚本来初始化名称空间。该脚本接收多实例化目录路径和实例目录路径作为其参数。

/etc/security/namespace.conf文件指定要对哪些目录进行多实例化,如何对其进行多实例化,如何命名实例目录以及将不对其执行多实例化的所有用户。

当有人登录时,将扫描文件namespace.conf。Comments 用*#字符标记。每个非 Comments 行代表一个多实例化目录。这些字段用空格分隔,但可以用字符引起来,还可以识别转义序列\b \n \t *。这些字段如下:

polydir instance_prefix method list_of_uids

第一个字段* polydir 是要多实例化的目录的绝对路径名。特殊字符串 $ HOME 替换为用户的主目录, $ USER *替换为用户名。该字段不能为空。

第二个字段* instance_prefix 是用于为\ 实例化构建路径名的字符串前缀。然后根据多实例 method 附加“实例区分字符串”以生成最终实例目录路径。如果该目录尚不存在,则创建该目录,然后将其绑定安装在\ 上,以基于\ 列提供\ 的实例。特殊字符串 $ HOME 替换为用户的主目录, $ USER *替换为用户名。该字段不能为空。

第三个字段* method *是用于多实例化的方法。它可以采用这些值。 “ user”用于基于用户名的多实例化,“ level”用于基于进程 MLS 级别和用户名的多实例化,“ context”用于基于进程安全性上下文和用户名的多实例化,“ tmpfs”用于将 tmpfs 文件系统作为实例 dir 挂载,和“ tmpdir”用于创建临时目录作为实例目录,该目录在用户会话关闭时被删除。方法“上下文”和“级别”仅在 SELinux 中可用。该字段不能为空。

第四个字段* list_of_uids *是逗号分隔的用户名列表,未对其执行多实例化。如果保留空白,则将对所有用户执行多实例化。如果列表前面有单个“~”字符,则仅对列表中的用户执行多实例化。

  • method 字段还可以包含以下以:*字符分隔的可选标志。

  • create * = * mode owner group *-创建多实例化目录。模式,所有者和组参数是可选的。模式的默认值由 umask 决定,默认所有者是打开会话的用户,默认组是用户的主要组。

  • iscript * = * path *-实例目录初始化脚本的路径。相对路径的基本目录是/etc/security/namespace.d

  • noinit *-实例目录初始化脚本将不会执行。

  • shared *-“ context”和“ level”方法的实例目录将不包含用户名,并且将在所有用户之间共享。

  • mntopts * = * value -完成 tmpfs 挂载时,此标志的值传递到挂载调用。例如,它允许指定由 mount 调用创建的 tmpfs 实例的最大大小。除了在 tmpfs(5)手册中指定的选项之外, nosuid noexec nodev *标志还可用于分别禁用 setuid 位效果,禁用正在运行的可执行文件以及禁用要在已安装的 tmpfs 上解释的设备文件系统。

要创建多实例化实例的目录必须存在,并且默认情况下必须具有 0000 模式。可以使用命令行选项* ignore_instance_parent_mode *覆盖实例父实例为 0000 模式的要求。

在上下文或级别多实例化的情况下,用于多实例化的 SELinux 上下文是用于执行由 getexeccon 获得的新进程的上下文。此上下文必须由调用应用程序或pam_selinux.so模块设置。如果未设置此上下文,则多实例化将仅基于用户名。

“实例区分字符串”对于“用户”方法是\ ,对于“上下文”和“级别”方法是\ _<raw directory context>。如果整个字符串太长,则将其结尾替换为自身的 md5sum。同样,当使用命令行选项* gen_hash *时,整个字符串将替换为其本身的 md5sum。

6.22.3. OPTIONS

  • debug

    • 使用 syslog 记录了许多调试信息
  • unmnt_remnt

    • 对于 su 和 newrole 之类的程序,登录会话已经设置了一个多实例化的名称空间。对于这些程序,将基于新的用户 ID 或安全上下文执行多实例化,但是该命令首先需要撤消通过登录执行的多实例化。此参数指示命令先撤消先前的多实例化,然后再基于新的 id /上下文 continue 进行新的多实例化
  • unmnt_only

    • 对于希望自己撤消任何现有绑定安装并处理实例目录的受信任程序,此参数允许它们卸载当前已安装的实例目录
  • require_selinux

    • 如果未启用 selinux,则返回失败
  • gen_hash

    • 代替使用安全上下 Literals 符串作为实例名称,而生成并使用其 md5 哈希值。
  • ignore_config_error

    • 如果配置文件中与多实例化目录相对应的行包含格式错误,请跳过该行以处理下一行。如果没有此选项,pam 将向调用程序返回错误,从而导致会话终止。
  • ignore_instance_parent_mode

    • 默认情况下,实例父目录的限制模式应为 000.使用此选项,Management 员可以选择忽略实例父目录的模式。应谨慎使用此选项,因为它会降低多实例化机制的安全性和隔离目标。
  • unmount_on_close

    • 显式卸载多实例化目录,而不是在名称空间中的最后一个进程退出后依靠自动名称空间销毁。仅当通过其他方式确保会话关闭后专用名称空间中没有任何进程正在运行时,才应使用此选项。仅在同一进程中依次有多个 pam 会话调用的情况下,此方法也很有用。
  • use_current_context

    • 对于不使用 setexeccon 调用更改 SELinux 上下文的服务很有用。该模块将使用调用过程的当前 SELinux 上下文进行级别和上下文多实例化。
  • use_default_context

    • 对于不使用 pam_selinux 通过 setexeccon 调用更改 SELinux 上下文的服务很有用。该模块将使用用户的默认 SELinux 上下文进行级别和上下文多实例化。
  • mount_private

    • 此选项可用于共享/安装点或其子安装的系统(例如,使用 mount --make-rshared/ 命令)。该模块将标记整个目录树,因此 polyinstantiation 名称空间中的所有装入和卸载操作都是私有的。通常,pam_namespace 会尝试检测共享/挂载点,并自动将多实例化目录设为私有。仅当仅共享子树而/不共享子树时,才必须使用此选项。

请注意,如果使用此选项或自动检测到共享/安装点,则在专用名称空间中完成的安装和卸载将不会影响父名称空间。

6.22.4. 提供的模块类型

仅提供session模块类型。不得从多线程进程中调用该模块。

6.22.5. 返回值

  • PAM_SUCCESS

    • 命名空间设置成功。
  • PAM_SERVICE_ERR

    • 设置名称空间时发生意外的系统错误。
  • PAM_SESSION_ERR

    • 发生意外的名称空间配置错误。

6.22.6. FILES

  • /etc/security/namespace.conf

    • 主配置文件
  • /etc/security/namespace.d

    • 其他配置文件的目录
  • /etc/security/namespace.init

    • 实例目录的初始化脚本

6.22.7. EXAMPLES

这些是可能在/etc/security/namespace.conf中指定的示例行。

#以下三行将对/ tmp 进行实例化,
#/ var/tmp 和用户的主目录。/tmp 和/ var/tmp
#将根据安全级别进行多实例化
#和用户名,而主目录将是
#根据完整的安全上下文和用户名进行多实例化。
#不会对 root 用户执行多实例化
#和 adm 用于目录/ tmp 和/ var/tmp,而 home
#目录将对所有用户进行多实例化。
#
#注意实例目录不必驻留在其中
#多实例化目录。在以下示例中,
#的/ tmp 实例将在/ tmp-inst 目录中创建,
#where 作为/ var/tmp 和用户主目录的实例
#将驻留在当前目录中
# polyinstantiated.
#
/ tmp/tmp-inst /级别 root,adm
/ var/tmp/var/tmp/tmp-inst /级别 root,adm
$ HOME $ HOME/$ USER.inst/inst-上下文

对于\ ,您需要多实例化(例如登录),将以下行放在/etc/pam.d/<service>中作为会话组的最后一行:

会话必需 pam_namespace.so [参数]

此模块还取决于 pam_selinux.so 设置上下文。

6.22.8. AUTHORS

名称空间设置方案是由 Stephen Smalley,Janak Desai 和 Chad Sellers 设计的。 pam_namespace PAM 模块由 Janak Desai<[email protected]>,Chad Sellers<[email protected]>和 Steve Grubb<[email protected]>开发。 Xavier Toth<[email protected]>和 Tomas Mraz<[email protected]>的其他改进。