如何将Semanage命令用于SELinux策略

时间:2020-03-05 15:30:03  来源:igfitidea点击:

Semanage是一种工具,用于配置SELinux策略的某些元素,而无需修改或者重新编译策略源。
这包括将Linux用户名映射到SELinux用户身份以及对象(如网络端口,接口和主机)的安全上下文映射。

默认情况下,SELinux仅允许将已知服务绑定到已知端口。
如果要修改服务以使用非默认端口,则需要使用semanage命令修改端口类型。

在本文中,我们将探索semanage命令,并学习如何在基于RPM的发行版(如CentOS和RedHat)上列出,创建/添加和删除端口类型。

列出具有管理功能的端口

列出所有端口的基本命令是

# semanage port -l
SELinux Port Type              Proto    Port Number
afs3_callback_port_t           tcp      7001
afs3_callback_port_t           udp      7001
afs_bos_port_t                 udp      7007
afs_fs_port_t                  tcp      2040
afs_fs_port_t                  udp      7000, 7005
afs_ka_port_t                  udp      7004
afs_pt_port_t                  tcp      7002
afs_pt_port_t                  udp      7002
...

要列出特定端口(如http)的端口号,请使用以下命令:

# semanage port -l | grep -w http_port_t
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000

对于mysqld同样

# semanage port -l | grep -w mysqld_port_t
mysqld_port_t                  tcp      1186, 3306, 63132-63164

要查找其中包含特定端口号的端口名称,请使用以下命令:

# semanage port -l | grep 53
apertus_ldp_port_t             tcp      539
apertus_ldp_port_t             udp      539
dns_port_t                     tcp      53
dns_port_t                     udp      53

使用管理创建或者添加端口

在此示例中,我们将为http创建一个新端口,并将其分配给tcp端口2222.
“-a”选项用于添加新端口,“-t”选项指定SELinux类型,而“ -p”选项是指定要使用的协议(在本例中为tcp)。

# semanage port -a -t http_port_t -p tcp 2222

要查看新创建的端口,我们将命令列表命令与'-C'方法一起使用以仅显示自定义项。

# semanage port -lC

SELinux端口类型原型端口号

http_port_t                    tcp      2222

要将端口号范围分配给特定端口,请使用以下命令:

# semanage port -a -t http_port_t -p tcp 2223-2225

现在,我们可以在此处看到端口范围。

# semanage port -lC
SELinux Port Type              Proto    Port Number
http_port_t                    tcp      2223-2225

如果尝试添加具有与以前使用的相同值的另一个条目,则会收到错误消息:

ValueError: Port tcp/2222 already defined

要覆盖已经创建的现有端口,请使用'-m'选项进行修改:

# semanage port -m -t unreserved_port_t -p tcp 2222

现在,如果我们列出所有端口,我们将看到更改。

# semanage port -lC
SELinux Port Type              Proto    Port Number
unreserved_port_t              tcp      2222

通过管理删除端口

我们使用选项-d删除端口记录。
要删除tcp端口2222上的unreserved_port_t,我们使用以下命令:

# semanage port -d -t unreserved_port_t -p tcp 2222

要删除一定范围的端口,请使用以下命令:

# semanage port -d -t http_port_t -p tcp 2223-2225

如果运行定制列表命令,但不返回任何内容,则该条目已被删除。

使用权限管理

Semanage许可用于添加或者删除SELinux Policy许可模块。

要列出所有允许的模块,请使用'-l'选项:

# semanage permissive -l
Customized Permissive Types

Builtin Permissive Types
sanlk_resetd_t
hsqldb_t
systemd_hwdb_t
blkmapd_t
ipmievd_t
targetd_t

要创建httpd_t许可域,请使用'-a'选项:

# semanage permissive -a httpd_t

现在,让我们检查所有允许的模块:

# semanage permissive -l
Customized Permissive Types
httpd_t
Builtin Permissive Types
sanlk_resetd_t
hsqldb_t
systemd_hwdb_t
blkmapd_t
ipmievd_t

要删除我们刚刚创建的许可类型,我们使用'-d'选项。

# semanage permissive -d httpd_t
libsemanage.semanage_direct_remove_key: Removing last permissive_httpd_t module (no other permissive_httpd_t module exists at another priority).

在本文中,我们了解了如何使用semanage工具列出,添加和删除端口,以及基于RPM的Linux发行版。
如果系统具有GUI,则可以通过yum安装policycoreutils-gui软件包,然后运行system-config-selinux命令以打开GUI版本并从“网络端口”菜单中配置SELinux端口类型。