服务访问控制

服务的启动和停止可以通过以下三种应用程序进行配置,除了以上几种工具之外,通过手动编辑 /etc/xinetd.d 目录下的 xinetd 配置文件,或者 /etc/rc.d/ 目录下的符号链接,也能够实现对服务的配置。

当别人能够访问你的系统服务时,对于服务的访问控制是相当重要的。如果你不需要提供某项服务,最好将它关闭,因为你所启用的服务越多,系统中存在的漏洞就可能越多。

对于系统服务的管理可以通过多种方式实现,至于使用哪一种,则需要根据服务的类型、系统配置和你的 Linux 应用水平来决定了。

拒绝别人访问某项服务的最简单方法就是将服务关闭掉。由 xinetd 和 /etc/rc.d/init.d/ 目录结构(常称为 SysV 服务) 管理的服务,它们的启动和停止可以通过以下三种应用程序进行配置:

 

服务配置工具

图形界面的服务管理工具,它包含对每个服务的描述,运行状态和启动状态。用户可以使用这个工具启动、重启动和停止服务。

 

ntsysv

命令行文字界面的服务管理工具,使用它能够配置服务在不同运行级别 (runlevel) 的启动状态。使用这个程序,无法启动、重启动和停止非 xinetd 服务


chkconfig

命令行的服务管理工具,使用它能够启动和停止各个运行级别的服务。与 ntsysv 命令相同,chkconfig 工具无法启动、停止和重启非 xinetd 服务

除了以上几种工具之外,通过手动编辑 /etc/xinetd.d 目录下的 xinetd 配置文件,或者 /etc/rc.d/ 目录下的符号链接,也能够实现对服务的配置。相比之下,使用前三种工具会显得更方便一些。

 

防火墙及 SELinux

管理他人对服务的访问,还可以通过 iptables 配置 IP 防火墙,如果你还是 Linux 新手,这个方法则不太适合你。iptables 的配置十分复杂,最好让经验丰富的 Linux 系统管理员来执行这项工作。

使用 iptables 控制服务访问的优点是灵活性,即使你需要自定义特定主机访问特定服务的解决方案,iptables 也能够轻易地实现你的要求。更多信息请参考《iptables》

另外,如果你在找一个为家用机器设置访问规则的工具,或者你对 Linux 不太熟悉,则可以图形界面的“防火墙配置”工具 (system-config-firewall) 对系统的防火墙策略进行配置。

注意:当你在配置某项新服务时,务必记得 Fedora/Linux 默认同时配置了防火墙和 SELinux。很多时候导致服务无法被访问,最常见的一个问题就是忘记在防火墙或者 SELinux 中添加相应的策略。

运行级别 (Runlevels)

在配置服务访问控制之前,需要先对 Fedora/Linux 的运行级别 (runlevels) 有所了解。在不同的运行级别下,系统所启用的服务也不相同,每个运行级别对应的 /etc/rc.d/rc[x].d 目录下包含了此运行级别下的服务。

在配置服务访问控制之前,需要先对 Fedora/Linux 的运行级别 (runlevels) 有所了解。在不同的运行级别下,系统所启用的服务也不相同,每个运行级别对应的 /etc/rc.d/rc[x].d 目录下包含了此运行级别下的服务。

运行级别

  • 0 - 关机
  • 1 - 单用户模式
  • 2 - 未使用(用户可自定义)
  • 3 - 多用户模式
  • 4 - 未使用(用户可自定义)
  • 5 - 多用户模式(使用基于 X 的图形界面)
  • 6 - 重启

如果使用命令行界面的登录框,说明系统的运行级别为 3,如果使用图形界面的登录窗口,则说明系统的运行级别为 5。

通过编辑 /etc/inittab 文档,可以更改系统的默认运行级别,只需要将指定的运行级别替换下面这一行中的数字 5 (运行级别 5) 即可:

id:5:initdefault:

