Linux系统安全及应用加固———最适合新手学,新手都能看懂!超详细的理论+超详细的实验!呕心沥血之作完成!

一、账号安全控制

1.1、账号安全基本措施

1.1.1、系统帐号清理

    将非登录用户的Shell设为/sbin/nologin 锁定长期不使用的账号 删除无用的账号 锁定账号文件passwd、shadow
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
[root@localhost ~]# Isattr /etc/passwd /etc/shadow
-------- /etc/passwd
-------- /etc/shadow

①更改用户登录权限操作

1、进入vi /etc/passwd 2、在root用户选更改tx用户的登录权限 改成/sbin/nologin 3、然后tx用户退出登录在登陆时,已经登陆不上了

②用passwd -l 锁定账户 ,登陆不上;passwd -u 解锁账户 用usermod -L 锁定账户 ;usermod -U 解锁账户 ③删除无用账户

useradd先创建一个模拟的无用账户; userdel -r 删除无用账户 ④锁定文件

1、chattr +i /etc/passwd /etc/shadow 在vi编辑器里只能读,不能写 2、lsattr /etc/passwd /etc/shadow 查看文件状态 3、在vi编辑器里面操作是否可以读写,只读不写 解锁文件

1、chattr -i /etc/passwd /etc/shadow 在vi编辑器里可读可写了 2、lsattr /etc/passwd /etc/shadow 查看文件状态

1.1.2、密码安全控制

    设置密码有效期 要求用户下次登录时修改密码
[root@localhost ~]# vi /etc/login.defs  适用于新建用户
PASS MAX DAYS 30
[root@localhost ~]# chage -M 30 lisi   ## 适用于已有用户
[root@localhost ~]# chage -d 0 zhangsan  ##强制在下次登录时更改密码

①新建用户更改密码有效期:

1、进入 vi /etc/login.defs 2、找到下面这句话 ,把数值改为30(就是有效期为30天) 3、新建tx1用户 ,给tx1设置密码

4、这时候 vi /etc/shadow 查看新建的 tx1 用户的密码有效期已经改好了 ②已有用户更改密码有效期:

1、更改已有用户 tx 的密码有效期为30天 2、进入vi /etc/shadow 查看 3、发现已经改为 ,密码有效期改为30天了 ③强制指定用户在下次登录时更改密码

1、这句代码的意思就是 强制指定tx用户下次登陆时更改密码 2、tx用户原来的更改密码有效期 3、tx用户改完之后的更改密码有效期

大家注意看,后面的时间参数是不一样的!!! 4、重新登陆的时候,按照图片输入要输入的密码就可以了 然后在回车重新登录的时候输入刚才的密码 下次登录改密码的时候要把密码弄复杂点 我弄的是 Tx!@#¥%……&W* 如果要取消强制登陆,直接进入vi编辑器直接更改成原来的参数

1.1.3、命令历史限制

    减少记录的命令条数 注销时自动清空命令历史

修改历史命令数量的限制

方法一:

1、进入vi /etc/profile 里面直接改里面的参数,从而达到修改历史命令数量的限制

2、按 shift+:然后输入 /HIST 然后回车,会跳到这个地方,然后手动修改一下参数,修改成70条 3、刷新一下 4、重启一下 5、然后查看一下历史命令,修改成功

方法二:

1、进入vi /etc/profile 里面

2、在最后一行直接输入这句话,这次我们改成最多只能60条 3、这条命令刷新一下 4、重启虚拟机 5、查看历史命令,只有60条命令,试验成功

1.1.4、终端自动注销

    闲置600秒后自动注销 注意,注销的时候必须是闲置的时候!!!不能动
[root@localhost ~]# vi /etc/profile
HISTSIZE=200
[root@localhost ~]# vi ~/.bash_ logout
history -C
clear

①针对所有用户的注销

1、进入vi编辑器后,在最后一行输入这句话,100秒后注销 2、退出编辑器,然后刷新下 3、账户注销了

②针对单个用户修改注销时间

1、修改时间为20S 2、刷新一下 3、账户注销了

二、系统引导和登录控制

2.1、使用su命令切换用户

2.1.1、用途和用法

■用途及用法

    用途: Substitute User, 切换用户 格式: su - 目标用户

■密码验证

    root→任意用户,不验证密码 普通用户>其他用户,验证目标用户的密码

2.1.2、限制使用su命令的用户

■限制使用su命令的用户

    将允许使用su命令的用户加入wheel组,在wheel组内的用户才可以使用su切换用户命令 启用pam_wheel认证模块

■查看su操作记录

    安全日志文件:/var/log/secure

限制使用su命令的用户实验

1、把 tx 用户加入 wheel 组

