前言
环境:CentOS7.9
安装好Linux后,为了系统的安全性,我们需要为系统调优和安全设置,下面介绍一些企业实际生产环境中常用的调优及安全设置。
禁用SELinux
SELinux是美国国家安全局对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里就把他关了吧,至于安全访问,可通过防火墙来实现,这也是大多数生产环境的做法。
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
精简开机自启动服务
精简开机自启动是为了节省系统资源,只开启必须的服务。以下是几个必要的开机自启动的服务:
sshd(远程连接服务)、rsyslog(系统的日志服务)、network(网络网卡服务)、crond(计划任务服务,使用crontab命令创建计划任务)、sysstat(一个软件包,包含检测系统性能和吞吐率的一组工具)
centos5.x和centos 6.x版本使用chkconfig 命令来设置开机自启动服务
chkconfig --list #查看所有的开机自启动服务
chkconfig --del service_name #删除开机自启动的服务
chkconfig --add service_name #添加服务开机自启动
chkconfig --level 35 service_name on|off #表示35级别下默认启动|关闭
chkconfig --level 5 service_name off #表示5级别下开机不启动
centos7.x版本后不再使用chkconfig命令来管理,改用systemctl 命令来管理
systemctl list-unit-files #查看所有的服务,其中enable就表示开机自启动,disable表示禁止开机自启动
systemctl enable service_name #开机自启动
systemctl disable service_name #禁止开机自启动
系统安全最小原则
安装的Linux系统最小化,yum 安装软件也最小化,无用的包不安装;开机自启动服务最小化,即无用的服务不开启;命令最小化,如能用“rm -f tets.txt”就不用“rm -rf tets.txt”;登录最小化,禁用root远程登录,使用普通用户登录即可;普通用户授权最小化,只给用户必要的管理系统的命令;文件及目录权限最小化,禁止随意创建、更改、删除文件。
更改SSH服务远程登录配置
修改ssh默认的22端口;禁用root远程登录;禁止空密码登录;只监听必要的网卡地址而不是所有的网卡地址,如服务器存在内网和外网时,如果禁止外部远程登录只允许内网远程登录,则可以设置ssh只监听内网网卡地址。
利用sudo 控制用户对系统命令的使用权限
执行 visudo 命令即可快速打开编辑/etc/sudoes
文件,找到 root ALL=(ALL)ALL
这行,在这行下面添加需要提升为root权限的普通用户名及权限即可,其格式为:
用户或组 机器=(表示以谁的身份执行)命令
示例:lisi ALL=(ALL) /usr/sbin/reboot,/usr/sbin/useadd
说明:
root ALL=(ALL) ALL
root表示用户名,如果是用户组,这样写 :%组名
ALL :表示允许登录的主机为任意主机
(ALL):表示以谁的身份执行,ALL表示root身份
ALL: 表示当前用户可以执行全部命令,如果指定多个命令需要使用英文道号分割
设置Linux服务器时间同步
服务器的时间是至关重要的,如果服务器的时间不对,那么数据就有可能出现问题,因为前端记录的数据,往数据库插入记录时,一般都是取服务器的时间,所以说服务器的时间不对就很有可能造成订单的时间出现问题,所以服务器的时间准确性是至关重要;同步,顾名思义就是把服务器的时间同步到另外一台服务器,这里指的另外一台服务器就是指网络上或者本地内网的时间服务器。同步的命令有ntpdate等命令,一般使用定时任务结合ntpdate命令来实现定时同步时间。
调整系统文件描述符数量
每个用户能打开的文件数量是有限的,使用命令ulimit -n
查看,默认是1024,使用ulimit -SHn 102400
命令来修改限制,但这时临时的退出登录会话后就失效了,如果想永久变更就修改/etc/security/limits.conf
文件,如下:
vi /etc/security/limits.conf
Oracle hard nofile 102400
Oracle soft nofile 102400
这只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。
系统级的限制是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:
sysctl -w fs.file-max=102400
使用sysctl命令更改也是临时的,如果想永久更改需要在/etc/sysctl.conf
添加
fs.file-max=102400
保存退出后使用sysctl -p /etc/sysctl.conf
命令使其生效。
Linux服务器内核参数优化
内核参数文件是 /etc/sysctl.conf
,打开此文件编辑
vim /etc/sysctl.conf
编辑之后重新读取内核参数生效:sysctl -p /etc/sysctl.conf
锁定系统关键文件,防止被提权篡改
要锁定关键系统文件,必须对账号密码及启动文件加锁,防止被篡改,上锁命令如下:
chattr +i /etc/passwd /etc/shadow /etc/group /etc/inittab
上锁后所有用户都不能对文件修改删除
解锁 命令:chattr -i /etc/passwd /etc/shadow /etc/group /etc/inittab
想要为了更安全防止被黑客利用,可以将chattr改名:mv /usr/bin/chatrr usr/bin/xxx
为grub菜单加密码
为grub菜单加密码的目的是防止他人修改grub进行内核等启动设置,以及用单用户默认启动进行破解root密码等操作,实际上加密码可以在安装系统的过程中设置,安装系统后的具体步骤如下:
执行命令:/sbin/grub2-set-password 生成密码
重启系统,正常启动话就不需要密码,但当出现grub菜单时按下e进入编辑,此时就需要输入用户和密码了,
实际上,在执行/sbin/grub2-set-password 生成密码时系统就生成了一个密码文件 ,即/boot/grub2/user.cfg,删除这个文件,就相当于取消grub菜单加密码了。
禁止Linux被ping
此项不是必须的,因为有时候我们需要ping服务器查看网络是否正常,当然设置禁止ping也可以,从安全的角度来看,禁止ping可以增加系统的安全性。
永久设置禁止ping :
echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf #0表示允许,1表示禁止
sysctl -p /etc/sysctl.conf #重新加载内核参数
在客户端ping服务器就会出现请求超时
临时设置禁止ping :
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #0表示允许,1表示禁止
还原,使Linux服务器能ping,删除 /etc/sysctl.conf 下刚才添加的那行 net.ipv4.icmp_echo_ignore_all=1 ,vim /proc/sys/net/ipv4/icmp_echo_ignore_all 改为0
以上这样禁止ping并不是最优的方案,实际生产环境中最常用的做法是通过防火墙来设置让指定的IP可以ping,如下:
iptables -t filter -I INPUT -p icmp --icmp-type 8 -s 192.168.0.0/24 -j ACCEPT