目录
一、账号安全控制
1.系统账号清理
2.密码安全控制
3.命令历史限制
① 减少记录的命令条数
②登陆时自动清空历史命令
4、终端自动注销
5.bash配置文件读取顺序
二、使用su命令切换用户
1.格式
2.密码验证
3.限制用户使用su命令
三、linux中的PAM安全认证
1.PAM安全认证机制
2.PAM认证原理
3.PAM安全认证流程
四、使用sudo机制提权
1.配置sudo授权
2.语法格式
3.别名创建
五、开关机安全控制
1.BIOS引导设置
2.GRUB限制
3.禁止 root 用户登录
六、系统弱口令检测
七、网络端口扫描
1.查看本机开放的TCP端口
2.查看本机开放的UDP端口
3.查看正在运行的使用TCP协议的网络状态信息
4.查看正在运行的使用UDP协议的网络状态信息
5.查看正在运行的使用的UDP和TCP协议的网络状态信息
6.查看是否有80端口
7.扫描同网段端口
八、总结
1.账号基本安全措施
2.用户切换与提权
3.开关机安全控制
4.终端控制
5.John the Ripper工具
6.namp命令(端口扫描)
引言:生产中一般都是普通用户操作,故需要一些操作提权并进行安全操作。除此之外要理解su的工作原理即PAM认证。
将非登陆用户的Shell设为/sbin/nologin或者/bin/falsh
usermod -s /sbin/nologin 用户名
锁定长期不使用的账号
usermod -L 用户名 锁定用户账户
usermod -U 用户名 解锁用户账户
passwd -u 用户名 解锁用户账户
passwd -l 用户名 锁定用户密码
passwd -S 用户名 查看用户状态
passwd和usermod可以互相解锁和锁定
passwd锁定密码前有两个!,usermod有一个!
删除无用的账号
userdel -r 用户名 删除用户及其宿主目录
清空一个账号密码
passwd -d 用户名 清空账户密码
锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow 锁定文件
lsattr /etc/passwd /etc/shadow 查看文件状态
chattr -i /etc/passwd /etc/shadow 解锁文件
案例:
1.查看passwd和shadow的文件状态
2.锁定passwd文件(无法创建用户)
3.锁定shadow文件(无法修改密码)
4.解锁passwd无法创建用户(shadow锁定无法校验密码)
chage -M 日期 用户 设置用户密码有效期
chage -E xxxx-xx-xx 设置过期日期
设置密码有效期
要求用户下次登陆时修改密码
vi /etc/login.defs 修改密码配置文件适用于新建用户
……
PASS_MAX_DAYS 30
[root@localhost ~]# chage -M 30 用户
[root@localhost ~]# cat /etc/shadow | grep 用户
默认为99999,修改后默认30
强制下次登陆更换密码
chage -d 0 用户 强制在下次登陆时更改密码
cat /etc/shadow | grep 用户 shadow文件中的第三个字段被修改为0
/etc/profile这个文件是系统全局变量配置文件,可以通过重启系统或者执行source /etc/profile命令使文件被读取重载。
[root@localhost ~]# vi /etc/profile #编辑全局变量配置文件
export HISTSIZE=200 #输入export HISTZIZE=200
[root@localhost ~]# source /etc/profile #相当于使/etc/profile内的命令重载一遍
~/.bashrc文件中的命令会在每次打开新的bash shell时(也包括登录系统)被执行
echo " " > ~/.bash_history
vim ~/.bash_logout
history -c 或 clear
vim ~/.bashrc
echo " " > ~/.bash_history
闲置600秒后自动注销,与上方减少历史条数类似
vi /etc/profile #编辑全局变量配置文件
export TMOUT=600 #输出timeout=600
用户登录--->加载~/.bash_profile --->.bash_profile中的配置首先是使 ~/.bashrc生效
用户登出--->.bash_logout 运行logout配置文件
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并 从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc /bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读 取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,然后执行用户的.bashrc文件。交互式登录shell调用此文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell 时,该文件被读取。这里可以设置别名。若删除此文件, 提示符会变成 -bash-4.2$,可以复制/etc/skel/.bashrc到自己的家目录下。交互式非登录shell调用此文件。
(5) ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的;~/.bashrc 是交互式non-login 方式 进入 bash 运行的。通常二者设置大致相同,所以通常前者会调用后者。
格式 su -目标用户
①root→任意用户,不验证密码
②普通用户→其他用户,验证目标用户的密码
su - root 带-选项表示将使用目标用户的登陆Shell环境
su命令和su -命令区别:
su只是切换了root身份,但Shell环境仍然是普通用户的Shell;而su -连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误。
①将允许使用su命令的用户加入wheel组
②启用pam_wheel认证模块
su命令具有安全隐患:
su命令使得每个用户都具有反复尝试其他用户的登陆密码,若是root用户,则风险更大。
所以需要加强su命令的使用控制,可以借助PAM认证模块,仅允许极个别指定用户可使用su命令进行切换。
[root@localhost ~]# gpasswd -a lisi wheel 将用户“lisi”加入到whell组中
在/etc/pam.d/su文件里设置禁止用户使用su命令
vim /etc/pam.d/su
auth sufficient pam_rootok.so
............
#auth required pam_wheel.so use_uid
...........
【1】以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su 命令进行切换的。
【2】两行都注释也是允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输 入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码
(pam_rootok.so模块的主要作用是使uid为0的用户,即 root用户能够直接通过认证而不用输 入密码)
【3】如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令。
【4】如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。
Linux-PAM是linux可插拔认证模块,是一套可定制、可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。
PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/lib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。
查看su操作记录
安全日志文件:/var/log/secure(所有登陆信息)
cat /var/log/secure
PAM认证过程:
1.使用者执行passwd程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件 一般是在/etc/pamd/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/pam unixpasswd.so 此设置文件
3.经由/etc/pam.d/pam unixpasswd.so设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动 作(重新输入密码或者通过验证)
1.PAM 认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so;(认证模块)
2.PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于 /lib64/security/下)进行安全认证。
3.用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM 模块也是不同的。
如果想查看某个程序是否支持 PAM 认证,可以用 ls 命令进行查看/etc/pam.d/。
查看su的PAM配置文件:cat etc/pam.d/su
每一行都是一个独立的认证过程
每一行可以区分为三个字段:认证类型、控制类型、PAM模块及其参数
第一列代表PAM认证模块类型
①auth:对用户身份进行识别,如提示输入密码,判断是否为root。
②account:对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
③password:使用用户信息来更新数据,如修改用户密码。
④session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
第二列代表PAM控制标记
①required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
②requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
③sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
④optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。
⑤include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。
控制类型也称做Control Flags, PAM验证流程图
用于PAM验证类型的返回结果 程序开始
1.required验证失败时仍然继续,但 验证开始 required 验证成功验证失败 返回Fail 验证失败
2.requisite验证失败则立即结束整个 验证结束 requisite 验证 成功 验证 成功 验证过程,返回Fail
3.sufficient验证成功则立即返回,不 程序后续 动作 sufficient 验证 失败 再继续,否则忽略结果并 继续 optional
4.optional不用于验证,只显示信息(通常用于session类型)
su命令的缺点:
执行该命令是需要知道root用户的密码的。因为root用户拥有系统的最高权限,很容易误操作造成系统挂掉。一般情况下root密码尽可能要进行保密。
sudo是一个授权命令
用途:以其他用户身份(如root)执行授权的命令
● visudo或者vi /etc/sudoers
(此文件的默认权限为 440,保存退出时必须执行“:wq!”命令来强制操作)
用户 主机名=命令程序列表
用户 主机名=(用户) 命令程序列表
①用户:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
②主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机
③(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令
④命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。ALL则代表系统中的所有命令
admin ALL=/sbin/ifconfig #说明admin在所有主机上拥有ifconfig权限
admin1 localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff
#通配符“*”表示所有、取反符号“!”表示排除 #说明admin1拥有除了重启和关机的所有权限
%wheel ALL=NOPASSWD: ALL #表示wheel组成员无需验证密码即可使用sudo执行任何命令
admin2 ALL=(root)NOPASSWD: /bin/kill, /usr/bin/killall
#说明admin2用户不需要输入密码即可执行kill和killall命令
启动sudo操作日志
visudo #进入编辑
Defaults logfile = /var/log/sudo #将该命令添加至最后一行:wq保存并退出即可
用户别名 User_Alias
主机别名 Host_Alias
命令别名 Cmnd_Alias
User_Alias USERS=admin,admin1,admin2 用户的别名users包括:admin,admin1,admin2
Host_Alias HOSTS=localhost,hellolee 主机别名hosts包括:localhost,hellolee
Cmnd_Alias CMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel
USERS HOSTS=CMNDS 相当于:用户组 主机组 = 命令程序列表
①将第一引导设备设为当前系统所在硬盘
②禁止从其他设备(光盘、U盘、网络)引导系统
③将安全级别设为setup,并设置管理员密码
①使用grub2-mkpasswd-pbkdf2生成密钥
②修改/etc/grub.d/00_header文件,添加密码记录
③生成新的grub.cfg配置文件
grub2-mkpasswd-pbkdf2 #根据提示设置GRUB菜单的密码
PBKDF2 hash of your password is grub . pbkd.. . ..#省略部分内容为经过加密生成的密码字符串
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
vim /etc/grub.d/00_header
cat << EOF
set superusers="root” #设置用户名为root
password_pbkdf2 root grub. pbkd2. . . .
#设置密码,省略部分内容为经过加密生成的密码字符串
EOF
grub2-mkconfig -o /boot/grub2/grub.cfg #生成新的grub.cfg文件
重启系统进入GRtB菜单时,按e键将需要输入账号密码才能修改引导参数。
第二种方法 一步到位
grub2-setpassword
在 Linux 系统中,login 程序会读取/etc/securetty 文件,以决定允许 root 用户从哪些终端(安全终端)登录系统。
vi /etc/securetty
#tty5 想要不让在哪个终端登陆就在该终端前加注释#
tty6
crtl+alt+f5输入用户密码进不去
crtl+alt+f6输入用户密码成功进入
●禁止普通用户登录(临时,重启后消失)
login 程序会检查/etc/nologin 文件是否存在,如果存在,则拒绝普通用户登录系统(root 用户不受限制)。
touch /etc/nologin #创建/etc/nologin文件即禁止普通用户登录
rm -rf /etc/nologin #删除该文件即取消登录限制touch /etc/nologin
Joth the Ripper,简称JR
一款开源的密码分析工具,支持字典式的暴力破解
通过对shadow文件的口令分析,可以检测密码强度
官方网站:http://www.openwall.com/john/
操作步骤
cd /opt
tar zxvf john-1.9.0.tar.gz #解压工具包
yum -y install gcc gcc-c++ make #安装软件编译工具
cd /opt/john-1.9.0/src
make clean linux-x86-64 #切换到src子目录,进行编译安装
cp /etc/shadow /opt/shadow.txt #准备待破解的密码文件
cd /opt/john-1.9.0/run
./john /opt/shadow.txt #切换到run子目录,执行暴力破解
./john --show /opt/shadow.txt #查看已破解出的账户列表
> john. pot #清空己破解出的账户列表,以便重新分析
./john --wordlist=./ password.1st / opt/ shadow.txt 非使用指定的字典文件进行破解
NMAP
是一个强大的端口扫描类安全评测工具,支持 ping 扫描、多端口检测等多种技术
官方网站:http://nmap.org/
安装 NMAP 软件包
yum install -y nmap #然后安装nmap软件包
nmap命令常用选项与对应扫描类型
①-p:指定扫描的端口。
②-n:禁用反向 DNS 解析(以加快扫描速度)。
③-sS:TCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
④-sT:TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
⑤-sF:TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的 TCP 攻击包。这种类型的扫描可间接检测防火墙的健壮性。
⑥-sU:UDP 扫描,探测目标主机提供哪些 UDP 服务,UDP 扫描的速度会比较慢。
⑦-sP:ICMP 扫描,类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。
⑧-P0:跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法 ping 通而放弃扫描。
示例:
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1
netstat -natp
netstat -naup
netstat -nautp
nmap -p 80 192.168.223.9/24
nmap -n -sP 192.168.223.0/24
系统账号清理、密码安全控制、命令历史清理、自动注销
su、sudo
BIOS引导设置、禁止CtrI + Alt + Del快捷键、GRUB菜单设置密码
弱口令暴力破解密码