通过编辑 /etc/inittab 完成对默认运行级别的更改之后,新配置会在重新启动系统时后生效。

有关 Linux 系统启动时各运行级别的服务如何被启动的内容,请参考《Linux 系统启动流程

使用 TCP Wrapper 实现 xinetd 服务访问控制

使用 TCP Wrapper 能够管理对特定服务的访问,任何由 xinetd 管理的网络服务都能够使用 TCP Wrapper 实现对它的访问控制。

使用 TCP Wrapper 能够管理对特定服务的访问,任何由 xinetd 管理的网络服务都能够使用 TCP Wrapper 实现对它的访问控制。

在 Linux 中,xinetd 能够通过 /etc/hosts.allow/etc/hosts.deny 配置文件,实现对用户的服务访问控制。/etc/hosts.allow 与 /etc/hosts.deny 是可自定义的访问控制列表 (ACL),顾名思义,hosts.allow 文件包含了允许访问网络服务的规则,而 hosts.deny 包含了拒绝访问的规则,并且 hosts.allow 文件的优先级高于 hosts.deny 文件。用户可以定义基于 IP 地址主机名匹配字段的访问控制规则。

有关 TCP Wrapper 的详情可参考 hosts_access 的 man 文件(man 5 hosts_access)

xinetd 是 inetd 的安全升级版本。xinetd 一直保持运行状态,监听所有由它管理的服务的端口,当一个连接请求访问由它管理的服务时,xinetd 都会为那个服务启动相应的服务器。

 

xinetd 守护程序具有以下功能:

  • 节省系统资源
  • 提供访问控制和记录
  • 启动指定的服务
  • 添加或拒绝对指定主机的访问
  • 提供定时访问控制
  • 限制入栈连接的速率
  • 限制连接的负载
  • ……

xinetd 的配置文件是 /etc/xinetd.conf,但这个文件中只包含了一些默认配置,和一条包含 /etc/xinetd.d/ 目录的指令。要启用或禁用一个 xinetd 服务,只需编辑 /etc/xinetd.d/ 目录中的配置文件即可。如果配置文件中的 disable 属性被设置为 yes,这个服务则被禁用,设置为 no,则表示启用。你可以手动编辑 xinetd 文件来更改服务的启动状态,也可以使用服务配置工具、ntsysv 和 chkconfig 工具来管理服务的运行状态。

如果想要知道 xinetd 守护进行控制着哪些服务,只需要使用 ls /etc/xinetd.d 命令查看 /etc/xinetd.d/ 目录下的内容即可。

服务配置工具

“服务配置”工具是由 Red Hat 开发的一款图形化的服务配置工具,它能够用于管理 /etc/rc.d/init.d/ 目录下的 SysV 服务,以及 xinetd 服务。使用服务配置工具,能够启动、停止、重启动 SysV 服务,以及重载 xinetd 服务。

“服务配置”工具是由 Red Hat 开发的一款图形化的服务配置工具,它能够用于管理 /etc/rc.d/init.d/ 目录下的 SysV 服务,以及 xinetd 服务。使用服务配置工具,能够启动、停止、重启动 SysV 服务,以及重载 xinetd 服务。

可以使用桌面主菜单“系统->管理->服务”,或者在命令行输入 system-config-services 命令来打开“服务配置工具”。

服务配置工具 [图]

“服务配置”工具中会列出 /etc/rc.d/init.d/ 目录中的服务,以及 xinetd 控制的所有服务。从左侧窗口的列表中点击服务的名称,即可从右则看到服务的状态和描述信息。对于非 xinetd 服务,状态窗口显示服务是否正在运行,对于 xinetd 服务,状态窗口通常显示为“通常在系统引导时启动,在后台运行,并在需要时醒来。”

使用“服务配置”工具启动、停止和重启动某个服务,首先从左侧列表中选中那个服务,然后通过点击上方工具栏相应的动作按钮(开始、停止、重启),或者通过菜单栏“服务”的下拉菜单执行这些操作。对于 xinetd 服务,以上按钮和菜单则是禁用的。

