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
原文地址:https://www.cnblogs.com/zh-dream/p/12629825.html