• Linux 系统基础优化


    1、删除特殊用户和用户组

    Linux系统安装以后,会安装很多不必要的用户和用户组,这些用户或用户组会成为黑客入侵的入口,应该禁用。

    注意:操作前备份,且不要删除用户,直接注释即可,以后要用到的时候再解开

    [root@master ~]# cp /etc/passwd{,.bak}
    [root@master ~]# vim /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    #adm:x:3:4:adm:/var/adm:/sbin/nologin
    #lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    #sync:x:5:0:sync:/sbin:/bin/sync
    #shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    #halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    #operator:x:11:0:operator:/root:/sbin/nologin
    #games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    named:x:25:25:Named:/var/named:/sbin/nologin

    编辑用户组

    [root@master ~]# vim /etc/group
    #adm:x:4:
    #games:x:20:
    #lp:x:7:
    #uucp:x:14:uucp
    #dip:x:40:

    验证

    [root@master ~]# id games
    id: games: no such user

    实际生产中根据服务器用途进行选择

    2、关闭不需要的服务

    查看服务器开启的服务

    [root@master ~]# systemctl list-unit-files 
    # 左侧为服务名,右侧为服务状态
    UNIT FILE                                     STATE   
    proc-sys-fs-binfmt_misc.automount             static  
    dev-hugepages.mount                           static  
    dev-mqueue.mount                              static  
    proc-sys-fs-binfmt_misc.mount                 static  
    sys-fs-fuse-connections.mount                 static  
    sys-kernel-config.mount                       static  
    sys-kernel-debug.mount                        static  
    tmp.mount                                     disabled
    brandbot.path                                 disabled
    systemd-ask-password-console.path             static  
    systemd-ask-password-plymouth.path            static  
    systemd-ask-password-wall.path                static  
    session-1.scope                               static  
    session-4.scope                               static  
    arp-ethers.service                            disabled
    auditd.service                                enabled 
    autovt@.service                               enabled 
    blk-availability.service                      disabled

    过滤出开启的服务

    [root@master ~]# systemctl list-unit-files |grep enable
    auditd.service                                enabled                 ## 审计功能,相关命令 auditctl控制、aureport 查看审计报告、ausearch查看审计日志
    autovt@.service                               enabled                 ##  登录相关
    chronyd.service                               enabled                 ## 时间服务
    crond.service                                 enabled                 ## 定时任务
    dbus-org.freedesktop.NetworkManager.service   enabled                 ## 桌面网卡管理,关闭
    dbus-org.freedesktop.nm-dispatcher.service    enabled                 
    docker.service                                enabled 
    getty@.service                                enabled                 ## tty控制台
    irqbalance.service                            enabled                 ## 优化系统中断分配
    kdump.service                                 enabled                 ## 内核崩溃信息捕获
    lvm2-monitor.service                          enabled                 ## 逻辑卷相关
    microcode.service                             enabled                 ## 处理器稳定性增强
    NetworkManager-dispatcher.service             enabled                 ## 网卡守护进程 ,关闭
    NetworkManager-wait-online.service            enabled 
    NetworkManager.service                        enabled 
    postfix.service                               enabled                 ## 邮件服务,关闭
    rhel-autorelabel.service                      enabled 
    rhel-configure.service                        enabled 
    rhel-dmesg.service                            enabled 
    rhel-domainname.service                       enabled 
    rhel-import-state.service                     enabled 
    rhel-loadmodules.service                      enabled 
    rhel-readonly.service                         enabled 
    rsyslog.service                               enabled                 ## 日志服务
    sshd.service                                  enabled                 ## 远程登录   
    systemd-readahead-collect.service             enabled 
    systemd-readahead-drop.service                enabled 
    systemd-readahead-replay.service              enabled 
    tuned.service                                 enabled 
    dm-event.socket                               enabled 
    lvm2-lvmetad.socket                           enabled 
    lvm2-lvmpolld.socket                          enabled 
    default.target                                enabled                 ## 默认启动项 muti-user.target的软连接
    multi-user.target                             enabled                 ## 用户命令环境
    remote-fs.target                              enabled                 ## 远程文件挂载点
    runlevel2.target                              enabled                 ## 运行级别
    runlevel3.target                              enabled 
    runlevel4.target                              enabled 

    关闭服务

    [root@master ~]# systemctl list-unit-files |egrep "postfix|NetworkManager-dispatcher|p.NetworkManager"|awk '{print "systemctl disable ",$1}'|bash
    Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service.
    Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service.
    Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.
    Removed symlink /etc/systemd/system/multi-user.target.wants/postfix.service.

    3、所有用户使用复杂密码

    [root@master ~]# echo `tr -dc _A-Z-a-z#%%^*-0-9 </dev/urandom |head -c 12`
    %^X9NjhqPj^%

    4、优化su、sudo

    一般生成中,为保证服务器安全,禁止了root用户直接登录系统,而是通过普通用户登录,然后在su到超级用户。但是普通用户的权限很大,也会对系统安全造成威胁,这时就需要sudo(授权认证的su)对用户的权限做限制。

    sudo的执行流程:将当前用户切换到指定用户下,然后以指定用户的身份执行命令,执行完成后,退回到当前用户。

    sudo文件格式  

    ##      user    MACHINE=COMMANDS     #用户 在哪些服务器上以什么用户的身份,可以执行哪些命令
    ##
    ## The COMMANDS section may have other options added to it.
    ##
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL

    举例

    [root@master ~]# visudo 
    deployer        ALL=(ALL)       ALL,!/bin/su      # deployer用户 可以在任意路径下执行除su命令之外的所有命令
    monitor         ALL=(ALL)       ALL,!/bin/su,!/bin/bash
    app             ALL=(root)      NOPASSWD: ALL     # app用户可以以root的身份执行所有命令,且不需要输入root的登录密码

    5、删除系统登录欢迎信息

    系统的版本信息和欢迎信息可能被攻击者利用,为了保证系统安全,可以修改或删除这些文件,分别是/etc/issue.net、/etc/issue、/etc/motd、/etc/redhat-release 

    其中前两个文件记录着操作系统的名称和版本号。用户远程登录系统时,显示的是/etc/issue.net的文件内容。用户本地登录的时候,显示的是/etc/issue文件内容

    6、禁止使用Ctrl+Alt+Del快捷键重启服务器

    Linux系统默认设置,同时按下,系统会自动重启,要禁用此设置需要删除/usr/lib/systemd/system/ctrl-alt-del.target,因为这个文件是个软链接文件,全部注释的话,reboot命令无法使用

    7、yum update更新系统时不升级内核,只更新软件包

    1)/etc/yum.conf 在[main]的最后添加
    exclude=kernel*
    exclude=centos-release*2)在使用yum update的时候增加参数
    yum --exclude=kernel* update

    8、重要文件控制

    chattr +a .bash_history          # 避免删除.bash_history或者重定向到/dev/null
    chattr +i .bash_history
    
    防止非授权用户获得权限
    chattr +i /etc/passwd
    chattr +i /etc/shadow
    chattr +i /etc/group
    chattr +i /etc/gshadow
    chattr +i /etc/services 
    chattr +i /etc/resolv.conf
    chattr +i /etc/fstab
    
    #重要日志文件加a属性
    chattr +a /var/log/messages

    9、shell命令历史优化

    在运维工作中进行系统审计和排查问题时,会用到history命令。同时,为避免攻击者删除命令历史文件,需要加锁。上面已经提到。

    编辑 /etc/bashrc
    HISTFILESIZE
    =3000          ## 设置.bash_history文件中保存命令的记录数,默认1000 HISTSIZE=3000             ## 设置history命令输出的记录数 HISTTIMEFORMAT='%F %T'       ## 设置显示的时间格式 export HISTTIMEFORMAT

    也可以将下面内容添加到/etc/profile文件中,实现上面的效果

    REMOTE_IP=`who -u am i 2>/dev/null|awk '{print $NF}'|sed 's/[( )]//g'`
    HISTDIR=/usr/share/.history
    
    if [ -z $REMOTE_IP ]
      then
       REMOTE_IP=`hostname` 
    fi
    
    if [ ! -d $HISTDIR ]
      then
       mkdir -p $HISTDIR
       chmod 777 $HISTDIR
    fi
    
    if [ ! -d $HISTDIR/${LOGNAME} ]
      then
       mkdir -p $HISTDIR/${LOGNAME}
       chmod 300 $HISTDIR/${LOGNAME}
    fi
    
    export HISTSIZE=4000
      
    DateTime=`date +%Y%m%d_%H%M%S`
    export HISTFILE="$HISTDIR/${LOGNAME}/${REMOTE_IP}.history.${DateTime}"
    export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S]"
    chmod 600 $HISTDIR/${LOGNAME}/*.history* 2>/dev/null

    10、文件权限检查

    不正确的权限设置严重威胁系统安全。应该及时发现这些文件并修改。

    (1)查看文件系统中包含s位的文件

    [root@master ~]# find / -perm -2000 -o -perm -4000 -print|xargs ls -al

    (2)查找文件系统中的孤儿文件

    [root@master ~]# find / -nouser -o -nogroup

    11、对临时文件的安全设置

    主要有两个:/tmp 和/var/tmp

    对于/tmp,需要区分其是独立磁盘分区,还是根分区下的目录

    (1) 独立磁盘分区

    只需要修改/etc/fstab文件即可,添加nosuid 、noexec、 nodev三个选项:
    
    LABEL=/tmp       /tmp    ext4     rw,nosuid,noexec,nodev    0     0                    # 表示:/tmp文件不能使用suid,任何文件都不可执行,不存在设备文件
    
    挂载属性修改好后,重新挂载 /tmp

    (2) /tmp是根分区下的目录

    [root@master ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        901M     0  901M   0% /dev
    tmpfs           911M     0  911M   0% /dev/shm
    tmpfs           911M  9.6M  902M   2% /run
    tmpfs           911M     0  911M   0% /sys/fs/cgroup
    /dev/sda3        98G  2.0G   96G   2% /
    /dev/sda1      1014M  135M  880M  14% /boot
    tmpfs           183M     0  183M   0% /run/user/0
    
    [root@master ~]# dd if=/dev/zero of=/dev/tmpfs bs=1M count=10000
    dd: error writing ‘/dev/tmpfs’: No space left on device
    901+0 records in
    900+0 records out
    943955968 bytes (944 MB) copied, 15.5633 s, 60.7 MB/s
    
    
    [root@master ~]# mkfs.xfs /dev/tmpfs 
    meta-data=/dev/tmpfs             isize=512    agcount=4, agsize=57615 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=230458, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=855, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
    [root@master ~]# cp -av /tmp /tmp.bak
    ‘/tmp’ -> ‘/tmp.bak’
    ‘/tmp/.X11-unix’ -> ‘/tmp.bak/.X11-unix’
    ‘/tmp/.ICE-unix’ -> ‘/tmp.bak/.ICE-unix’
    ‘/tmp/.font-unix’ -> ‘/tmp.bak/.font-unix’
    ‘/tmp/.XIM-unix’ -> ‘/tmp.bak/.XIM-unix’
    ‘/tmp/.Test-unix’ -> ‘/tmp.bak/.Test-unix’
    ‘/tmp/systemd-private-83586deb63414d92979e7492972437a7-chronyd.service-PgzJDa’ -> ‘/tmp.bak/systemd-private-83586deb63414d92979e7492972437a7-chronyd.service-PgzJDa’
    ‘/tmp/systemd-private-83586deb63414d92979e7492972437a7-chronyd.service-PgzJDa/tmp’ -> ‘/tmp.bak/systemd-private-83586deb63414d92979e7492972437a7-chronyd.service-PgzJDa/tmp’
    
    [root@master ~]# mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp
    [root@master ~]# chmod 1777 /tmp
    [root@master ~]# mv -f /tmp.bak/* /tmp
    [root@master ~]# rm -rf /tmp.bak
    
    需要编辑/etc/fstab,添加一下内容:
    /dev/tmpfs   /tmp   xfs   loop,nosuid,noexec,rw  0   0
    
    [root@master ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        901M  901M     0 100% /dev
    tmpfs           911M     0  911M   0% /dev/shm
    tmpfs           911M  9.6M  902M   2% /run
    tmpfs           911M     0  911M   0% /sys/fs/cgroup
    /dev/sda3        98G  2.0G   96G   2% /
    /dev/sda1      1014M  135M  880M  14% /boot
    tmpfs           183M     0  183M   0% /run/user/0
    /dev/loop0      897M   33M  865M   4% /tmp

    12、禁止ping

    内核参数方面

    临时

    echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

    永久

    修改/ets/sysctl.conf
    
    net.ipv4.icmp_echo_ignore_all=1
    
    然后执行sysctl -p生效

    防火墙方面

    iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
  • 相关阅读:
    阿里云主机centos设置虚拟内存
    MySQL表名不区分大小写的设置方法
    java.security.KeyException
    Java.net.URLConnection和Apache HTTPClient的主要区别对比
    linux常用命令
    minerd
    kill常用
    阿里云centos 6安装Nginx+PHP+MySQL
    打开MySQL数据库远程访问的权限
    centos 安装MySql 5.6
  • 原文地址:https://www.cnblogs.com/zh-dream/p/12629825.html
Copyright © 2020-2023  润新知