0

0

CentOS系统安全如何加固_CentOS系统安全加固方案

絕刀狂花

絕刀狂花

发布时间:2025-09-21 14:43:01

|

1017人浏览过

|

来源于php中文网

原创

答案:CentOS安全加固需从系统更新、用户权限、SSH配置、防火墙、SELinux、服务管理、日志审计等多方面入手,构建动态防御体系。默认安装注重通用性而非安全性,存在较多潜在风险,必须通过最小权限原则、密钥认证、关闭无用服务、启用防火墙默认拒绝策略、定期审计等措施持续加固,确保攻击面最小化,提升攻击成本。

centos系统安全如何加固_centos系统安全加固方案

CentOS系统安全加固,核心在于构建多层次防御体系,从系统基础配置、网络访问控制到服务与应用安全,持续审计与更新是其生命线。这不是一次性任务,而是一个动态且必须持续投入的过程,确保系统暴露面最小化,抵御潜在威胁。我个人觉得,与其追求所谓的“绝对安全”,不如踏踏实实地做好每一个环节,让潜在的攻击者付出的成本远高于他们可能获得的收益。

解决方案

谈到CentOS的安全加固,这事儿可大可小,但有些核心环节是无论如何都不能跳过的。我通常会从几个维度来考虑:

  • 系统更新与补丁管理: 这可能是最无聊但又最关键的一步。
    yum update
    或者
    dnf update
    ,定期执行,把所有已知的安全漏洞都堵上。我见过太多因为懒得更新而导致的问题,有些简直是低级错误。
  • 用户与权限管理:
    • 弱密码是万恶之源。 强制使用复杂密码策略,利用
      pam_pwquality
      模块配置密码长度、复杂度要求,并且定期强制用户修改密码。
    • 最小权限原则。 每个用户或服务只给它完成工作所需的最小权限。别动不动就给
      root
      权限,那简直是给自己挖坑。我个人习惯是,普通操作都用普通用户,需要特权时再
      sudo
    • 禁用不必要的账户。
      guest
      lp
      sync
      这些系统默认但你根本用不着的账户,直接锁死或者删掉。
  • SSH服务加固: 这是远程管理的命脉,也是攻击者最常盯上的地方。
    • 禁用密码登录,改用密钥认证。 这是我强烈推荐的,密钥比密码安全太多了。
    • 禁用Root直接登录。 即使你用密钥,也别让
      root
      直接登录,通过普通用户登录后再
      sudo
    • 修改默认端口 把SSH默认的22端口改掉,虽然不能防住有心人,但能过滤掉大量的扫描机器人。
    • 限制登录用户。
      AllowUsers
      AllowGroups
      可以明确指定哪些用户或组可以登录SSH。
    • 启用
      fail2ban
      这玩意儿能有效防止SSH暴力破解。
  • 防火墙配置:
    firewalld
    iptables
    ,选一个你熟悉的,并且把它配置好。
    • 默认拒绝所有入站连接。 这是最安全的策略。
    • 只开放必要的端口和服务。 比如Web服务器就开80/443,SSH就开你改过的那个端口。
    • 内部网络也别掉以轻心。 即使是内网,也应该有适当的防火墙策略。
  • SELinux: 这东西很多人觉得麻烦就直接关了,但我个人建议,如果能驾驭,还是尽量保持
    enforcing
    模式。它能提供额外的强制访问控制,即使某个服务被攻破,也能限制其能造成的破坏。当然,配置起来确实有点门槛,需要耐心。
  • 服务与应用安全:
    • 禁用不必要的服务。
      systemctl list-unit-files --state=enabled
      看看有哪些服务是开机自启的,用不着的就
      systemctl disable --now
      关掉。
    • 安全配置运行的服务。 比如Web服务器(Nginx/Apache)、数据库(MySQL/PostgreSQL),它们都有各自的安全配置最佳实践,别用默认配置。
  • 日志与审计:
    • 配置
      rsyslog
      确保所有重要的系统日志都被妥善记录,并且定期归档或发送到集中的日志服务器。
    • 使用
      auditd
      如果对安全性要求极高,
      auditd
      可以记录更详细的系统调用和文件访问事件,方便事后追溯。
  • 文件系统与文件权限:
    • 敏感文件权限。 配置文件、密码文件等,确保只有
      root
      或特定用户才能读写。
    • 文件完整性检查。
      aide
      tripwire
      这类工具可以帮助你监控系统关键文件的变化,一旦有文件被篡改,能及时发现。

为什么常规的系统安装后还需要进行额外的安全加固?