使用工具栏的“定制”按钮,或者“服务->定制”菜单栏,可以实现对服务运行级别的控制。

ntsysv - 服务管理工具

ntsysv 是 Linux 下文字模式的服务管理工具,它为启用和禁用服务提供了简单的文字界面。使用 ntsysv,能够管理及由 xinetd 守护程序所控制的服务,以及 SysV 服务的启动状态。

ntsysv 是 Linux 下文字模式的服务管理工具,它为启用和禁用服务提供了简单的文字界面。使用 ntsysv,能够管理及由 xinetd 守护程序所控制的服务,以及 SysV 服务的启动状态。

默认情况下,ntsysv 工具配置的是系统当前运行级别,要对其它运行级别进行配置,需要使用 --level 选择,例如 ntsysv --level 345 命令对运行级别 3、4 和 5 进行配置。

ntsysv 的界面看起来有点像 Fedora/Linux 在文字模式下的安装程序,使用上下箭头移动光标在列表中的位置,空格用于更改当前选中服务的状态(启动/禁用),方括号有 * 的服务表示开机时自动启动,使用 F1 按可以看到有关服务的描述信息

注意:F1 查看帮助信息功能仅在控制台终端下有效,在 Shell 中使用 F1,则会打开 Shell 的帮助文档

ntsysv [图]

ntsysv 所做的更改会立即对 xinetd 服务生效,其它服务的则不会产即生效果。如果你希望马上更改某个服务的运行状态,可以使用 service <daemon> <action> 命令,其中 <daemon> 为服务的名称,如 httpd,<action> 则为希望执行的操作,如 start/stop/restart (启动/停止/重启)

chkconfig 命令用法

chkconfig 是 Linux 中基于命令行的服务管理工具,chkconfig 可以用于启用和禁用系统服务。执行 chkconfig --list 命令能够得到所有系统服务的列表,以及它们在每个运行级别的启动状态(启用/关闭)。输出结果中不包含 xinetd 服务。

chkconfig 是 Linux 中基于命令行的服务管理工具,chkconfig 可以用于启用和禁用系统服务。执行 chkconfig --list 命令能够得到所有系统服务的列表,以及它们在每个运行级别的启动状态(启用/关闭)。输出结果中不包含 xinetd 服务。

虽然在列表中不会显示 xinetd 服务,但使用 chkconfig --list <xinetd_service> 命令,则可能查看 xinetd 服务的运行状态

~]# chkconfig --list rsync
rsync 禁用

输出结果显示 rsync 服务为停止,如果 rsync 服务处于运行状态,输出结果则显示为 rsync 启用

如果在 chkconfig --list 命令后面添加 sysv 服务(位于/etc/rc.d/ 目录下的服务)名称,则会显示服务在所有运行级别下的启动状态,而不是像 xinetd 服务那样显示当前运行状态

~]# chkconfig --list httpd
httpd 0:禁用 1:禁用 2:禁用 3:启用 4:禁用 5:启用 6:禁用

除了查看服务状态信息外,chkconfig 命令还能够配置 sysv 服务在不同运行级别下的启动状态。如希望在 3, 4, 5这三个运行级别上禁用 nscd 服务,则可以执行以下命令

~]# chkconfig --level 345 nscd off
说明:chkconfig 命令管理 xinetd 服务的运行状态,因此执行类似 chkconfig rsync on 命令时会立即启动服务。对于 SysV 服务,chkconfig 命令管理它们的启动状态,因此 chkconfig --level 345 nscd off 命令不会自动停止 nscd 服务,而需要等待系统重启后才生效。
希望马上启用或停止某个服务,可以使用 service <service> <action> 命令,其中 <service> 为服务名称,<action> 对操作动作,一般可以为 start (启动)、stop (停止)、restart (重启)。