2、查看是否把 tx 用户放进 wheel 组

3、tx 用户在 wheel 组

4、进入 vi /etc/pam.d/su

5、把框出来的行前面的#号删掉 6、进入 vi /etc/login.defs 7、在末行输入这句话 8、查看一下 cat /etc/group ,tx 用户 在 wheel 组 9、这是我们登录 tx 用户然后切换为 root用户可以切换,因为已经把 tx 用户放入 wheel组了

10、但是 tx1 用户却不能切换为 root 用户,因为 tx1 用户没有放进 wheel 组

三、Liunx中的PAM安全认证

3.1、su命令的安全隐患

    su命令的安全隐患 默认情况下,任何用户都允许使用su命令,从而恶意用户有机会反复尝试其他用户(如root)的登录密码,带来安全风险 为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换 PAM(Pluggable Authentication Modules)可拔插式认证模块,它是一种高效而且灵活便利的用户级别的认证方式,也是当前Linux服务器普遍使用的认证方式

3.2、PAM认证原理

    PAM认证一般遵循的顺序:Service(服务)>PAM(配置文件)>pam_*.so PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证 不同的应用程序所对应的PAM模块也是不同的 .so 为结尾的就是模块文件

3.3、PAM认证的构成

    查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d,然后管道符号检索想要查询的程序;例如查看su是否支持PAM模块认证 ls /etc/pam.d | grep su 查看su的PAM配置文件:cat /etc/pam.d/su 每一行都是独立的认证过程 每一行可以区分为三个字段 认证类型 控制类型 PAM模块及其参数

3.4、PAM安全认证流程

    控制类型也可以乘坐Control Flags,用于PAM验证类型的返回结果 1.required验证失败时仍然继续,但返回Fail 2.requisite验证失败则立即结束整个验证过程,返回fail(最重要的一步) 3.sufficient验证成功则立即返回,不再继续,否则忽略结果并继续 4.optional不用于验证,只显示信息(通常用session类型)

四 、使用sudo机制提升权限

4.1、su命令的缺点

    默认情况下,任何用户都允许使用su命令,从而恶意用户有机会反复尝试其他用户(如root)的登录密码,带来安全风险

4.2、sudo命令的用途及用法

    用途:以其他用户身份(如root)执行授权的命令 用法:sudo 授权命令

4.3、配置sudo授权

    visudo命令 或者 vim /etc/sudoers 记录格式: 用户 主机名列表 = 命令程序列表