这问题问得挺好,很多人会觉得,我安装的是官方镜像,系统本身应该就挺安全了吧?但事实往往并非如此。在我看来,常规的CentOS安装,它更注重的是通用性易用性,而非极致的安全性。

首先,默认安装为了让系统能跑起来,并且能满足大多数用户的基本需求,会启用不少服务。比如SSH服务默认就允许密码登录,甚至默认端口22也是公开的。对于一个个人工作站来说可能没什么,但对于一台暴露在公网上的服务器,这简直就是给攻击者发邀请函。很多服务,你可能根本用不着,但它们却在后台默默运行,每一个运行的服务都可能是一个潜在的漏洞点,增加系统的“攻击面”。

其次,系统默认配置通常是通用型的,它不会针对你的具体业务场景和安全需求进行优化。比如,你可能只需要一个Web服务器,但默认安装却可能包含了FTP、邮件服务等。这些额外的服务不仅消耗资源,更重要的是增加了安全风险。

再者,安全是一个动态的过程。新的漏洞几乎每天都在被发现。系统安装那一刻是相对安全的,但随着时间的推移,新的漏洞会不断出现。所以,即使是默认安装,也需要持续的更新和加固来应对这些不断演进的威胁。默认安装只是一个起点,它给你提供了一个能工作的环境,但如何让这个环境更健壮、更抗揍,那就得靠我们自己去细心打磨了。

如何有效管理CentOS的用户账户与SSH远程访问权限?

管理用户账户和SSH权限,这可是服务器安全的重中之重,我个人觉得这部分工作做得好不好,直接决定了你的服务器会不会成为别人的“肉鸡”。

用户账户管理的核心思想就是“最小权限原则”和“永不信任”。

  • 强密码策略: 这个真的得强调。通过
    /etc/security/pwquality.conf
    配置密码的长度、包含字符类型、历史密码限制等。比如,我通常会要求密码至少12位,包含大小写字母、数字和特殊字符。
  • 禁用Root直接登录: 无论是通过SSH还是本地控制台,我都不建议直接使用
    root
    账户。创建一个普通管理员账户,然后通过
    sudo
    命令来执行需要
    root
    权限的操作。这不仅能留下操作记录,还能避免因误操作带来的灾难性后果。在
    /etc/ssh/sshd_config
    中设置
    PermitRootLogin no
  • 定期审计用户账户: 看看系统里有没有不明账户,或者长期不活跃的账户。不用的账户,及时禁用或删除。
    lastlog
    faillog
    这些命令能帮你查看用户的登录情况。
  • 使用
    sudo
    精心配置
    /etc/sudoers
    文件,让普通用户只能执行特定的、必要的管理命令。这比直接给
    root
    密码安全得多。

SSH远程访问权限的加固,主要集中在

sshd_config
的配置上:

ShoopD 网上商店系统
ShoopD 网上商店系统

用 php + mysql 驱动的在线商城系统,我们的目标为中国的中小企业及个人提供最简洁,最安全,最高效的在线商城解决方案,使用了自建的会员积分折扣功能,不同的会员组有不同的折扣,让您的商店吸引更多的后续客户。 系统自动加分处理功能,自动处理会员等级,免去人工处理的工作量,让您的商店运作起来更方便省事 采用了自建的直接模板技术,免去了模板解析时间,提高了代码利用效率 独立开发的购物车系统,使用最

下载
  • 密钥认证是王道: 告别密码登录,改用SSH密钥对。在客户端生成密钥对,公钥上传到服务器的
    ~/.ssh/authorized_keys
    文件里。然后在
    /etc/ssh/sshd_config
    中设置
    PasswordAuthentication no
    。这样,没有私钥,即使知道密码也无法登录。这是我个人最推荐的方式,虽然初期配置略显繁琐,但一劳永逸。
  • 修改默认端口:
    Port 22
    改成一个不常用的端口,比如
    Port 2222
    。这能有效减少被自动化脚本扫描的几率。
  • 限制登录用户/组: 使用
    AllowUsers user1 user2
    AllowGroups admin_group
    来明确指定哪些用户或用户组可以登录SSH。这比仅仅禁用
    root
    更细致,能防止其他普通账户被攻破。
  • 禁用空密码用户登录: 确保
    PermitEmptyPasswords no
  • 启用
    fail2ban
    这个工具通过监控日志文件(如
    /var/log/secure
    ),当发现有多次登录失败的IP地址时,会自动将其加入防火墙的黑名单,有效抵御暴力破解攻击。配置起来也相对简单。
  • 配置
    ClientAliveInterval
    ClientAliveCountMax
    防止长时间不活动的SSH会话占用资源,或者被劫持。

