首页 > 代码库 > 全面inux主机安全配置详解--系统OS安全(第二部分)
全面inux主机安全配置详解--系统OS安全(第二部分)
系统安全
最小服务法
文件安全(suid/sgid/stick/chattr)
升级系统和软件
最小权限法(su/sudo)
SSH安全建议
最小服务法(system v/xinetd)
关闭不需要的服务:
# vim /root/service.sh
#!/bin/bash
service xinetd stop
chkconfig xinetd off
services="network sshd syslog lvm2-monitor messagebus sendmail crond gpm anacron auditd haldaemon irqbalance avahi-daemon"
offservices=`chkconfig --list |grep 0: | awk ‘{print $1}‘`
for i in $offservices
do
chkconfig $i off
done
for i in $services
do
chkconfig $i on
done
reboot
禁止普通用户执行init.d目录中的脚本
# chmod -R o=- /etc/rc.d/init.d
文件安全(suid/sgid/stick/chattr) 分区安全
需要独立划分分区的目录(分区的原则:所有用户都能写的,建议分区;读或写频繁地,建议分区):
/
/boot
swap
/usr或/opt
/home
/var and /var/tmp
/tmp
/data
/bak
挂载选项:
1. noexec --所有的二进制命令在此分区都无法运行,脚本也无法运行,可以考虑用来存放数据。
2. nodev --所有的字符文件和设备文件都无法在此分区中使用(如: zero, sda etc).
3. nosuid --不允许在此分区使用拥有冒险位和强制位的文件
4. noatime --不允许更新文件的访问时间,减少额外的IO开销
5. nodiratime --不允许更新目录访问时间
Create separate partitions for Apache and FTP server roots. Edit /etc/fstab file and make sure you add the following configuration options:
Sample /etc/fstab entry to to limit user access on /dev/sda5 (ftp server root directory):
# vim /etc/fstab
/dev/sda5 /ftpdata ext3 defaults,nodev,noexec 1 2
使用磁盘配额(所有用户用写目录都需要做配额限制):
1.Enable quotas per file system by modifying the /etc/fstab(usrquota) file.
2.Remount the file system(s). mount -o remount /xx
3.Create the quota database files and generate the disk usage table.
quotacheck -cmu /xx ; quotaon -vu /xx
4.Assign quota policies.
edquota -u user01
edquota -p user01 user02
setquota -u user01 1000 2000 10 20
查询:
quota -u user01
repquota -vu /xx
锁定重要文件的i(inode)节点
chattr命令、lsattr命令
# chattr +i /etc/passwd--完全锁定inode
# useradd newuser
useradd:无法打开密码文件
# lsattr /etc/passwd
----i-------- /etc/passwd
# chattr +-a /file--只锁定旧inode与block的对应关系,允许追加新的block
需要加锁的文件:
/boot/grub/grub.conf
/etc/passwd
/etc/shadow
/etc/sudoers
suid/sgid(分区挂选项:nosuid)
1.手工找出系统中拥有suid/sgid的文件(快照)
# find / -type f -perm +6000 -exec ls -lh {} \;
# find / -type f -perm +6000 -ls
2.使用脚本的方法查找对比:
# find / -type f -perm +6000 > /etc/sfilelist
# vim check_perm.sh
#!/bin/bash
OLD_LIST=/etc/sfilelist
for i in `find / -type f -a -perm +6000`
do
grep -F "$i" $OLD_LIST &> /dev/null
[ $? -ne 0 ] && ls -lh $i
done
升级系统和软件
# yum list installed
# yum list packageName
# yum remove packageName
Update softwares:
# yum update --升级整个系统
# yum update packageName--升级单独的一个软件包或多个
最小权限法(su/sudo)
su--完全提权,需要知道提权目标用户密码
su--不指定用户时,切换成为超级用户,但环境变量沿用的是上一个用户的变量
su ---不指定用户时,切换成为超级用户,环境变量沿用的是当前用户的变量
su username--切换成为指定的用户
su - username
su -l username
只限定某个用户或者某组拥有切换成root的权限,剩下的用户都无su提权的权限:
# vim /etc/pam.d/su
……
auth required pam_wheel.so use_uid--只有wheel组的成员才能使用su
……
# gpasswd -a zhangsan wheel
# usermod -G wheel zhangsan
使用ssh远程管理linux时,避免直接使用管理员登录,而是先使用普通用户普通至系统,然后再通过su/sudo方式来提权。
好处:避免root被暴力破解
sudo--权限最小化,只分配指定权限而且不需要知道目标用户(root)的密码,最有效的权限分割
以下2种方法都可以编辑/etc/sudoers文件
# visudo--使用专业工具修改配置文件,可以检查语法错误,不需要强制就能保存
# vim /etc/sudoers--直接编辑配置文件,这种不能检查配置文件的语法问题,而且需要强制保存
配置文件的格式:
root ALL=(ALL) ALL
授予用户登录linux客户的源地址用户身份命令
组:%
常用命令选项:
sudo -l查看允许执行的命令列表
sudo -k清除用户密码验证的时间戳
sudo -v重新校验密码
sudo ls通过sudo执行命令(sudo 命令行)
sudo通配符:
* Matches any set of zero or more characters.
? Matches any single character.
[...] Matches any character in the specified range.
[0-9]
[abc]
[a-Z]
[0-9]
[1-2][0-9]10-29
[!...] Matches any character not in the specified range.
vsftpd实例授权:
1、能够使用管理员安装和卸载vsftpd
2、能够重启vsftpd服务
3、能够修改vsftpd的配置文件
4、能够修改vsftpd匿名用户的文件权限
# visudo
u01 ALL=/usr/bin/yum * vsftpd, /sbin/service vsftpd *, /usr/bin/vim /etc/vsftpd/* ,/bin/ch[mo]* * /var/ftp/*
用户管理的权限:
1、能新建和删除用户,但不能新建管理员
2、能够设置密码,过期时间,但不能设置管理员密码
3、能将用户加入某个组,或者从组里边清出去
# visudo
u01 ALL=/usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod, /usr/bin/chage, /usr/bin/passwd, !/usr/sbin/useradd *-o*, !/usr/sbin/userdel *root*, !/usr/sbin/usermod *-o*, !/usr/bin/chage *root*, !/usr/bin/passwd *root*
httpd的授权:
# visudo
u01 ALL=(root) /usr/bin/vim /etc/httpd/conf*/*.conf, /bin/chown * /var/www/html/*, /bin/chmod * /var/www/html/*, /sbin/service httpd *, /usr/bin/yum -y install httpd*
结合wheel组来授权(以组为单位):
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: ALL
结合别名来授权:
实例1:
# visudo
User_Alias OPERATORS=jerry,tom,tsengyia
Host_Alias MAILSERVERS=mail,smtp,pop--保证这三个主机名能够被解析
Cmnd_Alias SOFTWARE=/bin/rpm,/usr/bin/yum
OPERATORS MAILSERVERS=SOFTWARE--引用变量来配置sudo权限
实例2:
设立组帐号“managers”,授权组内的各成员用户可以添加、删除、更改用户帐号
# groupadd managers
# gpasswd -M zhangsan,lisi managers
# visudo
Cmnd_Alias USERADM = /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod,!/usr/sbin/useradd *-o*, !/usr/sbin/userdel *root*, !/usr/sbin/usermod *-o*
%managers ALL=USERADM
允许用户管理apache
user01ALL=/usr/bin/vim /etc/httpd/*, /sbin/service httpd *
使用别名的方式给u01,u02用户授予httpd管理权限:
User_Alias HTTP_ADMIN = u01,u02
Cmnd_Alias HTTP_COMM = /usr/bin/vim /etc/httpd/conf*/*.conf, /bin/chown * /var/www/html/*, /bin/chmod * /var/www/html/*, /sbin/service httpd *, /usr/bin/yum -y install httpd*
HTTP_ADMIN ALL= NOPASSWD: HTTP_COMM
SSH安全建议:
1、只使用ssh v2
Protocol 2
ListenAddress x.x.x.x--如果你的环境中有VPN通道,建议sshd监听在内网的地址
2、限制用户访问(用户与用户之间使用空格隔开,可以使用? *通配符)
AllowUsersuser01 root--只允许哪些用户使用ssh登录
DenyUsersuser02 user03--只拒绝哪些用户访问,两种方法选其一
DenyGroups
AllowGroups
3、配置空闲超时自动断开
使用shell变量来完成直接且简单:TMOUT
4、禁止管理员直接使用ssh登录:
PermitRootLogin no--使用普通用户登录用,调用su/sudo来提权
5、更改默认的监听端口和监听IP
Port 5589
ListenAddress 0.0.0.0--按照需求可设置监听在服务器私有地址上,如果监听在公网的上地址上则需要更改端口,不能直接使用22端口
6、给账号设置强壮的密码
# rpm -ivh expect-5.43.0-5.1.i386.rpm
# mkpasswd -l 128 -d 8 -C 15 -s 10
omlrjcU3fxivSqtotyu‘nk6tR(zhp1Jcel_gxjnqedErpx_1g4U]amtqst3igWXb-f2eqqqJohfjuzccdC.coMok7Abvtjfzej&vfvfTblgBmWmijqh.w&acegjrqwqq
-l密码长度
-d多少个数字
-C 大写字母个数
-s特殊符号的个数
f
7、使用密钥对验证:
# ssh-keygen -t rsa
# ssh-copy-id /$HOME/.ssh/id.rsa.pub username@remotehost
8、使用iptables控制(防止ssh密码被暴力破解):
在每分钟内只允许有三个新的连接去连接ssh服务器,并发连接是3 个,如果超过此值 将被拒绝
# iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
# iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
9、减少密码错误尝试次数:
MaxAuthTries 3--设置密码错误尝试次数
tcpwrappers+bash scrpts(错误尝试源地址重复次达到一定上限):
last--查询所有用户在线情况(/var/log/wtmp)
lastlog--查询最后一次登录时间
lastb--查询失败登录的记录
使用脚本实现对sshd暴力破解的IP进行拦截,把连续3次以上通过ssh登录系统失败的IP放到/etc/hosts.deny 。 文件中的IP不能重复。
脚本要求每10分钟执行一次。
lastb is the same as last, except that by default it shows a log of the file /var/log/btmp, which contains all the bad login attempts
# lastb -i -a | grep ssh | awk ‘{print $NF}‘ | uniq -c | awk ‘$1>3{print $2}‘
本文出自 “运维!解放!” 博客,谢绝转载!