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
基础优化暂时只想到这些