这些措施结合起来,能大大提升SSH服务的安全性,让你的服务器没那么容易被“敲开大门”。

CentOS防火墙(firewalld/iptables)的最佳实践有哪些?

防火墙,在我看来,就是服务器的第一道门卫。它的哲学很简单:默认拒绝所有,只允许必要的通行。 CentOS系统现在默认使用

firewalld
,它比传统的
iptables
更容易理解和管理,但两者都能达到目的。关键在于,你得选择一个并把它用好。

选择与理解:

  • firewalld
    它是基于区域(zone)的概念来管理防火墙规则的。比如
    public
    区域用于面向公网的服务,
    internal
    区域用于内部网络。每个区域可以有不同的规则集。这对于理解和管理复杂的网络环境很有帮助。
  • iptables
    更底层,直接操作内核的包过滤规则。它更灵活、功能更强大,但学习曲线相对陡峭,对于不熟悉网络的人来说,很容易配置错误。

我个人建议,如果不是有特别复杂的需求,或者你对

iptables
没有深入了解,就用
firewalld
。它现在是CentOS的默认,也足够强大。

firewalld
最佳实践:

  1. 理解区域(Zones):
    • public
      :默认区域,通常用于面向外部网络的接口。安全性最高,默认只允许SSH和DHCP客户端。
    • internal
      :用于内部网络,信任级别更高,但也不代表可以随意开放。
    • 选择合适的区域并将其设置为默认。 大部分服务器只有一个网卡面向公网,那么将该网卡绑定到
      public
      区域是最佳选择。
      sudo firewall-cmd --get-active-zones # 查看当前活跃区域
      sudo firewall-cmd --set-default-zone=public # 设置默认区域
  2. 只开放必要的端口和服务:
    • 服务优先于端口。
      firewalld
      预定义了很多服务(如
      ssh
      http
      https
      ),使用服务名比直接开放端口更语义化,也更容易管理。
      sudo firewall-cmd --zone=public --add-service=ssh --permanent # 允许SSH服务
      sudo firewall-cmd --zone=public --add-service=http --permanent # 允许HTTP服务
      sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent # 允许TCP 8080端口
      sudo firewall-cmd --reload # 重新加载配置使之生效
    • 明确来源IP。 如果你知道谁会访问你的服务,可以限制来源IP。
      sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent

      这能让你的SSH服务只对特定IP段开放,大大提高安全性。

  3. 定期审查防火墙规则: 随着业务变化,防火墙规则也需要调整。别把旧的、不再需要的规则留在那里,那会成为潜在的漏洞。
    sudo firewall-cmd --list-all --zone=public # 查看public区域的所有规则
  4. 启用日志记录: 记录被防火墙拒绝的连接,这对于发现潜在的攻击行为或调试网络问题非常有帮助。
    sudo firewall-cmd --zone=public --add-rich-rule='rule protocol value="icmp" drop' --permanent # 举例:丢弃ICMP包
    sudo firewall-cmd --zone=public --add-rich-rule='rule protocol value="tcp" reject log prefix="DROP_TCP " limit value="1/s"' --permanent # 记录被拒绝的TCP连接
    sudo firewall-cmd --reload

    日志通常在

    /var/log/messages
    /var/log/firewalld
    中。

iptables
最佳实践(如果你选择它):

  1. 清空现有规则,设置默认策略:
    iptables -F # 清空所有规则
    iptables -X # 清空所有自定义链
    iptables -Z # 清空所有链的计数器
    iptables -P INPUT DROP # 默认拒绝所有入站连接
    iptables -P FORWARD DROP # 默认拒绝所有转发连接
    iptables -P OUTPUT ACCEPT # 默认允许所有出站连接 (根据需求可调整)
  2. 允许本地回环接口:
    iptables -A INPUT -i lo -j ACCEPT
  3. 允许已建立和相关的连接: 这是状态防火墙的关键。
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  4. 开放特定端口和服务:
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许SSH
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许HTTP
  5. 保存规则:
    iptables
    规则默认是临时的,需要保存才能在重启后生效。
    sudo service iptables save # 或根据系统版本使用 `iptables-save > /etc/sysconfig/iptables`

无论是

firewalld
还是
iptables
,在应用任何新规则之前,务必先在测试环境验证,或者至少确保你有一个备用访问通道(比如带外管理或KVM),以防把自己锁在外面。 这点非常重要,我见过太多因为防火墙配置错误导致服务器失联的案例。安全是重要的,但可访问性也同样重要。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

665

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

247

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

515

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

255

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

531

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

600

2023.08.14

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 807人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号