zoukankan      html  css  js  c++  java
  • 1. Linux系统优化

    1. 系统安装

    本着纯净系统的原则,我们在安装系统时,应选择minimal install选项,来执行最小化安装,以便有需要时,安装我们需要的安装软件包。

    操作系统为CentOS7.3 1611
    下载地址:

    https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1611.iso
    

    2. 修改yum源,并安装常用软件

    由于系统的yum源并不能每次都选择到国内的yum源进行安装,影响安装效率,可以替换为国内的yum源,进行使用,当然我们有条件,也可以自己定制自己的yum服务器进行安装。

    yum -y install wget
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum -y install vim net-tools lrzsz bash-completion rsync sysstat git chrony
    

    3. 清除系统信息

    > /etc/issue
    > /etc/motd
    

    4. 设置主机名

    hostnamectl set-hostname  myserver.com
    sed  -i '$a10.0.7.100 myserver.com' /etc/hosts 
    

    5. 关闭防火墙和SELinux

    systemctl disable firewalld
    sed -ri 's@^(SELINUX=).*@1disabled@g' /etc/selinux/config
    

    6. 开启时钟同步

    systemctl enable chronyd
    #重启之后,验证是否启动
    chronyc sources -v
    

    7. 添加普通用户登陆系统

    useradd xiaohou
    echo "123456"|passwd --stdin xiaohou
    

    8. 用户sudo授权

    visudo
    
    #设置一个命令别名
    Cmnd_Alias SHUTDOWN = /sbin/halt, /sbin/shutdown, /sbin/poweroff, /sbin/reboot, /sbin/init
    #对用户xiaohou进行授权,面密码进行一些操作,可以把ALL替换为你想要的命令路径
    xiaohou ALL=(root)       NOPASSWD:ALL,!SHUTDOWN
    #sudo的日志记录
    Defaults logfile=/var/log/sudo.log
    Defaults !syslog
    

    9. SSH设置

    cat >> /etc/ssh/sshd_config <<EOF
    #监听的IP和端口
    Port 10022
    ListenAddress 0.0.0.0
    #禁止root远程登陆
    PermitRootLogin no
    #重试次数
    MaxAuthTries 3
    #SSH的最大连接数
    MaxSessions 10
    #禁止空密码用户登陆
    PermitEmptyPasswords no
    #禁止DNS和GSSAPI认证,加速响应
    UseDNS no
    GSSAPIAuthentication no
    EOF
    

    10. 命令历史记录和超时环境变量设置

    cat >> ~/.bashrc << EOF
    # ~/.bash_history的文件大小
    export HISTFILESIZE=5000000
    # 滚动保存的历史命令条目数
    export HISTSIZE=10000
    # 实时记录历史命令,默认只有在用户退出之后才会统一记录,容易造成多个用户间的相互覆盖。
    export PROMPT_COMMAND="history -a"
    # 记录每条历史命令的执行时间
    export HISTTIMEFORMAT="%F %T $(whoami) "
    EOF
    

    11. ulimit优化

    #打开文件数
    cat >> /etc/security/limits.conf <<EOF
    * soft nofile 100000
    * hard nofile 100000
    *   - nproc  1024000
    EOF
    #打开进程数
    cat >> /etc/security/limits.d/20-nproc.conf  <<EOF
    *          soft    nproc     10000
    root       soft    nproc     unlimited
    EOF
    

    12. 内核参数优化

    cat >> /etc/sysctl.conf <<EOF
    #所有用户打开文件描述符的总和
    fs.file-max = 1000000
    #修改防火墙连接数
    net.netfilter.nf_conntrack_max=655360
    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
    #关闭ipv6
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    #关闭路由转发
    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    #关闭组合键功能
    kernel.sysrq = 0
    #使用swap的概率
    vm.swappiness = 10
    #开启TCP连接中time_wait sockets的快速回收
    net.ipv4.tcp_tw_recycle = 1
    #timewait的数量,默认是180000
    net.ipv4.tcp_max_tw_buckets = 6000
    #开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
    net.ipv4.tcp_tw_reuse = 1
    #1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
    net.ipv4.tcp_mem = 94500000 915000000 927000000
    #保持在FIN-WAIT-2状态的时间。
    net.ipv4.tcp_fin_timeout = 15
    #普通用户可使用的端口范围
    net.ipv4.ip_local_port_range = 2048 65000
    #arp抑制,lvs时用到
    #net.ipv4.conf.lo.arp_ignore = 1
    #net.ipv4.conf.lo.arp_announce = 2
    #net.ipv4.conf.all.arp_ignore = 1
    #net.ipv4.conf.all.arp_announce = 2
    #当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2小时
    net.ipv4.tcp_keepalive_time = 60
    net.ipv4.tcp_keepalive_intvl = 15
    net.ipv4.tcp_keepalive_probes = 5
    #开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
    net.ipv4.tcp_syncookies = 1
    #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
    net.core.netdev_max_backlog = 32768
    #记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
    net.ipv4.tcp_max_syn_backlog = 20000
    #web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
    net.core.somaxconn = 32768
    #为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
    net.core.wmem_default = 8388608
    #为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
    net.core.wmem_max = 16777216
    #为TCP socket预留用于接收缓冲的内存默认值(单位:字节)
    net.core.rmem_default = 8388608
    #为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
    net.core.rmem_max = 16777216
    #时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
    net.ipv4.tcp_timestamps = 0
    #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
    net.ipv4.tcp_max_orphans = 3276800
    #为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
    net.ipv4.tcp_synack_retries = 1
    #在内核放弃建立连接之前发送SYN包的数量
    net.ipv4.tcp_syn_retries = 1
    EOF
    

    13. VIM创建文件自动添加注释信息

    添加至~/.vimrc中

    autocmd BufNewFile *.py,*.sh exec ":call SetTitle()"                                                                                                
    function! SetTitle()  
            if &filetype == 'sh'  
                   call setline(1, "#!/bin/bash")  
                   call setline(2, "# ******************************************************")
                   call setline(3, "# Author: xiaohou")  
                   call setline(4, "# Email: xx@xx.com")  
                   call setline(5, "# Created Time : ".strftime("%c"))  
                   call setline(6, "# Last Modified:   ")
                   call setline(7, "# File Name: ".expand("%"))  
                   call setline(8, "# Description:   ")  
                   call setline(9, "# ******************************************************")
                   normal G
           endif  
           if &filetype == 'python'  
                   call setline(1, "#!/usr/bin/env python")  
                   call setline(2, "# ******************************************************")
                   call setline(3, "# coding=utf8")  
                   call setline(4, "# Author: xiaohou")  
                   call setline(5, "# Email: xx@xx.com")  
                   call setline(6, "# Created Time : ".strftime("%c"))  
                   call setline(7, "# Last Modified: ")
                   call setline(8, "# File Name: ".expand("%"))  
                   call setline(9, "# Version:   ")  
                   call setline(10,"# Description:   ")  
                   call setline(11,"# ******************************************************")
                   normal G
           endif  
    endfunction
    function! SetLastModifiedTime(lineno)  
           let modif_time = strftime("%c")  
           if a:lineno == "-1"  
                   let line = getline(6)  
           else  
                   let line = getline(a:lineno)  
           endif      
           if line =~ '^////sLast Modified'  
                   let line = substitute( line,':s+.*d{4}', ':'.modif_time, "" )  
           else  
                   let line = '# Last Modified: '.modif_time  
           endif  
           if a:lineno == "-1"  
                   call setline(5, line)  
           else  
                   call append(a:lineno, line)  
           endif  
    endfunction  
    au BufWrite *.py,*.sh call SetLastModifiedTime(-1)  
    

    唔,貌似不错,重启系统吧,reboot

    其他可选配置

    1. 精简开机启动服务,建议开启的服务crond,network,syslog,sshd、iptables、udev-post、sysstat
    systemctl list-unit-files --type=service|grep enabled
    
    1. 修改语言环境
    vim /etc/locale.conf
    LANG="en_US.UTF-8"
    
    1. 更新软件包
    yum update -y
    
    1. 禁止Linux系统被ping
    echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf
    sysctl -p
    
    1. 定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满
    find /var/spool/postfix/maildrop/ -type f |xargs rm -rf
    
    1. 锁定一些关键文件,放置被删除
    chattr +i file
    
    1. 对于一些分区,可以在挂载时选择noexec,nosuid选项
    /dev/sda1 /tmp xfs default,noexec,nosuid 0 0
    
    1. 设置eth0网卡
    sed -ri 's@(GRUB_CMDLINE_LINUX=.*)"@1 net.ifnames=0"@g' /etc/default/grub
    grub2-mkconfig -o /boot/grub2/grub.cfg
    mv /etc/sysconfig/network-scripts/ifcfg-{ens32,eth0}
    sed  -i 's@ens32@eth0@g' /etc/sysconfig/network-scripts/ifcfg-eth0
    rm /etc/udev/rules.d/70-persistent-ipoib.rules -f
    
  • 相关阅读:
    java加密解密用法
    进程和线程
    office使用技巧
    apktool+dex2jar+jd_gui
    shell编程学习
    编程常犯的错误
    编程语言学习清单
    使用github托管自己的项目
    c# 异常 的 异想
    DNLA自学(一) UPnP设备发现
  • 原文地址:https://www.cnblogs.com/linuxops/p/6577459.html
Copyright © 2011-2022 走看看