root@localhost log]# visudo
......
用户	主机名列表 = 命令程序列表
%wheel	ALL = NOPASSWD:ALL
jerry	localhost = /sbin/ifconfig
syrianer	localhost = /sbin/*,!/sbin/ifconfig,!/sbin/route
可以使用通配符号*和取反符号!
Cmnd_Alias	PKGTOOLS = /bin/rpm,/usr/bin/yum
mike	localhost = PKGTOOLS

4.4、查看sudo操作记录

■查看sudo操作记录

    需启用Defaults logfile 配置 默认日志文件: /var/log/sudo

■查询授权的sudo操作

    sudo -|

使用sudo机制提升权限实验

1、先在tx用户上测试,先输入(ifconfig ens33:1 192.168.10.10)创建网卡; 发现是不允许操作的,因为没有权限

2、需要在root用户visudo 或者/etc/sudoers都可以进配置文件添加提权用户;

3、配置文件末行加入你想要提权的用户;(KGC是主机名)

tx KGC=/sbin/*,!/sbin/reboot (tx用户在KGC主机下执行/sbin下所有命令,除了reboot)

4、再去tx用户上再去(sudo ifconfig ens33:1 192.168.10.10)创建网卡那条命令,发现是可以做操作的权限已经有了

5、ifconfig 查看一下是不是创建成功

五、开关机安全控制

5.1、调整BIOS引导设置

    将第一引导设备设为当前系统所在硬盘 禁止从其他设备(光盘、U盘、网络)引导系统 将安全级别设为isetup,并设置管理员密码 备注:禁止从其他设备引导系统操作,感觉若是出现忘记root密码就可能无法从光驱去修改,所以还是谨慎操作

调整BIOS引导设置实操

虚拟机重启之后,按F2进入BIOS

设置进入BIOS的密码,设置完之后确认

设置开机就要输入密码

F10保存退出!

5.2、GRUB限制

    使用grub2-mkpasswd-pbkdf2生成密钥 修改/etc/grub.d/00_header文件中,添加密码记录 生成新的grub.cfg配置文件

5.3、终端登录安全控制

5.3.1、限制root只在安全终端登录

■限制root只在安全终端登录

    安全终端配置: /etc/securetty
[root@localhost ~]# vi letc/securetty
......
#tty5    ## 禁止root用户从终端tty5,tty6登录
#tty6

限制root只在安全终端登录实验:

1、先在虚拟机终端里面 init 3切换字符界面,然后登陆进去

2、who 查看一下当前用户登陆的终端

3、打开 vi /etc/securetty,在tty2前加上#号,然后wq保存退出

4、记住当前我们是在tty1终端里面,然后按ctrl+alt+F2切换成tty2终端。 进tty2终端后,正常输入root用户和密码,应该是进不去的。 因为刚才我们已经把终端tty2给关闭了。 意思就是禁止 root 用户从终端tty2进入

注意:如果我们此时在tty1终端,然后在进入vi /etc/securetty把tty1终端给关掉,是没有用的,因为我们当时已经在tty1终端里面了,所以是没有效果的。 ctrl+alt+F1—9 是切换终端用的(在字符界面使用)

5.3.2、禁止普通用户登录

■禁止普通用户登录

    建立/etc/nologin文件 删除nologin文件或重启后即恢复正常
[root@localhost ~]# touch /etc/nologin    ## 禁止普通用户登录
[root@localhost ~]# rm -rf /etc/nologin    ## 取消上述登录限制

禁止普通用户登录实验:

当服务器正在进行备份或调试等维护工作时,可能不希望在有新的用户登陆系统。这时候,只需要间的建立 /etc/nologin文件即可。login程序会检查 /etc/nologin 文件是否存在,如果存再则拒绝普通用户登录系统(root用户不受限制)。这里我们做个实验验证一下。

1、先创建并进入touch /etc/nologin文件里面

2、这时候我们在登录普通用户试验一下看是否可以登录成功

3、登陆失败! 4、当我们在 vi /etc/nologin 里面输入别的字符,当其他用户(除root用户)在登陆自己的用户时就会显示我们刚才在 vi /etc/nologin里面输入的字符,我们这里验证一下。

①我们先进入 vi /etc/nologin ,在里面输入 Hello World,并 wq 保存退出

②当我们登录 tx 用户时,虽然登录不上,但是显示了刚才在 vi /etc/nologin里面输入的字符 Hello World

取消登录限制:

  1. rm -rf /etc/nologin 就是把这个文件删除
  1. 删除 /etc/nologin 文件之后,其他的用户又可以登录了

六、系统弱口令检测

6.1、Joth the Ripper,简称为JR

    款密码分析工具,支持字典式的暴力破解 通过对shadow文件的口令分析,可以检测密码强度 官方网站: http://www.openwall.com/john/

6.2、安装JR工具

    安装方法 make clean系统类型 主程序文件为john

6.3、检测弱口令账号

    获得Linux/Unix服务器的shadow文件 执行john程序,将shadow文件作为参数

6.4、密码文件的暴力破解

    准备好密码字典文件,默认为password.lst 执行john程序,结合–wordlist=字典文件

6.5、弱口令自定义字典破解实验

1、把软件包放入 /opt目录里

2、进入 /opt目录

3、用tar软件包解压这个压缩包

4、进入 john-1.8.0/

5、ll 查看一下解压过后软件包的内容

6、回到上一层为了进入run/目录

7、进入run/并查看下里面有这个文件 8、把/etc/shadow复制到/root/shadow.lst(这时候没有shadow.lst)

9、进入 /root目录查看下shadow.lst文件是否创建成功 10、创建passwd.lst文件并打开,在里面输入root的密码是Tx123,然后随便输入几个其他的密码

11、进入 /opt目录看下文件是否依然还在

12、输入如下代码,就可以查出root用户的密码和tx用户的密码。

注意!!! 输入 vi john.opt会查看刚才root和tx用户密码的密文

这时候退出来在破解密码,就不能在进行破解了,提示已经破解过了

弱口令穷举破解实验: 1、进入之后,按 100dd,就会把下面的密文密码一次性清除了 2、这是已经把密文密码清除了

3、输入如下代码就可以进行暴力破解了

七、网络端口扫描

7.1、NMAP的扫描

    nmap [扫描类型] [选项] <扫描目标…

7.2、NMAP的扫描

    -sS、-sT、 -sF、 -sU、-sP、-PO

7.3、端口扫描实验

1、进行挂载 2、安装nmap扫描工具

3、查看本机开了多少端口(127.0.0.1是本机的回环口)

4、扫描本机的UDP端口 5、查看扫描20.0.0.0/24字段的FTP服务(21是FTP端口号) 6、查看扫描20.0.0.0/24段存活哪些主机(能ping通);-sP类似于ping检测,快速判断目标主机是否存活,不做其他扫描 7、查看20.0.0.0—200主机是否开启文件共享

经验分享 程序员 微信小程序 职场和发展