目录
1.账号安全控制
1.1 基本安全措施
1.1.1 系统账号清理
①将非登陆用户的shell设为/sbin/nologin
usermod -s /sbin/nologin
②锁定长期不使用的账号:
usermod -L 用户名
passwd -l 用户名
passwd -S 用户名
③删除无用的账号:userdel 【-r】
④锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow
lsattr /etc/passwd /etc/shadow
chattr -i /etc/passwd /etc/shadow

常见的非登录用户包括bin、daemon、adm、lp、mail、nobody、apache、mysql、dbus、ftp、gdm、haldaemon等。为了确保系统安全,这些用户的登录shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动。
usermod -L zhangsan //锁定账号
passwd -S zhangsan //查看账号状态
usermod -U zhangsan //解锁账号

chattr +i /etc/passwd /etc/shadow //锁定文件
lsattr /etc/passwd etc/shadow //查看为锁定状态
chattr -i /etc/passwd /etc/shadow //解锁文件
lsattr /etc/passwd /etc/shadow //查看为解锁状态
在账号文件被锁定的情况下,内容不允许变更,因此无法添加、删除账号,也不能更改用户密码、登录shell、宿主目录等属性信息。

1.1.2 密码安全控制
为了降低密码被破解的风险,应该定期更改密码,避免长期使用同一个密码。管理员可以在服务器端限制用户密码最大有效天数,对于密码已经过期的用户,登录时将被要求重新设置密码,否则拒绝登录。
例:将密码有效期设为30天
[root@localhost ~]#vi /etc/login.defs //适用于新建的用户
PASS_MAX_DAYS 30
[root@localhost ~]#chage -M 30 lisi //适用于已有的lisi用户例:强制要求用户zhangsan下次登录时重设密码
[root@localhost ~]#chage -d 0 zhangsan
Localhost login:zhangsan
password:
You are required to change your password immediately(root enforced)
Changing password for zhangsan.
(current) UNIX password:
New password:
Retype new password:1.1.3 命令历史、自动注销
shell环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。
Bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISTSIZE变量值,可以影响系统中的所有用户。
例:设置最多只记录200条历史命令
[root@localhost ~]#vi /etc/profile //适用于新登录用户
...... //省略部分内容
HISTSIZE=200
[root@localhost ~]#export HISTSIZE=200 //适用于当前用户还可以修改用户宿主目录中的~ /.bash_logout文件,添加清空历史命令的操作语句。
[root@localhost ~]#vi ~/.bash_logout
history -c
clearBash终端中,还可以设置闲置超时时间,由变量TMOUT来控制,默认单位为秒。
[root@localhost ~]#vi /etc/profile //适用于新登录用户
...... //省略部分内容
export TMOUT=600
[root@localhost ~]#export TMOUT=600 //适用于当前用户注意:当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免设置TMOUT变量。必要时可以执行“unset TMOUT”命令取消TMOUT变量设置。
1.2 用户切换与提权
1.2.1 su命令——切换用户
使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限。切换时需要对目标用户的密码进行验证。例如,当前登录的用户为jerry,若要切换为root用户,可以执行以下操作。
[jerry@localhost ~]#su -root
密码: //输入用户root的口令
[root@localhost ~]# //验证成功后获得root权限选项"-"等同于“--login”或“-l”,表示切换用户后进入目标用户的登录shell环境。
默认情况下任何用户都允许使用su命令,为了加强su命令的使用控制,可以借助pam_wheel认证模块,只允许极个别用户使用su命令进行切换。
[root@localhost ~]#gpasswd -a kcce wheel //添加授权用户kcce
Adding user kcce to group wheel
[root@localhost ~]#grep wheel /etc/group //确认wheel组成员
wheel:x:10:kcce
[root@localhost ~]#vi /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so
...... //省略部分内容
auth required pam_wheel.so use_uid //去掉此行开头的#号
...... //省略部分内容启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令,尝试进行切换时将会按照“拒绝权限”来处理,从而将切换用户的权限控制在最小范围内。
[jerry@localhost ~]$su -root //尝试切换为root
密码:
su:拒绝权限
[root@localhost ~]$ //切换失败,仍为原用户1.2.3 sudo命令——提升执行权限
通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登录密码。使用sudo命令就可以提升执行权限。但是需要管理员预先进行授权,指定允许哪些用户以超级用户的身份来执行命令。
①在配置文件/etc/sudoers中添加授权
sudo机制的配置文件为/etc/sudoers,文件默认权限为440,需使用专门的visudo工具进行编辑。
也可以使用vi进行编辑,但保存时必须执行":w!"命令来强制操作,否则保存不成功。
配置文件/etc/sudoers中,授权记录的基本配置格式如下:
user MACHINE=COMMANDS
授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令。各部分的具体含义如下:
用户(user):授权的用户名,或采用”%组名“的形式(授权一个组的所有用户)。
主机(MACHINE):使用此配置文件的主机名。
命令(COMMANDS):允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分割。
典型的sudo配置记录中,每一行对应一个用户或组的sudo授权配置
例:若要授权用户jerry能够执行ifconfig命令来修改IP地址,而wheel组的用户不需验证密码即可执行任何命令
[root@localhost ~]#visudo
...... //省略部分内容
Jerry localhost=/sbin/ifconfig
%wheel ALL=NOPASSWD:ALL当使用相同授权的用户较多,或者授权命令较多时,可以采用集中定义的别名。用户、主机、命令都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置。
例:以下操作通过别名方式来添加授权记录,允许用户jerry、tom、kcce在主机smtp、pop中执行rpm、yum命令
[root@localhost ~]#visudo
...... //省略部分内容
User_Alias OPERATORS=jerry,tom,kcce
Host_Alias MAILSVRS=smtp,pop
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
OPERATORS MAILSVRS=PKGTOOLSsudo配置记录的命令部分允许使用通配符“*”、取反符号"!",当需要授权某个目录下的所有命令或取消其中个别命令时特别有用。
例:若要授权用户kkg可以执行/sbin目录下除ifconfig、route以外的其他所有命令程序
[root@localhost ~]#visudo
...... //省略部分内容
kkg localhost=sbin/*,!/sbin/ifconfig,!/sbin/route默认情况下,通过sudo方式执行的操作并不记录,若要启用sudo日志记录以备管理员查看,应在/etc/sudoers文件中增加“Defaults logfile”设置。
[root@localhost ~]#visudo //查找Defaults,在前面添加一行内容
...... //省略部分内容
Defaults logfile=“/var/log/sudo"②通过sudo执行特权命令
对于已经获得授权的用户,通过sudo方式执行特权命令时,只需要将正常的命令行作为sudo命令的参数即可。由于特权命令程序通常位于/sbin、/usr/sbin等目录下,普通用户执行时应使用绝对路径。
[jerry@localhost ~]$/sbin/ifconfig eth0 192.168.1.11/24 //未用sudo的情况
SIOCSIFADDR:权限不够
SIOCSIFNETMASK:权限不够
SIOCGIFADDR:无法指定被请求的地址
SIOCSIFBROADCAST:权限不够
SIOCSIFFLAGS:权限不够
[jerry@localhost ~]$sudo /sbin/ifconfig eth0 192.168.1.11/24 //使用sudo的情况
...... //省略部分内容
[sudo]password for jerry: //验证jerry的密码
[jerry@localhost ~]$/sbin/ifconfig eth0 //查看执行结果
在当前会话过程中,第一次通过sudo执行命令时,必须以用户自己的密码(不是root用户或其他用户的密码)进行验证。此后再次通过sudo执行命令时,只要与前一次sudo操作的间隔时间不超过五分钟,则不再重复验证。
若要查看用户自己获得哪些sudo授权,可以执行“sudo -l”命令。未授权的用户将会得到“may not run sudo”的提示,已授权的用户则可以看到自己的sudo配置。
[kkg@localhost ~]$sudo -l
[sudo]password for kkg: //验证kkg用户的密码
...... //省略部分内容
用户kkg可以在该主机上运行以下命令:
(root) /sbin/*,(root)!/sbin/ifconfig,(root)!/sbin/route如果已经启用sudo日志,则可以从/var/log/sudo文件中看到用户sudo操作记录。
[root@localhost ~]#tail /var/log/sudo
...... //省略部分内容
1.3 PAM安全认证
PAM(Pluggable Authentication Modules),是Linux系统可插拔认证模块。
Linux系统使用su命令存在安全隐患,默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)的登陆密码,带来安全风险。为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
1.PAM及其作用
①PAM是一种高效而且灵活便利的用户级别认证方式,它也是当前Linux服务器普遍使用的认证方式。
②PAM提供了对所有服务进行认证的中央机制,适用于login,远程登陆(telnet,rlogin,fsh,ftp),su等应用程序。
③系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。
2.PAM认证原理
①PAM认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so。
②PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。
③用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
3.PAM认证的构成
①每一行都是一个独立的认证过程。
②每一行可以区分为三个字段:认证类型,控制类型,PAM模块及其参数。
4.PAM认证类型
①认证管理:接受用户名和密码,进而对该用户的密码进行认证。
②账户管理:检查账户是否被允许登陆系统,账号是否已经过期,账号的登陆是否有时间段的限制等。
③密码管理:主要是用来修改用户的密码。
④会话管理:主要是提供对会话的管理和记账。
5.PAM控制类型
控制类型也可以称做Control Flags,用于PAM验证类型的返回结果。
①required验证失败时仍然继续,但返回Fail。
②requisite验证失败则立即结束整个验证过程,返回Fai。
③sufficient验证成功则立即返回,不再继续,否则忽略结果并继续。
④optional不用于验证,只是显示信息(通常用于session类型)。
2.系统引导和登录控制
2.1 开关机安全控制
2.1.1 调整BIOS引导设置
①将第一优先引导设备设为当前系统所在磁盘。
②禁止从其他设备(如U盘、光盘、网络等)引导系统,对应的项设为"Disabled"。
③将BIOS的安全级别改为“setup”,并设置好管理密码,以防止未授权的修改。
2.1.2 禁止Ctrl+Alt+Del快捷键重启
[root@localhost ~]#vi /etc/init/control-alt-delete.conf
[root@localhost ~]#reboot //重启生效
2.1.3 限制更改GRUB引导参数
为GRUB菜单设置的密码建议采用“grub-md5-crypt”命令生成,表现为经过MD5算法加密的字符串,安全性更好。在grub.conf配置文件中,使用“password --md5”配置项来指定MD5加密的密码字符串。
[root@localhost ~]#grub-md5-crypt //根据提示指定密码
Password:
Retype password:
$1$Kndw50$wRW2w1v/jbZ8n5q2fON4y/ //经过加密的密码字符串
[root@localhost ~]#vi /boot/grub/grub.conf
password --md5$1$Kndw50$wRW2w1v/jbZ8n5q2fON4y/ //添加到第一个title之前
title Red Hat Enterprise Linux(2.6.32-431.el6.x86_64)通过配置,重新开机进入GRUB菜单时,直接按E键将无法修改引导参数。若要获得编辑权限,必须先按P键并根据提示输入正确的GRUB密码。
2.2 终端及登录控制
2.2.1 减少开放的tty终端个数
对于远程维护的Linux服务器,6个tty终端实际上有点多余。在Centos6系统中,控制终端的配置文件如下:
/etc/init/tty.conf //控制tty终端的开启
/etc/init/start-ttys.conf //控制tty终端的开启数量、设备文件
/etc/sysconfig/init //控制tty终端的开启数量、终端颜色
通过修改/etc/init/start-ttys.conf和/etc/sysconfig/init,可以减少开放的tty终端数量。
例:若只希望开启tty4、tty5、tty6三个终端,修改后的操作如下:
[root@localhost ~]#vi /etc/init/start-ttys.conf
env ACTIVE_CONSOLES=/dev/tty[456] //修改为456
[root@localhost ~]#vi /etc/sysconfig/init
ACTIVE_CONSOLES=/dev/tty[456] //修改为456
[root@localhost ~]#reboot2.2.2 禁止root用户登录
在Linux系统中,login程序会读取/etc/securetty文件,以决定允许root用户从哪些终端(安全终端)登陆系统。若要禁止root用户从指定的终端登陆,只需从该文件中删除或者注释掉对应的行即可。
例:若要禁止root用户从tty5、tty6登陆,可以修改/etc/securetty文件,将tty5、tty6行注释掉
[root@localhost ~]#vi /etc/securetty
...... //省略部分内容
#tty5
#tty62.2.3 禁止普通用户登录
当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登陆系统,只需要简单的建立/etc/nologin文件即可。
[root@localhost ~]#touch /etc/nologin
3.弱口令检测、端口扫描
3.1 弱口令检测——John the Ripper
1.下载并安装John the Ripper
John the Ripper的官方网站是http://www.openwall.com/john/,在该网站可以获取最新的稳定版源码包,如john-1.11.0.tar.gz。
以源码包john-1.11.0.tar.gz为例,解压后可看到三个子目录——doc、run、src,分别表示手册文档、运行程序、源码文件。
[root@localhost ~]#tar zxf john-1.11.0.tar.gz
[root@localhost ~]#cd john-1.11.0
[root@localhost john-1.11.0]#ls -ld *
...... //省略部分内容
[root@localhost john-1.11.0]#ls doc/切换到src子目录并执行“make clean linux-x86-64”命令,即可执行编译过程。
[root@localhost ~]#make clean linux-x86-64
[root@localhost ~]#ls ../run/john //确认已生成可执行程序john
../run/john
2.检测弱口令账号
在安装有john the ripper的服务器中,可以直接对/etc/shadow文件进行检测。对于其他Linux服务器,可以对shadow文件进行复制,并传递给john程序进行检测。
[root@localhost ~]#cp /etc/shadow /root/shadow.txt //准备待破解的密码文件
[root@localhost ~]#cd ../run
[root@localhost run]#./john /root/shadow.txt //执行暴力破解
...... //按Ctrl+C组合键中止后续过程破解出的密码信息自动保存到john.pot文件中,可以结合“--show”选项进行查看。
[root@localhost ~]#./john --show /root/shadow.txt //查看已破解出的账户列表
3.使用密码字典文件
执行john程序时,可以结合“--wordlist=”选项来指定字典文件的位置,以便对指定的密码文件进行暴力分析。
[root@localhost run]#:>john.pot //清空已破解出的账户列表,以便重新分析
[root@localhost run]#./john --wordlist=./password.lst /root/shadow.txt
3.2 网络扫描——NMAP
1.安装NMAP软件包
[root@localhost ~]#mount /dev/cdrom /media/cdrom/
[root@localhost ~]#rpm -ivh /media/cdrom/Packages/nmap-5.51.3.el6.x86_64.rpm2.扫描语法及类型
NMAP的扫描程序位于/usr/bin/nmap目录下,基本格式:
nmap [扫描类型] [选项] <扫描目标...>