在 RHEL/CentOS 7 最小安装中禁用并删除不需要的服务
RHEL / CentOS 7服务器最小安装带有一些默认预装的服务,例如Postfix邮件传输代理守护程序、Avahi mdns 守护程序(多播域名系统)和负责维护系统时钟的Chrony服务。
现在问题来了,如果这些服务是预先安装的,为什么我们需要禁用它们?主要原因之一是提高系统安全级别,第二个原因是系统最终目的地,第三个原因是系统资源。
要求
如果您打算使用新安装的 RHEL/CentOS 7 来托管,比如说,一个在Apache或Nginx上运行的小型网站,或者提供网络服务(如 DNS、DHCP、PXE 启动、FTP 服务器等)或其他不需要运行 Postifx MTA 守护程序、Chrony 或 Avahi 守护程序的服务,那么我们为什么应该在您的服务器上安装甚至运行所有这些不必要的守护程序。
在执行最小安装后,您的服务器真正需要运行的主要外部服务只是一个SSH守护程序,以便允许远程登录系统,并且在某些情况下,还需要 NTP 服务,以便准确同步您的服务器内部时钟与外部 NTP 服务器。
禁用/删除 Postfix MTA、Avahi 和 Chrony 服务
1.安装完成后,使用root帐户或具有root权限的用户登录您的服务器并执行系统更新,以确保您的系统包含所有软件包和安全补丁。
# yum upgrade
2.下一步是使用 YUM 包管理器安装一些有用的系统实用程序,例如net-tools(此包提供了较旧
但很好用的ifconfig命令)、nano文本编辑器、用于 URL 传输的wget和curl 、 lsof(列出打开的文件)和bash-completion,可自动完成输入的命令。
# yum install nano bash-completion net-tools wget curl lsof
3.现在您可以开始禁用和删除预先安装的不需要的服务。首先通过对 TCP、UDP 和侦听状态网络套接字运行netstat命令来获取所有已启用和正在运行的服务的列表。
# netstat -tulpn ## To output numerical service sockets # netstat -tulp ## To output literal service sockets
4.如您所见,Postfix已启动并在本地主机的 25 端口上监听,Avahi守护程序绑定在所有网络接口上,Chronyd服务绑定在本地主机和不同端口上的所有网络接口上。通过发出以下命令继续删除 Postfix MTA 服务。
# systemctl stop postfix # yum remove postfix
5.接下来通过发出以下命令删除 Chronyd 服务(将由 NTP 服务器替换)。
# systemctl stop chronyd # yum remove chrony
6.现在是时候删除Avahi守护进程了。看起来在 RHEL/CentOS 7 中,Avahi 守护进程非常紧密,并且依赖于网络管理器服务。执行 Avahi 守护进程删除可能会导致您的系统没有任何网络连接。
因此,请特别注意此步骤。如果您确实需要 Network Manager 提供的自动网络配置,或者您需要
通过nmtui网络和接口实用程序编辑接口,那么您应该只停止并禁用 Avahi 守护程序,而不要执行任何删除操作。
如果您仍然想完全删除此服务,则必须手动编辑位于/etc/sysconfig/network-scripts/ifcfg-interface_name 的网络配置文件,然后启动并启用网络服务。
发出以下命令来删除Avahi mdns 守护进程。注意:如果您通过 SSH 连接,请不要尝试删除 Avahi 守护进程。
# systemctl stop avahi-daemon.socket avahi-daemon.service # systemctl disable avahi-daemon.socket avahi-daemon.service
--------- Stop here if you don't want removal --------- # yum remove avahi-autoipd avahi-libs avahi
7.仅当您删除了Avahi守护程序并且网络连接崩溃并且需要再次手动配置网络接口卡时,才需要此步骤。
要编辑您的 NIC 以使用IPv6和静态 IP 地址,请转到/etc/sysconfig/network-scripts/路径,打开 NIC 接口文件(通常第一张卡名为ifcfg-eno1677776且已由网络管理器配置)并使用以下摘录作为指南,以防您的
网络接口没有配置。
IPV6INIT=no IPV6_AUTOCONF=yes BOOTPROTO=none DEVICE=eno16777736 ONBOOT=yes UUID=c3f0dc21-d2eb-48eb-aadf-10a520b13df0 TYPE=Ethernet #DEFROUTE=no IPV4_FAILURE_FATAL=no IPV6_DEFROUTE=no IPV6_FAILURE_FATAL=no NAME="System eno16777736" IPV6_PEERDNS=yes IPV6_PEERROUTES=yes HWADDR=00:0C:29:E2:06:E9 IPADDR=192.168.1.25 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=192.168.1.1 DNS2=8.8.8.8
您应该考虑的最重要的设置是:
- BOOTPROTO — 设置为无或静态 — 表示静态 IP 地址。
- ONBOOT — 设置为是 — 重启后调出您的界面。
- DEFROUTE – 语句用#注释或完全删除 – 不使用默认路由(如果在这里使用它,则应该向所有网络接口添加“DEFROUTE:no”,不用作默认路由)。
8.如果您的基础设施具有可自动分配 IP 地址的 DHCP 服务器,请使用以下摘录进行网络接口配置。
IPV6INIT=no IPV6_AUTOCONF=yes BOOTPROTO=dhcp DEVICE=eno16777736 ONBOOT=yes UUID=c3f0dc21-d2eb-48eb-aadf-10a520b13df0 TYPE=Ethernet ##DEFROUTE=no IPV4_FAILURE_FATAL=no IPV6_DEFROUTE=no IPV6_FAILURE_FATAL=no NAME="System eno16777736" IPV6_PEERDNS=yes IPV6_PEERROUTES=yes HWADDR=00:0C:29:E2:06:E9
与静态 IP 地址的配置相同,确保BOOTPROTO设置为dhcp,DEFROUTE语句被注释或删除,并且设备配置为在启动时自动启动。如果您不使用 IPv6,只需删除或注释所有包含 IPV6 的行即可。
9.为了应用网络接口的新配置,您必须重新启动网络服务。重新启动网络守护进程后,使用ifconfig
或ip addr show命令获取接口设置,并尝试 ping 域名以查看网络是否正常运行。
# service network restart ## Use this command before systemctl # chkconfig network on # systemctl restart network # ifconfig # ping domain.tld
10.作为最后的设置,请确保使用hostnamectl实用程序为系统主机名设置一个名称,并使用hostname命令检查您的配置。
# hostnamectl set-hostname FQDN_system_name # hostnamectl status # hostname # hostname -s ## Short name # hostname -f ## FQDN name
11.就这样!作为最后的测试,再次运行netstat命令来查看系统上正在运行哪些服务。
# netstat -tulpn # netstat -tulp
12.除了 SSH 服务器,如果您的网络使用 DHCP 来获取动态 IP 配置,则 DHCP 客户端应该在 UDP 端口上运行并处于活动状态。
# netstat -tulpn
13.作为netstat实用程序的替代,您可以借助Sockets Statistics命令输出正在运行的网络套接字。
# ss -tulpn
14.重新启动服务器并运行systemd-analize命令来确定系统启动时间性能,同时使用free和Disk
Free命令显示 RAM 和 HDD 统计信息,使用top命令查看最常用的系统资源。
# free -h # df -h # top
恭喜!现在您拥有一个干净的最小 RHEL/CentOS 7 系统环境,其中安装和运行的服务较少,并且有更多资源可用于将来的配置。
另请参阅:停止并禁用 Linux 中不需要的服务