linux系统优化

linux系统优化

如果对运维课程感兴趣,可以在b站上、csdn或微信视频号 上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频

1.linux系统优化原则:(最小化原则)

  1. 安装系统最小化
  2. 开启服务最小化原则
  3. 操作最小化原则
  4. 登录最小化原则,平时不用root登录,要用普通用户登录
  5. 权限最小化
  6. 配置参数合理,不要最大化

2.linux系统优化方案

  1. 关闭selinux
    暂时关闭: setenforce 0
    永久关闭:sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
  2. 修改系统的运行级别(在命令行级别3运行)
    [root@localhost ~]# sed -i '/id/s#[0-9]#3#g' /etc/inittab
  3. 添加普通用户,通过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命令时需输入自己用户密码(仅自己指定权限)
  4. 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
  5. 使用时间同步命令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分钟和标准时间服务器同步一次时间
  6. 配置yum更新源,从国内更新源下载安装软件包
  7. 关闭iptables或者配置适当的iptables防火墙规则
  8. 调整(加大)文件描述符的数量,进程及文件的打开都会消耗文件描述符
    对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负的整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。进程使用文件描述符来标识打开的文件,每个进程启动的时候都需要文件描述符,当进程数量多的时候,文件描述符默认的是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
  9. 定时自动清理/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 //脚本清理
  10. 精简开机自启动服务(只保留: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
  11. 更改字符集,支持中文,但建议还是用英文字符集,防止乱码,可以用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 //表示把字符集临时调整为英文
  12. 锁定关键系统文件,防止提权篡改(上锁后,用户不能对文件修改删除,root用户也不能)
    chattr +i 文件名//锁定文件 chattr -i 文件名 //解锁文件 lsattr 文件名 //查看是否锁定(有i表示锁定)
    [root@localhost ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
  13. 清空/etc/issue,隐藏登录时候显示的系统版本号
    [root@localhost ~]# > /etc/issue 或者cat /dev/null > /etc/issue //清空系统版本号
    //此后,计算机在重启登录时就看不到系统版本号了
  14. 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
  15. 给grub设置密码,防止他人修改grub做内核等启动设置或他人破解密码
  16. 先用命令grub-md5-crypt输入明文密码再生成一个密文密码
  17. 在/boot/grub/grub.conf文件中添加:password --md5 生成的密文密码
    //在title上面添加,这句要加在splashimage和title之间,否则可能不生效。
  18. 这样以后再重启系统破解密码时候,如果直接按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或微信视频号 上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实战技术视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维实战课程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值