互联网大厂都在用 Linux 系统优化指南

戳上方蓝字“Java知音”关注我

安装好Linux后,为了系统的安全性,我们需要为系统调优和安全设置,下面是在企业实际生产环境中常用的调优及安全设置。

一. 禁用SELinux

SELinux是美国国家安全局对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里就把他关了吧。至于安全访问,可通过防火墙来实现,这也是大多数生产环境的做法。

1. 永久禁用SELinux

vim /etc/selinux/config
SELINUX=disabled

必须重启系统才能生效

2. 临时禁用SELInux

getenforce      #查看SELInux当前状态
setenforce 0      #数字0表示Permissive,即给出警告但不会阻止操作,相当于disabled,数字1表示Enforcing,即开启SELinux

生产环境中可以先临时禁用SELinux,即设置setenforce 0,再去修改selinux的配置文件永久禁用。

这样就不用立即重启系统也能禁用SELinux了,等下次系统重启时就能实现永久禁用了。之所以这样做,是因为线上的系统不能随便立即重启的。

二. 精简开机启动服务

精简开机启动服务是为了节省系统资源,也为了减少安全漏洞。最好只开启必须的服务。

以下是几个必要的开机启动服务:

  • 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 系统安全优化中,遵循最小化原则是至关重要的。

以下是一些关键的最小化原则:

  • 最小化安装: 安装的 Linux 系统应该是最小化的,只安装必需的软件包。使用 Yum 或者其他包管理工具时,也应该尽可能地减少安装不必要的软件包。

  • 最小化开机自启动服务: 系统启动时自动启动的服务应该是最小化的,即只启动必需的服务。禁止启动不必要的服务,以减少系统的攻击面。

  • 最小化命令使用: 在使用命令时,应该尽可能使用最小化的选项和参数。例如,应该优先使用 rm -f 命令而不是 rm -rf,以减少意外删除文件的风险。

  • 最小化登录权限: 禁止 root 用户远程登录,使用普通用户登录系统。并且,对普通用户的授权应该是最小化的,只授予必要的管理系统命令的权限,以降低潜在的安全风险。

  • 最小化文件及目录权限: 对文件和目录的权限应该是最小化的,禁止普通用户随意创建、更改或删除文件。合理设置文件和目录的权限,以保护系统的安全性和完整性。

遵循这些最小化原则可以帮助提高 Linux 系统的安全性,减少系统面临的安全风险。

四. 利用sudo 控制用户对系统命令的使用权限

为了提高系统的安全性和管理的灵活性,可以利用sudo来精确控制用户对系统命令的使用权限。

  1. 执行 visudo 命令,即可快速打开编辑 /etc/sudoers 文件。

  2. 在文件中找到 root ALL=(ALL) ALL 这行,表示允许root用户在任意主机执行任何命令。

  3. 在该行下面添加需要提升为root权限的普通用户名及其权限,其格式为:

username_or_group hostname=(runas) command

其中:

  • username_or_group 是要赋予权限的普通用户名或用户组。

  • hostname 表示允许登录的主机,使用 ALL 表示任意主机。

  • (runas) 表示以谁的身份执行命令,使用 ALL 表示root身份。

  • command 表示用户被允许执行的命令。

示例:

zhangsan ALL=(ALL) /usr/sbin/reboot,/usr/sbin/useradd

五. 设置Linux服务器时间同步

服务器的时间准确性对于数据记录和业务流程至关重要。如果服务器的时间不准确,可能会导致数据错误,特别是在订单等时间敏感的业务中。因此,确保服务器时间的准确性是至关重要的。

在 Linux 系统中,我们可以通过同步服务器时间来保证准确性。同步的目标可以是网络上的时间服务器,也可以是本地内网的时间服务器。

通常,我们可以使用诸如 ntpdate 等命令来执行时间同步操作。结合定时任务,可以定期执行时间同步操作,以确保服务器时间的持续准确。

六. 调整系统文件描述符数量

每个用户能打开的文件数量是有限的,使用命令ulimit -n查看,默认是1024。使用ulimit -SHn 102400 命令来修改限制,但这是临时的,在退出登录会话后就会失效了。

如果想永久变更就修改/etc/security/limits.conf 文件,如下:

vi /etc/security/limits.conf
* hard nofile 102400
* soft nofile 102400

这只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。

系统级的限制是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:

sysctl -w fs.file-max=102400

使用sysctl命令更改也是临时的,如果想永久更改需要在/etc/sysctl.conf添加

fs.file-max=102400

保存退出后使用sysctl -p 命令使其生效。

七. 锁定系统关键文件,防止被提权篡改

要锁定关键系统文件,必须对账号密码及启动文件加锁,防止被篡改。

上锁命令如下:

chattr +i /etc/passwd /etc/shadow /etc/group /etc/inittab

上锁后所有用户都不能对文件修改删除

解锁命令:

chattr -i /etc/passwd /etc/shadow /etc/group /etc/inittab

八. 禁止Linux被ping

此项不是必须的,因为有时候我们需要ping服务器查看网络是否正常。当然设置禁止ping也可以,从安全的角度来看,禁止ping还会增加系统的安全性。

永久设置禁止ping :

echo "net.ipv4.icmp_echo_ignore_all=1"  >> /etc/sysctl.conf  #0表示允许,1表示禁止
sysctl -p              #重新加载内核参数

