zoukankan      html  css  js  c++  java
  • Centos 04 基础系统优化命令

    在Linux这个系统当中,几乎所有的硬件设备文件都在/dev这个目录内。举例来说,IDE介面的硬盘的文件名称即为/dev/hd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/hda,/dev/hdb, /dev/hdc, 及 /dev/hdd这四个文件的意思。Linux通过设备名访问设备,设备存放在/dev目录下。

    [root@centos7 ~]# ll /dev/sd*
    brw-rw---- 1 root disk 8, 0 8月  28 23:40 /dev/sda  # 第一块磁盘sda,第二块磁盘sdb,a、b区分主磁盘
    brw-rw---- 1 root disk 8, 1 8月  28 23:40 /dev/sda1  # 第一块磁盘下面的分区1,SCSI接口硬盘
    brw-rw---- 1 root disk 8, 2 8月  28 23:40 /dev/sda2  # 第一块磁盘下的分区2

    分区数字编号1~4只能里给主分区或扩展分区使用,逻辑分区是在扩展分区基础上,所以编号只能从5开始。

    linux环境下没有盘符的概念,要对磁盘设备进行操作,需要使用磁盘设备名;要操作文件则需挂装创建在分区或逻辑卷上的文件系统

    Linux系统对分区的要求

    linux系统至少要有/分区
    swap(交换分区)的作用:虚拟内存,swap分区的大小=1.5*物理内存的容量,内存大于16G时,虚拟内存给8~16就行了。
    建议建立对立的boot分区
    数据库服务器正常不需要swap分区,因为虚拟的内存的速率跟不上。

    常规分区方案

    /             剩余硬盘大小
    swap          1.5倍
    /boot         100M

    DB及存储的分区方案

    /data/        剩余磁盘大小
    /             50~200G
    swap          1.5倍
    /boot         100M
    相当于windows不能只分c盘,还需要D E,重装系统数据可能会丢。

    门户网站案例

    /             50~200G
    swap          1.5倍
    /boot         100M
    不再进行分区,保留,将来哪个需要用,再根据需求再分

    以下分区几乎没有必要:

    /usr
    /home
    /var
    
    LVM,目录满了就在线调整分区大小,LVM性能差
    生产场景 硬件RAID(DELL),组合多块磁盘,而不是LVM或者软RAID 

    用户相关的命令

    查看当前用户                 whoami
    添加用户                    useradd/adduser dandy1;        
    修改密码                    passwd dandy + 密码            
                               不指定则修改当前用户密码;普通用户不能修改其他人的密码
    切换用户                    su - oldboy     把参数全部切换成oldboy的
    不交互改密码                 echo 123456|passwd --stdin dandy  
    但是查看history的时候可以看到明文密码
                               history -d 111    干掉固定行号
                               history -c         全部干掉 

    centos安装软件包管理工具

    yum是centos软件包管理工具,二进制软件包一般是rpm包。由于centos的内置默认软件源是指向国外的,一般情况下下载更新软件包都会很慢,很浪费时间,所以需要将其修改为国内的软件镜像源。

    查看软件镜像源文件

    cat /etc/yum.repos.d/CentOS-Base.repo

    一切修改的最基本条件是留一份原文件存档

    cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    这里我们使用如下的地址

    http://mirrors.163.com/.help/centos.html

    选择你对应的centos版本,右键复制链接地址

    进入到软件镜像源目录:

    wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

    wget后面的是自己右键复制的地址,粘贴上去就好了。

    cp CentOS7-Base-163.repo  CentOS-Base.repo

    也可以用mv命令。。此时就替换好了。

    正常的教程到这里会让你更新一下软件包,但是这里,我们选择不更新,更新的越多,下载的软件包越多,系统越重,并且漏洞发生的几率或更高、安全性降低。

    安装基础软件包

    yum install tree telnet dos2unix sysstat lrzsz -y 默认不提示

    -y代表手动命令安装软件的所有提示确认的命令都不需要确认了,不再提示确认内容。

    关闭selinux 

    cat /etc/selinux/config 

    三种状态:

    enforcing       激活状态
    permissive      不激活,但是打印警告
    disabled       不加载

    可以直接vim  修改状态

    sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config

    再查看一下修改

    [root@centos7 yum.repos.d]# grep "disabled" /etc/selinux/config
    #     disabled - No SELinux policy is loaded.
    SELINUX=disabled
    [root@centos7 yum.repos.d]# 

    通过命令查看系统状态

    getenforce        #  查看状态,显示还是Permissive

    查询系统状态的时候,你会发现还是显示Permissive,因为系统只有重启过才能更改过来。

    setenforce 0                    # 临时将状态改成Permissive

    此时系统的状态已经更改过来,而当系统重启后,虽然会消失,但是系统配置中已经更改成disabled,所以也就都ok了

    修改linux机器运行模式

    模式简介

    0    关机模式
    1    单用户模式,一般用来改密码
    2    多用户模式
    3    命令行模式
    4    没有使用
    5    X11桌面模式,图形化界面
    6    重启模式

    模式的切换

    centos6.5    cat /etc/inittab 直接修改runlevel
                 runlevel查看当前模式
                 vi /etc.inittab    ==>    id:3:initdefault:修改成5
    
                 init + 数字 
    
    CentOS7    systemctl set-default graphical.target
            systemctl set-default multi-user.target

    优化开机启动项

    一般基础启动项

    crond        (定时任务) 
    network    (网络服务)
    rsyslog     (系统日志功能) 
    sshd         (远程链接服务)

    Centos6优化方式

    1、ntsysv
    2、setup-system service
    3、脚本一键完成处理

    查看所有命令行模式的启动

    chkconfig --list|grep "3:on"    查看所有模式3下开机启动项
    chkconfig udev-post off/on         默认关闭23456运行模式里面的开机自启动/关闭
    chkconfig --list udev-post     列出某一条所有模式下的启动模式

    如何关闭呢?

    思路一(先全部关闭,在打开需要开启的服务)

    for dandy in `chkconfig --list|grep "3:on"|awk '{print $1}'`;do chkconfig $dandy off;done
    
    for dandy in crond network sshd rsyslog;do chkconfig $dandy on;done

    $dandy是变量,对for循环的变量操作。

    思路二(只关闭不需要的服务)

    for dandy in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|sshd|rsyslog"`;do chkconfig $dandy off;done
    grep -i 不区分大小写的过滤    grep -Ei "a|b" dandy.txt
    grep -E = egrep  # 并列条件,同时过滤多个字符串

    -v取消原输出,反转查找

    Centos7优化

    CentOS 7由于使用systemd而不是init,所以不能通过修改inittab文件来修改开机启动模式。

    systemctl get-default                # 获取默认的系统
    systemctl set-default multi-user.target      # 设置默认模式
    systemctl set-default graphical.target 
    
    systemctl list-unit-files | grep enabled     # 查看当前模式的开机启动项,enabled是开机启动,disabeld是不启动
    
    systemctl disable firewalld.service        # 开机不启动某个服务
    systemctl stop firewalld.service          # 暂停服务
    systemctl enable apache.service          # 开机启动
    systemctl status mysqld                # 查询某个服务状态
    
    systemctl start docker.service           # 开启某个服务

    最小化原则

    1)安装系统最小化
        安装的软件包越少,磁盘空间越小,软件漏洞相对越少
    2)开启程序服务最小化
    3)操作最小化原则
    4)登陆最小化原则。    
        平时没有需求,不要用root登陆
    5)权限最小化原则
    6)配置参数合理,不要最大化

    远程登陆

    windows远程登陆及管理员账户

    administrator    3389

    linux远程登陆及管理员账户

    root            22

    这种常用设置,大家都知道,可能不安全,需要修改端口或用户名,增加迷惑性,安全性。

    修改ssh端口

    1、先备份!先备份!!!cp /a /a.backup
    2、vim /etc/ssh/sshd_config
            取消port注释、修改port端口比如改到52113
        PermitRootLogin:no        # 禁止root远程登陆
        UseDNS:no                 # 禁止使用DNS
        PermitEmptyPasswords:no
        GSSAPIAuthentication:no
            输入行号 + gg、定位到具体行
    3、/etc/init.d/sshd reload     # 重新加载
       /etc/init.d/sshd restart    # 重启服务

    关闭防火墙

    /etc/init.d/iptables stop     关闭防火墙

    查看网络状态

    查看网络状态lntup或者an 可以通过man netstat查看

    netstat -an|grep ip(服务器ip)查看网络状态
    netstat [address_family_options] [--tcp|-t]  [--udp|-u]  [--udplite|-U]
           [--sctp|-S]   [--raw|-w]   [--listening|-l]  [--all|-a]  [--numeric|-n]
           [--numeric-hosts] [--numeric-ports]  [--numeric-users]  [--symbolic|-N]
           [--extend|-e[--extend|-e]]  [--timers|-o] [--program|-p] [--verbose|-v]
           [--continuous|-c] [--wide|-W] [delay]
    
           netstat              {--route|-r}              [address_family_options]
           [--extend|-e[--extend|-e]]         [--verbose|-v]        [--numeric|-n]
           [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
           [delay]
    .....

    查看端口状态

    netstat -lntup|grep 22
    # 或者
    lsof -i :22

    修改sudo的配置文件

    使用visudo来编辑sudo的配置文件,相当于直接编辑'vim /etc/sudoers',建议不要手动去改,visudo有语法检查。

    :set nu            显示行号
    98gg              光标定位到98行
    yy                 复制当前行
    p                  粘贴
    91 ## Allow root to run any commands anywhere
    92 root    ALL=(ALL)       ALL
    93 dandy   ALL=(ALL)       ALL
    可以将用户dandy最后的ALL改成/usr/sbin/useradd(多条的话使用逗号把命令连起来就可以),这样dandy变只拥有执行useradd的权限了,需要使用sudo useradd + 用户名才能使用
    [dandy@centos7 ~]$ sudo useradd test_user
    [sudo] password for dandy: 
    [dandy@centos7 ~]$ tail -1 /etc/passwd
    test_user:x:1001:1001::/home/test_user:/bin/bash

    修改dandy最后的ALLNOPASSWD:ALL(表示不需要密码)

    user             MACHINE=                 COMMANDS
    root             ALL=(ALL)                ALL
    oldboy           ALL=(ALL)                /usr/sbin/useradd
    用户             机器=(授权哪个角色的权利)    /usr/sbin/useradd
    %用户组           机器=(授权哪个角色的权利)    /usr/sbin/useradd

    查看当前用户有那些权限:

    [root@centos7 ~]# sudo -l
    匹配 %2$s 上 %1$s 的默认条目:
        !visiblepw, always_set_home, match_group_by_gid, env_reset,
        env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
        env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
        secure_path=/sbin:/bin:/usr/sbin:/usr/bin
    
    用户 root 可以在 centos7 上运行以下命令:
        (ALL) ALL
    [dandy@centos7 ~]$ sudo -l
    Matching Defaults entries for dandy on centos7:
        !visiblepw, always_set_home, match_group_by_gid, env_reset,
        env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
        env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
        secure_path=/sbin:/bin:/usr/sbin:/usr/bin
    
    User dandy may run the following commands on centos7:
        (ALL) NOPASSWD: ALL

    linux系统环境变量

    控制linux命令所在的路径,相当于window环境变量PATH,查看系统环境变量

    [dandy@centos7 ~]$ echo $PATH
    /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dandy/.local/bin:/home/dandy/bin

    可以发现系统环境变量通过: 进行分割,同样的可以按照windows的思路,添加一个系统环境变量

    1mkdir /dandy                      创建目录
    2vi /dandy/dandy                    添加内容echo 'hello dandy'
    3chmod +x /dandy/dandy                 增加权限

    执行上述文件命令

    1、根据绝对路径直接执行

    [dandy@centos7 /]$ /dandy/dandy
    hello dandy

    2、添加路径到系统环境变量,再执行

    PATH=$PATH:/dandy             但是这个是临时有效
    dandy                         hello dandy

    永久有效的添加环境变量

    echo 'PATH=/dandy/:$PATH' >> /etc/profile        
    source /etc/profile            让文件生效
    使用单引号添加,会把这句话添加进去,双引号会将变量转化成结果添加到文件内,不合适
    [dandy@centos7 /]$ tail -5 /etc/profile
    done
    
    unset i
    unset -f pathmunge
    PATH=/dandy/:$PATH

    测试

    [dandy@centos7 /]$ dandy
    hello dandy
    [dandy@centos7 /]$ which dandy
    /dandy/dandy

    并且在/etc下面加的命令是对全局都生效的,所有用户都可以使用。如果是在普通文件下加的话,可以在.bash_profile里面添加,可以使用cat .bash_profile来查看下

    修改中文字符显示(建议不做

    字符集是一套文字符号及其编码,查看当前字符集编码 

    [dandy@centos7 /]$ echo $LANG
    en_US.UTF-8

    默认字符集路径及修改

    centos6
        cat /etc/sysconfig/i18n
    CentOS7
        cat /etc/locale.conf              LANG="en_US.UTF-8"调整为LANG="zh_CN.GB18030"
    最后 source + 路径让它生效

    Linux时间同步服务

    安装

    yum install ntp

    获取网上最新时间

    centos7                ntpdate -d ntp.sjtu.edu.cn
    centos6                /usr/sbin/ntpdate time.nist.gov

    创建更新的定时任务

    echo '#time sync by dandy at 2018-08' >> /vae/spool/cron/root   # 追加到定时任务的配置文件
    echo '*/5 * * * * ntpdate -d ntp.sjtu.edu.cn >/dev/null 2>&1' >>/var/spool/cron/root

    >/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞” ,然后再追加到cron的root文件内

    检查是否再cron内存在

    crontab -l 检查是否存在

    这边可以去百度一下如何配置ntp server,网上的内容很多,楼主觉得没必要学再记录,仁者见仁,智者见智。

    修改文件描述符

    查看当前文件描述符大小

    [root@centos7 ~]# ulimit -n 
    1024

    加大文件描述符(临时),重启后消失

    [root@centos7 ~]# ulimit -HSn 65535
    [root@centos7 ~]# ulimit -n 
    65535

    写入配置文件,永久生效

    echo '*               -    nofile            65535' >>/etc/security/limits.conf 

    文件描述符太小,不够用,进程会起不来,当然文件描述符也不是越大越好。

    调整内核参数

    内核参数文件

    /etc/sysctl.cnf

    修改文件,将下面的内容插入

    #关闭ipv6
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    # 避免放大攻击
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    # 开启恶意icmp错误消息保护
    net.ipv4.icmp_ignore_bogus_error_responses = 1
    #关闭路由转发
    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    #开启反向路径过滤
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.rp_filter = 1
    #处理无源路由的包
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.accept_source_route = 0
    #关闭sysrq功能
    kernel.sysrq = 0
    #core文件名中添加pid作为扩展名
    kernel.core_uses_pid = 1
    # 开启SYN洪水攻击保护
    net.ipv4.tcp_syncookies = 1
    #修改消息队列长度
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    #设置最大内存共享段大小bytes
    kernel.shmmax = 68719476736
    kernel.shmall = 4294967296
    #timewait的数量,默认180000
    net.ipv4.tcp_max_tw_buckets = 6000
    net.ipv4.tcp_sack = 1
    net.ipv4.tcp_window_scaling = 1
    net.ipv4.tcp_rmem = 4096        87380   4194304
    net.ipv4.tcp_wmem = 4096        16384   4194304
    net.core.wmem_default = 8388608
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
    net.core.netdev_max_backlog = 262144
    #限制仅仅是为了防止简单的DoS 攻击
    net.ipv4.tcp_max_orphans = 3276800
    #未收到客户端确认信息的连接请求的最大值
    net.ipv4.tcp_max_syn_backlog = 262144
    net.ipv4.tcp_timestamps = 0
    #内核放弃建立连接之前发送SYNACK 包的数量
    net.ipv4.tcp_synack_retries = 1
    #内核放弃建立连接之前发送SYN 包的数量
    net.ipv4.tcp_syn_retries = 1
    #启用timewait 快速回收
    net.ipv4.tcp_tw_recycle = 1
    #开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_mem = 94500000 915000000 927000000
    net.ipv4.tcp_fin_timeout = 1
    #当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
    net.ipv4.tcp_keepalive_time = 30
    #允许系统打开的端口范围
    net.ipv4.ip_local_port_range = 1024    65000
    #修改防火墙表大小,默认65536
    #net.netfilter.nf_conntrack_max=655350
    #net.netfilter.nf_conntrack_tcp_timeout_established=1200
    # 确保无人能修改路由表
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.all.secure_redirects = 0
    net.ipv4.conf.default.secure_redirects = 0

    通过命令生效

    sysctl -p 生效

    隐藏版本号和内核号

    cat /cat/issue
    >/etc/issue                     重定向清空
    cat /dev/null >/etc/issue        清空,把issue变成空

    锁定关键文件

    chattr +i     /etc/passwd /etc/shadow                    
    /etc/passwd                       用户文件
    /etc/shadow                        用户密码文件
    /etc/group                         用户组文件
    /etc/gshadow                       组的密码文件
    /etc/inittab                       开机启动文件

    锁定之后root都不能操作,用chattr -i 解锁

    which chattr
    /usr/bin/chattr
    mv /usr/bin/chattr /usr/bin/dandy         修改命令,隐藏掉命令
    这样就算黑客厉害到能拿到root账户,也不知道解锁的命令是哪一个

    查看内容是不是加锁了    有一个i

    lsattr /etc/passwd
    ----i----------- /etc/passwd

    优化总结

    1、不用root、添加普通用户,通过sudo授权管理
    2、更改默认的远程连接ssh服务端口及禁止root用户远程连接
    3、定时自动更新服务器时间
    4、配置yum更新源,从国内更新源下载rpm包
    5、关闭selinux及iptables(iptables工作场景如果有wan ip一般要打开,高并发除外)
    6、调整文件描述符大小
    7、定时自动清理/var/pool/clientqueue目录的垃圾文件,防止inodes节点被占满(6.4已经就没有了,可以不配)
    8、精简开机自启动服务
    9、linux内核参数优化
    10、更改字符集,支持中文,建议还是英文字符集,防止乱码
    11、锁定关键系统文件 
    12、清空/etc/issue,去除内核跟系统版本的屏幕显示
  • 相关阅读:
    文件输出debug
    sweetalert
    js认清this的第一步
    Creating default object from empty value in PHP?
    matplotlib画图
    python解析库
    zabbix监控ssl证书过期时间
    aws 预留实例到期监控
    aws ec2挂载 s3
    aliyun挂载oss
  • 原文地址:https://www.cnblogs.com/wuzdandz/p/9570923.html
Copyright © 2011-2022 走看看