25 条强化 Linux 服务器安全性的技巧
每个人都说Linux默认是安全的,并且在一定程度上表示同意(这是一个有争议的话题)。但是,Linux 默认有内置安全模型。需要根据您的需要对其进行调整和自定义,这可能有助于打造更安全的系统。Linux 更难管理,但提供了更多的灵活性和配置选项。
对于系统管理员来说,保护生产中的系统免受黑客和破解者的攻击是一项艰巨的任务。这是我们第一篇与“如何保护 Linux 机器”或“强化 Linux 机器”相关的文章。在这篇文章中,我们将解释25 个有用的提示和技巧来保护您的 Linux 系统。希望以下提示和技巧能帮助您进一步保护您的系统。
1. 物理系统安全
配置BIOS以禁用从CD/DVD、外部设备、软盘驱动器启动。接下来,启用BIOS密码并使用密码保护GRUB以限制对系统的物理访问。
- 设置 GRUB 密码来保护 Linux 服务器
2.磁盘分区
拥有不同的分区对于在发生任何灾难时获得更高的数据安全性非常重要。通过创建不同的分区,可以将数据分开并分组。当发生意外事故时,只有该分区的数据会受损,而其他分区上的数据则幸存下来。确保您必须拥有以下单独的分区,并确保第三方应用程序应安装在/opt下的单独文件系统上。
/ /boot /usr /var /home /tmp /opt
3. 最小化软件包以减少漏洞
您真的想安装所有类型的服务吗?建议避免安装无用的软件包,以避免软件包中的漏洞。这可以最大限度地降低一种服务的入侵可能导致其他服务入侵的风险。查找并删除或禁用服务器上不需要的服务以最大限度地减少漏洞。使用“ chkconfig ”命令找出在运行级别 3上运行的服务。
# /sbin/chkconfig --list |grep '3:on'
一旦发现任何不需要的服务正在运行,请使用以下命令禁用它们。
# chkconfig serviceName off
使用RPM包管理器(例如“ yum ”或“ apt-get ”工具列出系统上所有已安装的包,并使用以下命令将其删除。
# yum -y remove package-name
# sudo apt-get remove package-name
- 5 chkconfig 命令示例
- 20 个 RPM 命令的实例
- 用于 Linux 包管理的 20 个 Linux YUM 命令
- 25 个 APT-GET 和 APT-CACHE 命令来管理包管理
4.检查监听网络端口
借助“ netstat ”网络命令,您可以查看所有开放端口和相关程序。正如我上面所说,使用“ chkconfig ”命令禁用系统中所有不需要的网络服务。
# netstat -tulpn
5. 使用安全外壳(SSH)
Telnet和rlogin协议使用纯文本,而不是加密格式,这是安全漏洞。SSH是一种安全协议,在与服务器通信时使用加密技术。
除非必要,否则切勿直接以root身份登录。使用“ sudo ”执行命令。 sudo 在/etc/sudoers文件中指定,也可以使用在VI编辑器中打开的“ visudo ”实用程序进行编辑。
还建议将默认的SSH 22端口号更改为其他更高级别的端口号。打开主SSH配置文件并设置以下一些参数以限制用户访问。
# vi /etc/ssh/sshd_config
禁用 root 登录
PermitRootLogin no
仅允许特定用户
AllowUsers username
使用 SSH 协议 2 版本
Protocol 2
6. 保持系统更新
当有最新版本的补丁、安全修复程序和内核时,始终保持系统更新。
# yum updates # yum check-update
7. 锁定 Cronjobs
Cron有自己的内置功能,可以指定谁可以运行作业,谁不能运行作业。这通过使用名为/etc/cron.allow和/etc/cron.deny的文件来控制。要锁定使用 cron 的用户,只需在cron.deny中添加用户名,并允许用户运行 cron,请添加cron.allow文件。如果您想禁止所有用户使用 cron,请在cron.deny文件中添加“ ALL ”行。
# echo ALL >>/etc/cron.deny
8. 禁用 USB 记忆棒检测
很多时候,我们想限制用户在系统中使用USB存储设备,以保护数据不被窃取。创建一个文件“ /etc/modprobe.d/no-usb ”,并添加以下行将不会检测USB存储设备。
install usb-storage /bin/true
9. 打开 SELinux
安全增强型 Linux ( SELinux ) 是内核提供的强制访问控制安全机制。禁用SELinux意味着从系统中删除安全机制。删除前请三思,如果您的系统连接到互联网并可供公众访问,请再三考虑。
SELinux提供了三种基本操作模式,它们是:
- 强制执行:这是默认模式,它在机器上启用并强制执行SELinux安全策略。
- 宽容:在此模式下,SELinux不会在系统上强制执行安全策略,只会发出警告和记录操作。此模式在解决与SELinux相关的问题时非常有用。
- 已禁用:SELinux已关闭。
您可以使用“ system-config-selinux ”、“ getenforce ”或“ sestatus ”命令从命令行查看SELinux模式的当前状态。
# sestatus
如果被禁用,请使用以下命令启用SELinux 。
# setenforce enforcing
它也可以从“ /etc/selinux/config ”文件进行管理,您可以在其中启用或禁用它。
10. 删除 KDE/GNOME 桌面
您的专用LAMP服务器无需运行X Window桌面(如KDE或GNOME)。您可以删除或禁用它们以提高服务器的安全性和性能。要禁用它们,只需打开文件“ /etc/inittab ”并将运行级别设置为3即可。如果您希望将其从系统中完全删除,请使用以下命令。
# yum groupremove "X Window System"
11.关闭IPv6
如果您不使用IPv6协议,则应禁用它,因为大多数应用程序或策略不需要IPv6协议,并且目前服务器上也不需要它。转到网络配置文件并添加以下行以禁用它。
# vi /etc/sysconfig/network
NETWORKING_IPV6=no IPV6INIT=no
12.限制用户使用旧密码
如果您想禁止用户使用相同的旧密码,这非常有用。旧密码文件位于/etc/security/opasswd。这可以通过使用PAM模块来实现。
在RHEL / CentOS / Fedora下打开 ' /etc/pam.d/system-auth ' 文件。
# vi /etc/pam.d/system-auth
在Ubuntu/Debian/Linux Mint下打开‘/etc/pam.d/common-password ’文件。
# vi /etc/pam.d/common-password
将以下行添加到' auth '部分。
auth sufficient pam_unix.so likeauth nullok
将以下行添加到'密码'部分以禁止用户重复使用其最后5 个密码。
password sufficient pam_unix.so nullok use_authtok md5 shadow remember=5
服务器仅记住最后5 个密码。如果您尝试使用最后5个旧密码中的任何一个,您将收到类似以下错误。
Password has been already used. Choose another.
13.如何检查用户密码过期
在 Linux 中,用户的密码以加密格式存储在“ /etc/shadow ”文件中。要检查用户的密码是否过期,您需要使用“ chage ”命令。它显示密码过期详细信息以及上次密码更改日期。系统使用这些详细信息来决定用户何时必须更改其密码。
要查看任何现有用户的老化信息(例如到期日期和时间),请使用以下命令。
#chage -l username
要更改任何用户的密码期限,请使用以下命令。
#chage -M 60 username #chage -M 60 -m 7 -W 7 userName
参数
- -M设置最大天数
- -m设置最少天数
- -W设置警告天数
14. 手动锁定和解锁帐户
锁定和解锁功能非常有用,您可以锁定帐户一周或一个月,而不是从系统中删除帐户。要锁定特定用户,您可以使用以下命令。
# passwd -l accountName
注意:锁定的用户仅对root用户可用。锁定是通过用 ( ! ) 字符串替换加密密码来执行的。如果有人尝试使用此帐户访问系统,他将收到类似以下的错误。
# su - accountName This account is currently not available.
要解锁或启用对锁定帐户的访问,请使用命令 as。这将删除带有加密密码的 ( ! ) 字符串。
# passwd -u accountName
15. 强制使用更强的密码
许多用户使用软密码或弱密码,他们的密码可能会被基于字典或暴力攻击破解。PAM (可插入身份验证模块)模块堆栈中提供了“pam_cracklib”模块,它将强制用户设置强密码。使用编辑器打开以下文件。
另请阅读:
# vi /etc/pam.d/system-auth
并使用信用参数添加行(lcredit,ucredit,dcredi t 和/或ocredit分别为小写,大写,数字和其他)
/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
16.启用Iptables(防火墙)
强烈建议启用Linux 防火墙来保护您的服务器免受未经授权的访问。应用iptables中的规则来过滤传入、传出和转发的数据包。我们可以指定允许和拒绝特定udp/tcp端口号的源地址和目标地址。
- 基本 IPTables 指南和技巧
17. 在 Inittab 中禁用 Ctrl+Alt+Delete
在大多数 Linux 发行版中,按下“ CTRL-ALT-DELETE”将导致系统重新启动。因此,如果有人误操作,至少在生产服务器上启用此选项并不是一个好主意。
This is defined in ‘/etc/inittab‘ file, if you look closely in that file you will see a line similar to below. By default line is not commented out. We have to comment it out. This particular key sequence signalling will shut-down a system.
# Trap CTRL-ALT-DELETE #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
18. Checking Accounts for Empty Passwords
Any account having an empty password means its opened for unauthorized access to anyone on the web and it’s a part of security within a Linux server. So, you must make sure all accounts have strong passwords and no one has any authorized access. Empty password accounts are security risks and that can be easily hackable. To check if there were any accounts with empty password, use the following command.
# cat /etc/shadow | awk -F: '($2==""){print $1}'
19. Display SSH Banner Before Login
It’s always a better idea to have an legal banner or security banners with some security warnings before SSH authentication. To set such banners read the following article.
20. Monitor User Activities
If you are dealing with lots of users, then its important to collect the information of each user activities and processes consumed by them and analyse them at a later time or in case if any kind of performance, security issues. But how we can monitor and collect user activities information.
There are two useful tools called ‘psacct‘ and ‘acct‘ are used for monitoring user activities and processes on a system. These tools runs in a system background and continuously tracks each user activity on a system and resources consumed by services such as Apache, MySQL, SSH, FTP, etc. For more information about installation, configuration and usage, visit the below url.
21. Review Logs Regularly
Move logs in dedicated log server, this may prevents intruders to easily modify local logs. Below are the Common Linux default log files name and their usage:
- /var/log/message – Where whole system logs or current activity logs are available.
- /var/log/auth.log – Authentication logs.
- /var/log/kern.log – Kernel logs.
- /var/log/cron.log – Crond logs (cron job).
- /var/log/maillog – Mail server logs.
- /var/log/boot.log – System boot log.
- /var/log/mysqld.log – MySQL database server log file.
- /var/log/secure – Authentication log.
- /var/log/utmp or /var/log/wtmp : Login records file.
- /var/log/yum.log: Yum log files.
22. Important file Backup
In a production system, it is necessary to take important files backup and keep them in safety vault, remote site or offsite for Disasters recovery.
23. NIC Bonding
网卡绑定有两种模式,需要在绑定接口中提及。
- 模式=0 – 循环
- 模式 = 1 – 主动和备份
NIC 绑定可帮助我们避免单点故障。在NIC绑定中,我们将两个或多个网络以太网卡绑定在一起,并创建一个虚拟接口,我们可以在其中分配IP地址以与其他服务器通信。如果某个NIC 卡因任何原因出现故障或不可用,我们的网络将可用。
另请参阅:在 Linux 中创建 NIC 通道绑定
24. 将 /boot 保持为只读
Linux 内核及其相关文件位于/boot目录中,该目录默认为可读写。将其更改为只读可降低关键启动文件被未经授权修改的风险。为此,请打开“ /etc/fstab ”文件。
# vi /etc/fstab
在底部添加以下行,保存并关闭。
LABEL=/boot /boot ext2 defaults,ro 1 2
请注意,如果您将来需要升级内核,则需要将更改重置为读写。
25. 忽略 ICMP 或广播请求
在“ /etc/sysctl.conf ”文件中添加以下行以忽略ping或广播请求。
Ignore ICMP request: net.ipv4.icmp_echo_ignore_all = 1 Ignore Broadcast request: net.ipv4.icmp_echo_ignore_broadcasts = 1
通过运行以下命令加载新设置或更改
#sysctl -p
如果您错过了上述列表中任何重要的安全或强化提示,或者您有任何其他需要包含在列表中的提示。请在我们的评论框中发表您的评论。Example始终乐于收到评论、建议以及改进讨论。