这样在客户端ping服务器就会出现请求超时。

以上这样禁止ping并不是最优的方案,实际生产环境中最常用的做法是通过防火墙来设置让指定的IP可以ping,如下:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all    #0表示允许,1表示禁止

iptables是Linux命令行防火墙,也可以配置规则禁用ping流量。在Linux服务器上通过iptables来禁用ping请求。

以下规则用于正常禁用与服务器之间的 ping 操作。

[root@localhost ~]# sudo iptables -A INPUT -p icmp –icmp-type echo-request -j DROP
[root@localhost ~]## sudo iptables -A OUTPUT -p icmp –icmp-type echo-reply -j

九. ssh配置优化

修改之前,需要将/etc/ssh/sshd_config备份一个,比如/etc/ssh/sshd_config.old

主要优化如下参数:

Port 12011 
PermitRootLogin no 
UseDNS no #防止ssh客户端超时# ClientAliveInterval 30 ClientAliveCountMax 99 GSSAuthentication no

优化目的在于更改ssh远程端口、禁用root远程登录(本地还是可以root登录的)、禁用dns可以防止ssh超时,解决ssh慢的问题。

另外,你还可以启用密钥登录,这个根据公司需求来操作。

注意:修改以后需重启ssh生效。

禁用ssh登录执行某些命令

#编辑~/.ssh/authorized_keys,在前面加上语句:
command="bash --restricted --noprofile --rcfile$HOME/.stricted_profile" ssh-rsa……  #使用restricted模式,并且不加载系统默认的profile文件,而加载我们定义的profile文件$HOME/.stricted_profile。上面添加command参数一定是在一个主机行的前面,每添加一台主机,需要添加一行。
vim $HOME/.stricted_profile文件  #内容如下
PATH=${HOME}/bin
export PATH
#配置允许ssh登录可执行的命令
mkdir $HOME/bin
ln -s /usr/bin/ssh $HOME/bin/  #当登陆这台机器的时候,除了ssh 命令,不能使用其他任何命令

禁用scp和sftp

rpm -qa|grep openssh-*
yum remove openssh-clients -y
#禁止sftp
vi /etc/ssh/sshd.config
Subsystem sftp /usr/libexec/openssh/sftp-server #注释掉
mv /usr/lib/sftp-server /usr/lib

十. 主机名更改

ssh登录以后,势必会看到主机名,这个主机名建议根据业务需要进行命名。这个命名同时也方便于我们后续的监控自动添加以及对批量化管理有帮助。

十一. 禁止执行  rm -rf /*

利用工具afe-rm,  安装后替换系统命令rm;

  • 下载地址:https://launchpad.net/safe-rm/+download;

  • 下载:wget  https://launchpad.net/safe-rm/trunk/1.1.0/+download/safe-rm-1.1.0.tar.gz

tar -zxvf safe-rm-1.1.0.tar.gz   # 将safe-rm命令复制到系统的/usr/local/bin目录
cp safe-rm-1.1.0/safe-rm /usr/local/bin/
ln -s /usr/local/bin/safe-rm /usr/local/bin/rm   # 创建软链接,用safe-rm替换rm,如果有问题,请检查环境变量PATH,是否包含/usr/local/bin路径

设置过滤目录:

编辑 /etc/safe-rm.conf 文件,添加需要过滤的目录即可,一行一个,而且应满足递归原则;

格式:

  • / 代表过滤 目录/

  • ./* 代表过滤 目录/ 下面的所有文件

递归过滤示例(这样/root/blue/students各级目录都会受到保护):

/
/root
/root/blue
/root/blue/students

来源|DevOps实战派


后端专属技术群

构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!

文明发言,以交流技术职位内推行业探讨为主

广告人士勿入,切勿轻信私聊,防止被骗

加我好友,拉你进群

相关推荐

  • IDEA 接口调试神器,贼好用!
  • 当 React 核心开发者逐渐离开 ,React 在社区还有未来吗?
  • 时间序列和时空数据大模型综述!
  • 提高大模型微调效率最新SOTA,性能强大易复现!
  • 详解 Spark Core 调优之数据倾斜调优(建议收藏)
  • 性能优化的PDCA
  • “毒舌”CTO又来了:知识工程才是未来!
  • 有奖征文丨探索AI绘画,赢机械键盘、耳机与鹅厂开发者周边
  • 赠你13张图,助你20分钟打败了「V8垃圾回收机制」!!!
  • QQ 25年技术巡礼丨技术探索下的清新设计,打造轻盈简约的QQ9
  • 面试官:indexOf 第二个参数有什么作用?
  • 2024年Node.js精选:50款工具库集锦,项目开发轻松上手(三)
  • 随时准备好编码的云开发环境
  • 浅谈JVM运行期的几种优化手段
  • 大模型遇见社会科学:从“人的社会”到“AI的社会” 的研究 | 中文信息处理实验室探寻AI与社会科学结合研究的新视角
  • CCL24评测火热报名:中文意合图语义解析评测
  • 哈尔滨工业大学(深圳)计算机学院陈科海老师招收硕博研究生
  • [开源]一款电子合同产品,提供一站式数据安全的合同签署解决方案
  • 接口安全十一招,招招真香!
  • 北京/苏州内推 | 微软亚洲互联网工程院招聘NLP/LLM方向算法实习生