高性能linux服务构建 1服务器安全运维
1 安全运维
1.1 账户和登录安全
1.1.1 删除特殊用户和用户组
主要用userdel groupdel删除无用用户和组
一般需了解用户管理相关命令与选项用法,如usermod -s nologin userxxx
一般无用用户 adm,lp,sync,shutdown,halt,news,uucp,operators,games,gopher
一般无用组 adm,lp,news,games,dip,pppusers,popusers,slipusers
1.1.2 删除无用服务
chkconfig --pevel 345 bluetooth off
然后重启服务器
345 3表示支持nfs的多用户,5表示支持xwindows,4预留选项
1.1.3 密钥策略
一般有密码和密钥方式登录服务器,推荐密钥
先在本地生成密钥,然后将公钥追加到服务器用户目录下.ssh/authrized_keys的文件,即可单向登录
1.1.4 sudo使用与配置
给普通用户加提权权限
/etc/sudoers
文件的每行对应一个权限,格式如下
username hosts = cmd vars
四个参数分别为用户名,可访问的主机列表,cmd和cmd参数,例如
usera ALL = /bin/more /etc/shadow
userb ALL = NOPASSWD: /bin/more /etc/shadow
提权后普通用户执行提权命令会提示输入密码,此时密码不是root密码,而是用户的密码
userc ALL = (ALL) NOPASSWD: ALL
表示userc可获得root权限且不需要密码,su root _即可,且不需密码
1.1.5 修改系统登录欢迎信息
本地登录终端,终端提示信息源于/etc/issue
ssh/telnet登录时,终端提示信息源于metc/issue.net
每次登录终端都会有公告信息,公告信息源于文件etc/motd
1.2 远程访问与认证安全
1.2.1 用ssh而不用telnet
telnet问题 1口令数据明文传输 2信息验证方式不安全
解决 ssh替代
优点 1数据加密 2数据压缩
1.2.2 ssh配置
ssh配置文件是/etc/sshd_config
port sshd监听的端口号,默认22,可修改
protocal ssh协议,ssh1有问题,可以选ssh2
listenaddress 监听的ip地址段,0.0.0.0表示监听所有ip
hostkey 服务器密钥路径
keyregenerationinterval 密钥刷新时间,防止密钥被盗用
serverkeybits 密钥长度
1.2.3 合理使用ssh历史记录功能
history保存在用户目录的.bash_history里,黑客可以删除此文件清空历史记录,历史记录格式配置文件在/etc/bashrc
/etc/profile影响所有用户环境变量相关配置,bashrc只影响当前用户,所以也可以在这两个配置文件导入环境变量使历史记录不保存在默认的bash_history
1.2.4 启动tcp_wrapper防火墙
linux有两个防火墙 iptables还有tcp_wrapper,iptable先防,完了是tcpwrapper
功能 tcpwrapper可实现对某些服务的开闭,允许与禁止,配置文件主要有/etc/hosts.allow, /etc/hosys.deny
局限性 不是所有服务都可用tcpwrapper,只有使用了libwrapperd库文件的服务才可使用tcpwrapper
可以使用ldd查看服务程序是否依赖libwrapperd
配置文件格式
service:hosts action,例如
ALL:ALL EXCEPT 192.168.12.123
allow:
sshd:192.168.1.1
deny
sshd:all
1.3 文件系统安全
1.3.1 锁定系统重要文件
锁定 chattr
查看 lsattr
chattr -R -i /bin /etc
日志一般加a chattr -R -a /xxx/xxx.log 注意,appendonly会导致无法log rotate
有的目录不可以修改,否则无法工作
1.3.2 文件权限检查
1 检查所有用户可执行的文件
文件:find / -type f -perm -2 -o -perm -20 |xargs ls -al 或 find / -type f -perm /22|xargs ls -al
目录:find / -type d -perm -2 -o -perm -20 |xargs ls -ld 或 find / -type d -perm /22 |xargs ls ld
2 检查所有含s位的文件
find / -type f -perm -4000 -o -perm -2000 -print|xargs ls -ld(此处不能用-perm /)
注意,print0用来处理文件名包含引号的文件,可与xargs配合使用
3 检查所有包含suid和sgid的文件(注意user得是root)
find / -user root -perm -2000 -print -exec md5sum {} \
find / -user root -perm -4000 -print -exec md5sum {} \
4 检查没有属主的文件
find / -nouser -o -nogroup
1.3.3 临时文件目录处理
/tmp, /var/tmp, /dev/shm
问题:前两个是用户常用临时目录,一般所有用户可读取,如果有黑客做信息收集或恶意程序则有危险;/dev/shm是共享内存设备,使用tmpfs,如果操作/dev/shm就可直接操作内存,比较危险
若/tmp为独立挂载的磁盘分区,可在/etc/fstab中设置挂载权限:
LABEL=/tmp /tmp ext3 rx,noexec,nosuid,nodev 00
表示不允许存在任何可执行文件、suid文件,不允许任何设备存在。设置完后,重新挂载盘使生效
如果/var/tmp是独立磁盘分区,仿照/tmp设置挂载属性,如果不是独立磁盘分区,可将文件全移动到/tmp下,然后创个软链接
如果是/tmp下一个目录,可创一个loopback文件系统,利用linux内核的loopback特性将文件系统挂到/tmp
/dev/shm也可通过挂载属性添加noexec,nosuid,defaults实现安全管理
1.4 系统软件安全管理
1.4.1 yum
全称 yellow dog updater modified。需要有互联网,会自动通过互联网获取相互依赖的rpm包
1.4.2 安装与配置
安装 rpm -ivh yum-*.noarch.rpm
配置:
主配置文件是/etc/yum.conf, /etc/yum.repos.d
1.4.3 特点和使用方法
yum会自动下载所有需升级资源包并放在/var/cache/yum下,第一次使用yum升级,时间可能较长
基本使用用法
安装卸载 yum install dhcp/yum remove dhcp
检查可更新的包 yum check-update
更新所有rpm包 yum update
更新指定包 yum update dhcp kernel
大规模升级(旧包也会升级) yum upgrade
列出资源库可安装或可更新的rpm包信息 yum info
列出资源库特定包更新信息 yum info dhcp
列出资源库所有可更新包信息yum info updates
列出所有已安装包信息 yum info installed
列出已安装但不在yum中包信息 yum info extras
列出所有已安装和可更新包 yum list # == yum info
列出特定可安装或可更新的包 yum list dhcp*
找包 yum search wget*
搜索包含指定文件名的包 yum provides filename
清理yum缓存 yum clean packages
清理缓存的rpm头文件 yum clean headers
清理旧rpm头文件 yum clean old-headers
清理旧header和包缓存 yum clean
1.5 linux后门入侵检测工具
1.5.1 rootkit
分文件级别和内核级别
文件级别是指用黑客文件替换系统文件,如login,ls,echo等,可通过定期校验文件完整性解决
内核级别目前没有较好的防疫措施,做好权限最小化和系统一般防御
1.5.2 chkrootkit
先安装 gcc,gcc-c++,make
安装chkrootkit
tar zxvf chkrootkit.tar.gz
cd chkrootkit
make sense
cd ..
cp -r chkrootkit /usr/local/chkrootkit
rm -rf chkrootkit*
使用:直接执行即可,会检查风险文件
缺点 chkrootkit会调用系统命令执行检查,如果系统命令已被入侵,则有问题,可在装好系统时对系统命令做个备份,打包,下次用chkrootkit时将打包的安全系统命令拿过来
1.5.3 rkhunter
通过脚本执行检测。优点是不需要编译以及没用太多系统命令,缺点是速度可能没编译快
使用 rkhunter -c
若无需确认,执行 rkhunter -c --skip-keypress
也可crontab执行 添加--crontab即可
1.6 遭攻击后如何处理
1.6.1 一般思路
断网
找攻击原:看系统日志,看端口,看进程,
分析入侵途径原因:
备份用户数据,注意攻击原在不在用户数据
如果不够确定可重装系统
修复程序和漏洞
连网
1.6.2 检查可疑用户
w查询所有用户最近登录
锁定可疑用户:passwd -l xxx
将用户当前进程pid kill,踢出user
last查看用户登录事件,last数据源于/var/log/wtmp,一般黑客需要处理此文件夹,但一般会留下痕迹
1.6.3 系统日志
/var/log/messages/secure 还有bash_history
1.6.4 检查可疑进程
查看进程pid:pidof sshd
ls -al /proc/pid/exe可查看进程执行的是什么程序
查看进程文件句柄 /proc/pid/fd
通过tcp/udp端口找到进程pid fuser -n tcp 111
fuser可找到使用某文件的进程,比如想知道哪个进程在用某个文件:fuser file_path,可返回进程id
1.6.5 检查系统完整性
比较文件与一般系统文件大小
rpm -Va检查,若有完整性不一致会显示结果,若未显示结果则全完整
局限性:仅可检查用rpm安装的包,未通过rpm安装的检查不到,或者rpm若被替换也检测不到
1.7 入侵分析案例
1.7.1 现象
服务器持续对外发包导致100mb带宽耗尽
业务访问量不大所以业务应该不会耗尽带宽,所以可能是流量攻击
1.7.2 分析
1 分析流量在哪个端口
2 通过端口分析找到对应进程
3 未发现可疑进程,怀疑rootkit,对常用命令进行完整性校验发现存在rootkit
1.7.3 断网分析
rootkit存在时,有两种方法考虑,一是将硬盘取下来分析,二是从安全的其他系统导入常用命令备份到某个文件夹,后面的系统命令均从此文件夹获取
可看系统登录日志/var/log/secure。用户登录记录会记录在此日志。系统默认账户无法登录系统,如果登录,可能有问题,比如mail用户。
可查看/etc/shadow查看系统默认用户是否设置密码,默认应该没有密码
查到可疑用户后,关掉可疑用户终端,ps或top查看是否有可以用户进程
1.7.4 寻找攻击源
找到可疑用户后,根据用户找到可疑进程,根据进程找到可疑攻击源,找到攻击源路径
1.7.5 找到攻击原因
apache和tomcat通过mod_jk集成,tomcat未对外开放端口,apache主要对外开放80端口,主要考虑apache
apache主要处理静态资源,所以网页入侵概率不大,可以先看apache日志
通过apache访问日志,找到了漏洞原,此漏洞可通过url直接访问服务器文件系统
1.7.6 总结
不用的系统用户可以删除;系统认证改成公钥认证;即使修补开源软件漏洞或更新开源软件;使用tcp_wrapper限制登录ip地址范围
流程:
网络流量分析 + rootkit分析
断网看日志找可疑登录用户:/var/log/secure,看登录记录,/var/log/messages, /var/log/wtmp(==last, w)