Linux
默认情况下是安全的,并同意进行一些扩展(这是有争议的话题)。但是,默认情况下,Linux 具有内置的安全模型。需要根据你的需要对其进行调整和自定义,这可能有助于构建更安全的系统。Linux 更难管理,但提供了更多的灵活性和配置选项。
1. 物理系统安全
配置
BIOS
禁用从启动CD/DVD
,External Devices
,Floppy Drive
在BIOS
. 接下来,启用BIOS
密码和保护GRUB
使用密码来限制对系统的物理访问。
2. 磁盘分区
代码语言:javascript复制如果发生任何事故,拥有不同的分区以获得更高的数据安全性很重要。通过创建不同的分区,可以对数据进行分离和分组。当发生意外事故时,只会损坏该分区的数据,而其他分区的数据则保存下来。确保你必须有以下单独的分区,并确保第三方应用程序应安装在单独的文件系统下
/opt
.
/
/boot
/usr
/var
/home
/tmp
/opt
3. 禁止不必要开机启动的服务
代码语言:javascript复制从服务器中查找并删除或禁用不需要的服务,以最大限度地减少漏洞。使用
chkconfig
命令来找出正在运行的服务runlevel 3
.
# /sbin/chkconfig --list |grep '3:on'
代码语言:javascript复制一旦发现任何不需要的服务正在运行,请使用以下命令禁用它们。
# chkconfig serviceName off
代码语言:javascript复制使用
RPM
包管理器,例如yum
或者apt-get
工具列出系统上所有已安装的软件包并使用以下命令删除它们。
# yum -y remove package-name
代码语言:javascript复制# sudo apt-get remove package-name
4.检查监听网络端口
代码语言:javascript复制
netstat
网络命令可以查看所有打开的端口和相关程序。使用chkconfig
命令禁用系统中所有不需要的网络服务。
# netstat -tulpn
5. 使用安全(SSH)
代码语言:javascript复制
Telnet
和rlogin
协议使用纯文本,而不是加密格式,这是安全漏洞。SSH
是一种在与服务器通信时使用加密技术的安全协议。切勿直接以身份登录root
除非必要。用 ”sudo
”来执行命令。sudo 在/etc/sudoers
文件也可以用visudo
应用程序打开VI
编辑。建议更改默认值SSH 22
端口号与其他一些更高级别的端口号。打开主SSH
配置文件,并做一些如下参数来限制用户访问。
# vi /etc/ssh/sshd_config
禁用 root 登录
代码语言:javascript复制PermitRootLogin no
只允许特定用户
代码语言:javascript复制AllowUsers username
使用 SSH 协议 2 版本
代码语言:javascript复制Protocol 2
6. 保持系统更新
代码语言:javascript复制当系统可用时,始终使用最新版本的补丁、安全修复和内核更新系统。
# yum updates
# yum check-update
7. 锁定 Cronjobs
代码语言:javascript复制
Cron
有它自己的内置功能,它允许指定谁可以和谁不想运行作业。这是通过使用名为的文件来控制的/etc/cron.allow
和/etc/cron.deny
. 要使用 cron 锁定用户,只需在cron.deny
并允许用户运行 cron add incron.allow
文件。如果你想禁止所有用户使用 cron,请添加ALL
行到cron.deny
文件。
# echo ALL >>/etc/cron.deny
8. 禁用U盘检测
代码语言:javascript复制很多时候我们想限制用户使用
USB
避免系统数据遭窃取。创建一个文件/etc/modprobe.d/no-usb
并添加以下行将不会检测到USB
贮存。
install usb-storage /bin/true
9. 开启SELinux
Security-Enhanced Linux
(SELinux
) 是内核提供的强制访问控制安全机制。禁用SELinux
意味着从系统中删除安全机制。在删除之前请三思,如果你的系统连接到互联网并被公众访问,那么请多考虑一下。SELinux
提供了三种基本的操作模式,它们是。
Enforcing
:这是启用和强制执行的默认模式SELinux
机器上的安全策略。Permissive
: 在这种模式下,SELinux
不会在系统上强制执行安全策略,只会警告和记录操作。此模式在故障排除方面非常有用SELinux
相关问题。Disabled
:SELinux
已关闭。
代码语言:javascript复制你可以查看当前状态
SELinux
使用 ' 从命令行模式system-config-selinux
,getenforce
或者sestatus
命令。
# sestatus
代码语言:javascript复制如果已禁用,请启用
SELinux
使用以下命令。
# setenforce enforcing
它也可以从
/etc/selinux/config
文件,你可以在其中启用或禁用它。
10. 删除 KDE/GNOME 桌面
代码语言:javascript复制没有必要跑
X Window
台式机之类的KDE
或者GNOME
在你的专用LAMP服务器上。你可以删除或禁用它们以提高服务器的安全性和性能。禁用简单打开文件/etc/inittab
并将运行级别设置为3
. 如果你希望将其从系统中完全删除,请使用以下命令。
# yum groupremove "X Window System"
11. 关闭 IPv6
代码语言:javascript复制如果你不使用
IPv6
协议,那么你应该禁用它,因为大多数应用程序或策略不需要IPv6
协议,目前在服务器上不需要它。转到网络配置文件并添加以下行以禁用它。
# vi /etc/sysconfig/network
代码语言:javascript复制NETWORKING_IPV6=no
IPV6INIT=no
12. 限制用户使用旧密码
代码语言:javascript复制如果你想禁止用户使用相同的旧密码,这将非常有用。旧密码文件位于
/etc/security/opasswd
. 这可以通过使用来实现PAM
模块。打开/etc/pam.d/system-auth
文件在RHEL / CentOS / Fedora
.
# vi /etc/pam.d/system-auth
代码语言:javascript复制打开
‘/etc/pam.d/common-password
文件
# vi /etc/pam.d/common-password
代码语言:javascript复制将以下行添加到
auth
部分。
auth sufficient pam_unix.so likeauth nullok
代码语言:javascript复制将以下行添加到
password
部分禁止用户重复使用最后一个5
他或她的密码。
password sufficient pam_unix.so nullok use_authtok md5 shadow remember=5
代码语言:javascript复制只有最后
5
服务器记住密码。如果你尝试使用最后一个5
旧密码,你会收到类似的错误。
Password has been already used. Choose another.
13. 如何查看用户密码是否过期
代码语言:javascript复制在 Linux 中,用户的密码存储在
/etc/shadow
加密格式的文件。要检查用户的密码过期,你需要使用chage
命令。它显示密码到期详细信息以及最后一次密码更改日期。系统使用这些详细信息来决定用户何时必须更改他/她的密码。查看任何现有用户的老化信息,例如expiry date
和time
,使用以下命令。
#chage -l username
代码语言:javascript复制要更改任何用户的密码时效,请使用以下命令。
#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName
参数
-M
设置最大天数-m
设置最少天数-W
设置警告天数
14.手动锁定和解锁帐户
代码语言:javascript复制锁定和解锁功能非常有用,你可以将其锁定一周或一个月,而不是从系统中删除帐户。要锁定特定用户,你可以使用以下命令。
# passwd -l accountName
代码语言:javascript复制
Note
: 锁定的用户仍然可用root
仅限用户。锁定是通过用 (!
) 。如果有人尝试使用此帐户访问系统,他将收到类似于以下内容的错误。
# su - accountName
This account is currently not available.
代码语言:javascript复制要解锁或启用对锁定帐户的访问,请使用命令 as。这将删除 (
!
) 带有加密密码的字符串。
# passwd -u accountName
15. 使用更强的密码
代码语言:javascript复制许多用户使用软密码或弱密码,他们的密码可能会被黑客入侵
dictionary based
或蛮力攻击。这pam_cracklib
模块在PAM
(Pluggable Authentication Modules
) 模块堆栈,这将强制用户设置强密码。使用编辑器打开以下文件。> 另请阅读:
# vi /etc/pam.d/system-auth
代码语言:javascript复制并使用信用参数添加行作为 (
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 firewall
以保护你的服务器未经授权的访问。应用规则iptables
过滤器incoming
,outgoing
和forwarding
数据包。我们可以指定源地址和目的地址来允许和拒绝特定的udp/tcp
端口号。
17.在Inittab中禁用Ctrl Alt Delete
代码语言:javascript复制在大多数 Linux 发行版中,按
CTRL-ALT-DELETE’
将使你的系统重新启动过程。因此,如果有人错误地这样做,至少在生产服务器上启用此选项并不是一个好主意。> 这在 ' 中定义/etc/inittab
文件,如果你仔细查看该文件,你将看到类似于下面的一行。默认情况下,该行没有被注释掉。我们必须将其注释掉。这个特定的按键序列信号将关闭系统。
# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
18. 检查帐户是否有空密码
代码语言:javascript复制任何具有空密码的帐户都意味着它可以对网络上的任何人进行未经授权的访问,这是 Linux 服务器内安全的一部分。因此,你必须确保所有帐户都具有强密码,并且没有人具有任何授权访问权限。空密码帐户存在安全风险,很容易被黑客入侵。要检查是否有任何密码为空的帐户,请使用以下命令。
# cat /etc/shadow | awk -F: '($2==""){print $1}'
19. 登录前显示 SSH Banner
在 SSH 身份验证之前,最好有一个带有一些安全警告的合法横幅或安全横幅。要设置此类横幅,请阅读以下文章。
20. 监控用户活动
如果你要与大量用户打交道,那么收集他们使用的每个用户活动和进程的信息并在以后或在任何类型的性能、安全问题的情况下对其进行分析很重要。但是我们如何监控和收集用户活动信息。有两个有用的工具叫做
psacct
和acct
用于监视系统上的用户活动和进程。这些工具在系统后台运行,并持续跟踪系统上的每个用户活动和服务消耗的资源,例如Apache
,MySQL
,SSH
,FTP
等
21. 定期查看日志
将日志移动到专用日志服务器中,这样可以防止入侵者轻松修改本地日志。以下是常见的 Linux 默认日志文件名称及其用法:
/var/log/message
– 整个系统日志或当前活动日志可用的地方。/var/log/auth.log
– 身份验证日志。/var/log/kern.log
– 内核日志。/var/log/cron.log
– Crond 日志(cron 作业)。/var/log/maillog
– 邮件服务器日志。/var/log/boot.log
– 系统启动日志。/var/log/mysqld.log
– MySQL 数据库服务器日志文件。/var/log/secure
– 身份验证日志。/var/log/utmp
或者/var/log/wtmp
: 登录记录文件。/var/log/yum.lo
g:Yum 日志文件。
22.重要文件备份
在生产系统中,有必要对重要文件进行备份并将它们保存在安全库、远程站点或异地灾难恢复中。
23. 网卡绑定
有两种模式
NIC
mode=0
– Round Robinmode=1
– Active and Backup
NIC Bonding帮助我们避免单点故障。在网卡绑定中,我们将两个或多个网络以太网卡绑定在一起,形成一个虚拟的接口,在这个虚拟接口中,我们可以分配IP地址与其他服务器进行通信。我们的网络将可用的情况下,一个网卡是down或不可用的任何原因。
24. 保持 /boot 为只读
代码语言:javascript复制Linux内核及其相关文件在
/boot
目录默认为read-write
. 将其更改为read-only
降低未经授权修改关键引导文件的风险。为此,打开/etc/fstab
“ 文件。
# vi /etc/fstab
代码语言:javascript复制在底部添加以下行,保存并关闭它。
LABEL=/boot /boot ext2 defaults,ro 1 2
请注意,如果你以后需要升级内核,则需要将更改重置为读写。
25. 忽略 ICMP 或广播请求
代码语言:javascript复制在
/etc/sysctl.conf
要忽略的文件ping
或者broadcast
要求。
Ignore ICMP request:
net.ipv4.icmp_echo_ignore_all = 1
Ignore Broadcast request:
net.ipv4.icmp_echo_ignore_broadcasts = 1
代码语言:javascript复制通过运行以下命令加载新设置或更改
#sysctl -p
相关文章
linux之ssh命令
Linux之yum命令
Linux之netstat命令