linux系统优化
如果对运维课程感兴趣,可以在b站上、csdn或微信视频号 上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频
1.linux系统优化原则:(最小化原则)
- 安装系统最小化
- 开启服务最小化原则
- 操作最小化原则
- 登录最小化原则,平时不用root登录,要用普通用户登录
- 权限最小化
- 配置参数合理,不要最大化
2.linux系统优化方案
- 关闭selinux
暂时关闭: setenforce 0
永久关闭:sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux - 修改系统的运行级别(在命令行级别3运行)
[root@localhost ~]# sed -i '/id/s#[0-9]#3#g' /etc/inittab - 添加普通用户,通过sudo提权管理 (sudo提权命令让普通用户shi拥有各种身份的功能)
[root@localhost ~]# visudo //或者 vim /etc/sudoers
root ALL=(ALL) ALL
shi ALL=(ALL) NOPASSWD: ALL //shi用户使用sudo命令时不用输入自己用户密码(和root一样身份)
shi ALL=(ALL) ALL //shi用户使用sudo命令时需要输入自己用户密码(和root一样身份)
shi ALL=(ALL) /bin/touch,/usr/sbin/useradd //shi用户使用sudo命令时需输入自己用户密码(仅自己指定权限) - sshd基本安全配置(修改默认端口号、禁止root远程连接、不许空密码登录、拒绝允许某些用户登录)
[root@localhost ~]# vim /etc/ssh/sshd_config
Port 8000 #默认22,改用非标准端口,如8000
Protocol 2 #启用ssh的V2版协议
PermitRootLogin no #默认yes,是否禁止root登录,修改为no,不允许root用户登录 (xshell和ssh都不能用root用户连接)
PermitEmptyPasswords no #默认no且注释,需要释放,是否禁止空密码登录,一般设置为no,不允许空密码登录
#ListenAddress 0.0.0.0 #监听的某一个IP,默认如此且注释
UseDNS no #默认yes且注释,是否解析客户机地址,修改为no,不使用DNS
#LoginGraceTime 2m #登录超时时间(2min),默认如此且注释
#StrictModes yes #严格模式(检查权限,文件等),默认如此且注释
#MaxAuthTries 6 #每连接最多认证次数,默认如此且注释
denyusers tom lily #拒绝某些用户登录(黑名单)(本地服务器需有该用户)
allowusers jim #允许某些用户登录(白名单,只允许其中的用户登录) (本地服务器需有该用户)
allowusers jim@192.168.4.*,192.168.1.11 #允许用户从某个网段或某个IP登录(本地服务器需有该用户)
[root@localhost 桌面]# /etc/init.d/sshd restart - 使用时间同步命令ntpdate,定时自动更新服务器时间,使其与互联网时间同步
[root@localhost ~]#/usr/sbin/ntpdate http://time.nist.gov //临时执行时间同步,需能上网才行
//http://time.nist.gov标准时间服务器,如果没了,重选别的
[root@localhost ~]#echo '*/5 * * * /usr/sbin/ntpdate time.nist.gov' > /dev/null 2>&1 >> /var/spool/cron/root
//周期性同步时间,每5分钟和标准时间服务器同步一次时间 - 配置yum更新源,从国内更新源下载安装软件包
- 关闭iptables或者配置适当的iptables防火墙规则
- 调整(加大)文件描述符的数量,进程及文件的打开都会消耗文件描述符
对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负的整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。进程使用文件描述符来标识打开的文件,每个进程启动的时候都需要文件描述符,当进程数量多的时候,文件描述符默认的是1024个会不够用,需要加大。如果文件描述符不够用了,进程就启动不了了。文件描述符也不是越大越好,一般只要够用就可。范围是0-65535,老男孩设置的最大值是:65535.
查看文件描述符个数:ulimit -n
临时加大:ulimit –HSn 数目 永久加大:echo '* - nofile 3000' >> /etc/security/limits.conf
例子:
[root@localhost ~]# ulimit -n //查看文件描述符个数
1024
[root@localhost ~]# ulimit -HSn 2000 //临时加大
[root@localhost ~]# ulimit -n
2000
[root@localhost ~]# echo '* - nofile 3000' >> /etc/security/limits.conf //永久加大
[root@localhost ~]# tail -1 /etc/security/limits.conf
* - nofile 3000 //重新注销后,再登录系统后查看,就生效了。
[root@localhost ~]# ulimit -n
3000 - 定时自动清理/var/spool/clientmquene/目录及文件,防止inodes节点被占满
[root@localhost ~]# find /var/spool/clientmqueue/ -type f |xargs rm -f //手动清理
echo "find /var/spool/clientmqueue/ -type f |xargs rm -f" > /shell/mail_del.sh //也可crontab -e编辑
echo "00 00 * * * /bin/sh /shell/mail_del.sh >/dev/null 2>&1" >> /var/spool/cron/root //脚本清理 - 精简开机自启动服务(只保留:crond、sshd、network、syslog(rsyslog))
for i in `chkconfig --list |grep "3:on" |awk '{print $1}'`;do chkconfig $i off;done
//把在3级别上开机自启的服务全部关闭。
for i in crond network sshd rsyslog;do chkconfig $i on;done
//把需要开启的开机自启让其开机自启。
[root@localhost ~]# chkconfig --list |grep "3:on"
crond 0:off1:off2:on3:on4:on5:on6:off
network 0:off1:off2:on3:on4:on5:on6:off
rsyslog 0:off1:off2:on3:on4:on5:on6:off
sshd 0:off1:off2:on3:on4:on5:on6:off - 更改字符集,支持中文,但建议还是用英文字符集,防止乱码,可以用chkconfig试验
[root@localhost 桌面]# cat /etc/sysconfig/i18n
LANG="en_CN.UTF-8" //英文 或 LANG="zh_CN.UTF-8" //中文 或 LANG=zh_CN.GB1803 //可根据需要设置
[root@localhost ~]# source /etc/sysconfig/i18n //或者 . /etc/sysconfig/i18n
[root@localhost ~]# LANG=en //表示把字符集临时调整为英文 - 锁定关键系统文件,防止提权篡改(上锁后,用户不能对文件修改删除,root用户也不能)
chattr +i 文件名//锁定文件 chattr -i 文件名 //解锁文件 lsattr 文件名 //查看是否锁定(有i表示锁定)
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab - 清空/etc/issue,隐藏登录时候显示的系统版本号
[root@localhost ~]# > /etc/issue 或者cat /dev/null > /etc/issue //清空系统版本号
//此后,计算机在重启登录时就看不到系统版本号了 - linux内核参数优化/etc/sysctl.conf,刷新sysctl-p生效
内核生产环境优化参数:这儿所列参数是老男孩老师生产中常用的参数:可根据实际情况作调整。
[root@localhost 桌面]# vim /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 2 #对于断开的socket连接,TCP保持在FIN-WAIT状态时间(秒),默认:60
net.ipv4.tcp_tw_reuse = 1 #是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接
net.ipv4.tcp_tw_recycle = 1 #打开快速 TIME-WAIT sockets 回收,默认:0
net.ipv4.tcp_syncookies = 1 #开启syncookies,syn等候队列溢出时启用cookie,防syn flood攻击,默认:0
net.ipv4.tcp_keepalive_time = 600 #TCP发送探测消息间隔时间(秒),用于确认TCP连接是否有效,默认:7200
net.ipv4.ip_local_port_range = 4000 65000 #用于向外连接的端口范围(最小,最大),默认:1024,65000
net.ipv4.tcp_max_syn_backlog = 16384 #还未获得客户端确认的连接请求﹐需保存在队列中的最大数目,默认:1024
net.ipv4.tcp_max_tw_buckets = 36000 #系统同时处理的最大 timewait sockets 数目,默认:180000,防dos攻击
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1 #一个新连接,内核要发送多少个 SYN 连接请求才决定放弃,默认:5
net.ipv4.tcp_synack_retries = 1 #远端连接请求SYN,内核会发送SYN + ACK数据报,以确认收到,默认:5
net.ipv4.tcp_max_orphans = 16384 #系统所能处理不属于任何进程的TCP sockets最大数量,默认:8192
net.ipv4.tcp_wmem = 8192 131072 16777216 #发送缓存设置(最小,默认,最大),默认:4096,16384,131072
net.ipv4.tcp_rmem = 32768 131072 16777216 #接收缓存设置(最小,默认,最大),默认:4096,87380,174760
net.ipv4.tcp_mem = 786432 1048576 1572864
net.core.somaxconn = 16384 #用来限制监听(LISTEN)队列最大数据包的数量,默认:128
net.core.netdev_max_backlog = 16384 #允许送到队列的数据包的最大数目,默认:1024
net.ipv4.tcp_keepalive_probes = 3 #TCP发送探测消息间隔时间(秒),用于确认TCP连接是否有效,默认:9
net.ipv4.tcp_keepalive_intvl =15 #探测消息未获得响应时,重发该消息的间隔时间(秒)。默认:75秒。
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
wq
[root@localhost 桌面]# sysctl -p - 给grub设置密码,防止他人修改grub做内核等启动设置或他人破解密码
- 先用命令grub-md5-crypt输入明文密码再生成一个密文密码
- 在/boot/grub/grub.conf文件中添加:password --md5 生成的密文密码
//在title上面添加,这句要加在splashimage和title之间,否则可能不生效。 - 这样以后再重启系统破解密码时候,如果直接按e编辑会不起作用,必须先按p后,然后输入事先设置的grub密码,才能进入系统破解密码。
例子:
[root@localhost ~]# grub-md5-crypt
Password: 输入明文密码 123
Retype password: 重复明文密码123
$1$rSi.l/$kdU/qQBPpFpzvasfnj36o/ #生成一个密文密码
[root@localhost ~]# vim /boot/grub/grub.conf
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu #此为原有内容
password --md5 $1$rSi.l/$kdU/qQBPpFpzvasfnj36o/ #添加改行
title CentOS 6 (2.6.32-504.el6.x86_64) #此为原有内容
这样以后再重启系统破解密码时候,如果直接按e编辑会不起作用,必须先按p后,然后输入事先设置的grub密码:123,才能进入系统破解密码。如果不想有该设置,可以直接回车进入系统后,vim /etc/grub/grub.conf 把刚才设置的密码删除,就能恢复到正常状态了。
16) TCP WrapperS防护机制,可以限制某些机器是否能访问本地服务器的某些服务。
TCP WrapperS的配置文件:(/etc/hosts.allow,/etc/hosts.deny)
[root@localhost ~]# vim /etc/hosts.allow
服务名:客户机地址
……………… //想允许几个服务,就写几个
[root@localhost ~]# vim /etc/hosts.deny
服务名:客户机地址
……………… //想拒绝几个服务,就写几个
例子:
在192.168.4.205上设置WrapperS防护:拒绝192.168.4.20访问vsftpd服务
[root@pc205 ~]# vim /etc/hosts.deny
vsftpd:192.168.4.20 添加
设置后,192.168.4.20这台机器就无法连接登录192.168.4.205机器的vsftpd服务.
17)合理规划系统分区,要求特定独立的分区: /, /boot, Swap, /home, /usr, /var
挂载分区时使用以下选项:(临时挂载和永久挂载(vim /etc/fstab))
-o nosuid 使分区不支持suid
-o noexec 使分区不支持可执行文件
-o noatime 使分区不再更新atime(访问时间)在对应分区加,如果不加,则
18)tty终端控制:允许启用哪些tty终端 (配置文件:/etc/sysconfig/init)
[root@localhost 桌面]# vim /etc/sysconfig/init
ACTIVE_CONSOLES=/dev/tty[1-6] 可以改成1-2或1-3等
19)只允许root从指定的几个终端登录:(vim /etc/securetty )
[root@localhost 桌面]# vim /etc/securetty
tty1
tty2 //写进去的都是root能用的。多余的尽量不要
20)禁止普通用户登录:在电脑上touch一个空文件:/etc/nologin即可
[root@localhost 桌面]# touch /etc/nologin //做后:任何普通用户会发现登录不成功。
[root@localhost 桌面]# rm -rf /etc/nologin //再登录,能成功。
如果对运维课程感兴趣,可以在b站上、csdn或微信视频号 上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频