安全
物理安全
软件安全(kernel+softwares)
网络安全
系统安全
BIOS密码,更改适合的启动选项(禁止改bios./禁止更改第一启动选项,防止恶意的引导)
grub密码
系统密码
分区密码
最小权限法(su/sudo)
最小服务法
pam模板的使用
升级系统和软件
网络安全
tcpwrappers
iptables
SSH
VPN
selinux
系统安全:
BIOS密码(bios/cmos)
调整BIOS引导设置
修改启动顺序,正确做法:第一启选项为磁盘
设置管理密码
禁用Ctrl+Alt+Del重启热键
RHEL5:
# vim /etc/inittab
32 #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# init q --让更改的配置马上生效,不需要重启服务器。
RHEL6:
# vim /etc/init/control-alt-delete.conf --注释以下两行
#start on control-alt-delete
#exec /sbin/shutdown -r now "Control-Alt-Delete pressed"
# init q
系统策略(密码策略)
1.检查系统中有无空密码账号:
# awk -F: '($2 == "") {print}' /etc/shadow
# awk -F: '($2 == "") {print}' /etc/passwd
2.检查系统中有无多余的管理员账号:
# awk -F: '($3 == "0") {print}' /etc/passwd
3.设置账号的属性:
账号的过期时间设置:
# usermod -e 2012-10-1 u01 --修改一个已经存在的账号的过期时间
# useradd -e 2012-10-1 02 --在新建用户时指定过期时间
# chage -M 30 -m 7 -W 7 -I 3 userName
# chage -d 0 userName
-M 多长时间改一次密码
-m 修改密码的最小间隔
-W 密码过期警告时间
-I 密码过期延时时间
-d 定义最一次修改密码的时间,-d 0从来都没改过密码,所以第一次登录时需要修改密码
4.检查程序用户的登录Shell是否异常
# awk -F: '$7!="/sbin/nologin" {print $1,$7}' /etc/passwd
5.减少记录命令历史的条数
环境变量 HISTSIZE
# vim /etc/profile
HISTSIZE=50
6.设置在命令行界面中超时自动注销(shell的超时时间)
环境变量 TMOUT
# vim /etc/profile
TMOUT=300
7、记录用户的每个命令操作(录屏):
# vim /etc/profile
if [ $UID -ge 500 ]; then
exec /usr/bin/script -t 2>/data/logs/system/$USER-$UID-`date +%Y%m%d%H%M`.date -a -f -q /data/logs/system/$USER-$UID-`date +%Y%m%d%H%M`.log
fi
# last --查看所有用户在线的情况
# lastlog --查看用户最后一次登录的时间
/var/log/wtmp
# lastb --查看用户登录失败记录
# /var/log/secure --跟验证相关的日志信息在记录在此文件
给一个已经存在的分区加密( i/o-->disk-->partion-->crypt-->logic_partion(ext3))
1.进入单用户模式
telinit 1
2.Unmount your existing /home:
umount /home
3.如何无法卸载,可以使用强制杀死访问这个分区程序,然后再次卸载:
fuser -mvk /home
4.确认分区是否还被挂载着:
grep home /proc/mounts
5.给分区设置加密(加密的分区是无法访问的)
# rpm -q cryptsetup-luks --确认加密工具是否已经安装
# cryptsetup --verbose --verify-passphrase luksFormat /dev/VG00/LV_home
YES --回答大写的yes,这一步会把分区原来所有的数据全部清空
6.给加密分区设置映射名称:
cryptsetup luksOpen /dev/VG00/LV_home home
7.映射设备存放的路径:/dev/mapper/home
ls -l /dev/mapper | grep home
8.格式化分区
mkfs.ext3 /dev/mapper/home
9.挂载分区
mount /dev/mapper/home /home
10.Make sure the file system is visible:
df -h | grep home
实现加密分区的自动挂载:
# vim /etc/crypttab
xxx /home/mapper/GLSvg-lv_home /root/.password
映射设备 原始设备 加密密码
# vim /root/.password --输入假密码,不需要写真密码,提高安全性
uplooking
# chmod 600 /root/.password
# cryptsetup luksAddKey /dev/mapper/GLSvg-lv_home /root/.password --告知设备密码验证文件存储路径
Enter any LUKS passphrase:
Verify passphrase:
key slot 0 unlocked.
Command successful.
# vim /etc/fstab
/dev/mapper/xxx /mnt ext3 defaults 1 2
# reboot --检验一下是否能够开机自动挂载
最小服务法
关闭不需要的服务:
# 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,nosuid,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
升级系统和软件
# 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
user01 ALL=/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、限制用户访问(用户与用户之间使用空格隔开,可以使用? *通配符)
AllowUsers user01 root --只允许哪些用户使用ssh登录
DenyUsers user02 user03 --只拒绝哪些用户访问,两种方法选其一
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 特殊符号的个数
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}'