网站搜索

在 RHEL/CentOS 7 最小安装上禁用并删除不需要的服务


RHEL/CentOS 7服务器最小安装附带一些默认预装的服务,例如Postfix邮件传输代理守护程序、Avahi mdns 守护进程(多播域名系统)和 Chrony 服务,负责维护系统时钟。

现在问题来了。为什么我们需要禁用所有这些服务。如果它们是预安装的?主要原因之一是提高系统的安全级别,第二个原因是系统的最终目的地,第三个原因是系统资源。

要求

  1. CentOS 7 最小安装
  2. RHEL 7 最小安装

如果您计划使用新安装的 RHEL/CentOS 7 来托管一个在 ApacheNginx 上运行的小型网站,或者提供 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 文本编辑器,wgetcurl 用于 URL 传输,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 守护程序删除可能会使您的系统失去任何网络连接。

所以,这一步要格外注意。如果您确实需要网络管理器提供的自动网络配置或者您需要编辑您的接口
通过 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 守护程序且网络连接崩溃并且需要再次手动配置网络接口卡时,才需要执行此步骤。

要编辑您的网卡以使用IPv6静态IP地址,请转至/etc/sysconfig/network-scripts/路径,打开网卡接口文件(通常第一张卡名为 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

您应该考虑的最重要的设置是:

  1. BOOTPROTO – 设置为无或静态 – 对于静态 IP 地址。
  2. ONBOOT – 设置为 yes – 重新启动后显示您的界面。
  3. 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 实用程序为系统主机名设置名称,并使用主机名 检查您的配置 命令。

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 stats命令输出正在运行的网络套接字。

ss -tulpn 

14.重新启动服务器并运行systemd-analize命令来确定系统启动时间性能,同时使用free磁盘
free
命令显示RAM和HDD统计信息,top命令查看最常用的系统资源。

free -h
df -h
top 

恭喜!现在,您拥有一个干净的最小 RHEL/CentOS 7 系统环境,安装和运行的服务更少,并且有更多的资源可用于将来的配置。

另请阅读:停止并禁用 Linux 中不需要的服务