主机安全

安全

           物理安全

           软件安全(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}'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值