Linux--系统安全及应用(账号安全控制+系统引导和登录控制+弱口令检测+端口检查)

前言

作为一种开放源代码的操作系统,Linux服务器以其安全,高效和稳定的显著优势得以广泛应用
可以从账号安全控制,系统引导和登录控制的角度控制Linux系统的安全优化
还可以使用基于Linux系统环境的弱口令检测,网络扫描等安全工具,查找隐患,及时采取有针对性的防护措施

一、账号安全控制

1.1账号安全基本措施

1.1.1系统账号清理

将非登录用户的Shell设为/sbin/nologin

在Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而产生的其他大量账号

除了root之外,其他大量账号只是用来维护系统运作,启动或保持服务进程,一般是不允许登录的,也称为非登录用户

常见的非登录用户包括bin,daemon,adm,lp,mail,nobody,apache,mysql,dbus,ftp,gdm,haldaemon等

为了确保系统安全,这些用户的登录shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动
在这里插入图片描述

  • 锁定长期不使用的账号

对于长期不用的用户账号,若无法确定是否删除,可以暂时将其锁定,(passwd,usermod命令都可以用来锁定和解锁账号)

[root@localhost ~]# usermod -L tom1                                        ##锁定tom1用户密码
[root@localhost ~]# passwd -S tom1                                         ##查看tom1用户密码状态
tom1 LK 2020-06-22 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U tom1                                        ##解锁tom1用户密码
  • 删除无用的账号

在非登录用户中,还有一部分是很少用到的,如news,uucp,games,gopher等,这些用户可视为冗余账号,可以直接删除
此外,还有一些随着应用程序安装的用户账号,若程序卸载以后未能自动删除,需要人为手动删除

  • 锁定账号文件passwd,shadow

如果服务器中的用户账号已经固定,不在进行更改,还可以采取锁定账号配置文件的方法
使用chattr命令,分别结合“+i”“-i”选项来锁定,解锁文件,使用lsattr命令可以查看文件锁定情况

[root@localhost ~]# chattr +i /etc/passwd /etc/shadow                  ##锁定passwd/shadow文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow                     ##查看passwd/shadow文件是否锁定
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# useradd tom3                                       ##尝试添加tom3用户
useradd:无法打开 /etc/passwd                                           ##无法添加
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow                  ##解锁passwd/shadow文件
[root@localhost ~]# useradd tom3                                       ##可以创建用户

1.1.2密码安全控制

  • 设置密码有效期

在不安全的网络环境中,为了降低密码被猜出或者被暴力破解的风险,用户应养成定期修改密码的习惯,避免长期使用同一个密码
管理员可以在服务器端限制用户密码的最大有效天数
对于密码已经过期的用户,登录时将被要求重新设置密码,否则拒绝登录

对于未创建的用户,使用此命令修改配置文件
在这里插入图片描述
对于已创建的用户,用这条命令

[root@localhost ~]# chage -M 30 tom2
  • 要求用户下次登录时修改密码
    在某些情况下会要求用户初次登录的时候必须更改密码
[root@localhost ~]# chage -d 0 tom1

重新登录后,必须更改密码((重设的密码有密码复杂性要求,例如不可是连续的数字,连续的字母等))
在这里插入图片描述

1.1.3命令历史,自动注销

  • 命令历史限制
    减少记录的命令条数:bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISTSIZE变量值,可以影响系统中 的所有用户
例如:设置最多只记录200条历史命令
[root@localhost ~]# vi /etc/profile
将其中的HISTSIZE=1000,修改为HISTSIZE=200
[root@localhost ~]# source /etc/profile           ##使用命令source /etc/profile或者换重启使之生效

注销时自动清空命令历史:修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。即:当用户注销(退出已登录的bash环境)时,所记录的历史命令将自动清空

[root@localhost ~]# vi .bash_logout 
#~/.bash_logout
rm -rf .bash_history                               ##删除此文件
history -c                                         ##清除历史命令
clear
  • 终端自动注销
    bash终端环境中,可以设置一个闲置超时时间,当超过指定时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置时间有变量TMOUT来控制,默认单位为秒
[root@localhost ~]# vi /etc/profile                ##适用于新登录用户
export TMOUT=20                                    ##将闲置时间设为20S
[root@localhost ~]# source /etc/profile            ##使设置生效
[root@localhost ~]# export TMOUT=30                ##对当前用户生效

1.2用户切换与提权

  • 大多数Linux服务器并不建议用户直接以root用户进行登录
    一方面可以大大减少因误操作而导致的破坏
    另一方面也降低了特权密码在不安全的网络中被泄露的风险
  • su ,sudo 两种命令
    su命令主要用来切换用户
    sudo命令用来提升执行权限

1.2.1su 命令 -切换用户

  • 使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限
    切换时需要对目标用户的密码进行验证(从root用户切换为其他用户不需要)
    在这里插入图片描述
  • 限制使用su命令的用户

将允许使用su命令的用户加入wheel组

[root@localhost ~]# id tom1                                  ##查看tom1的用户信息
uid=1002(tom1) gid=1002(tom1) 组=1002(tom1)
[root@localhost ~]# gpasswd -a tom1 wheel                    ##将tom1加入wheel组
正在将用户“tom1”加入到“wheel”组中
[root@localhost ~]# id tom1
uid=1002(tom1) gid=1002(tom1) 组=1002(tom1),10(wheel)
[root@localhost ~]# vi /etc/pam.d/su                         ##编辑配置文件
...
auth            required        pam_wheel.so use_uid         ##将此行行首的#号删除
[root@localhost ~]# su - tom2                                ##切换到tom2用户,此未加入到wheel组中
上一次登录:一 6月 22 11:33:49 CST 2020tty3 上
[tom2@localhost ~]$ su - tom1                                ##无法使用su命令
密码:
su: 拒绝权限
[tom2@localhost ~]$ exit                                     ##退出
[root@localhost ~]# su - tom1                                ##切换到tom1用户
[tom1@localhost ~]$ su - root                                ##tom1可以使用su命令
密码:
上一次登录:一 6月 22 17:33:34 CST 2020pts/0 上

1.3Linux中的PAM安全认证

1.3.1su命令的安全隐患

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

为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换

PAM(Pluggable Authentication Modules)可插拔式认证模块
●是一种高效而且灵活便利的用户级别的认证方式
●也是当前Linux服务器普遍使用的认证方式

1.3.2PAM认证原理

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

1.3.3PAM安全认证流程

在这里插入图片描述

  • 控制类型也称做Control Flags,用于PAM验证类型的返回结果

1.required验证失败时仍然继续,但返回Fail
2. requisite验证失败则立即结束整个验证过程,返回Fail
3. sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
4. optional不用于验证,只显示信息(通常用于session类型)

1.4使用sudo机制提升权限

1.4.1su命令的缺点

用过su命令可以非常方便的切换为另一个用户,但前提条件是必须知道目标用户的登录密码
对于生产环境中的Linux服务器,每多一个人知道特权密码,其安全风险也就增加一分

1.4.2sudo命令的用途及用法

sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码
语法格式:sudo [参数]

1.4.3配置sudo授权

visudo 或者 vi /etc/sudoers :sudo机制的配置文件为/etc/sudoers,文件的默认权限是440,需要使用专门的visudo工具进行编辑。若使用vi编辑,保存时必须执行“:w!”命令强制操作,否则系统将提示为只读文件而拒绝保存

[root@localhost ~]# visudo
...
## Same thing without a password
tom1 localhost=/sbin/ifconfig                                  ##tom1在本地主机拥有ifconfig权限
%wheel  ALL=(ALL)       NOPASSWD: ALL
[root@localhost ~]# su - tom2                                  ##我们先切换到tom2用户
[tom2@localhost ~]$ sudo ifconfig ens33 11.11.11.11            ##尝试更改IP地址
[sudo] tom2 的密码:                              
tom2 不在 sudoers 文件中。此事将被报告。                         ##无法修改IP地址
[tom2@localhost ~]$ exit                                       ##登出
[root@localhost ~]# su - tom1                                  ##切换到tom1用户
[tom1@localhost ~]$ sudo ifconfig ens33:2 11.11.11.11          ##修改网卡地址
[sudo] tom1 的密码:
[tom1@localhost ~]$ ifconfig                                   ##修改成功
...

在这里插入图片描述

[root@localhost ~]# visudo
tom1 localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route     ##tom1用户拥有/sbin下所有权限,除了/sbin/ifconfig和/sbin/route 
*:通配符号
!:取反符号
 %:代表组

二、系统引导和登录控制

2.1开关机安全控制

2.1.1调整BIOS引导设置

将第一引导设备设为当前系统所在硬盘
禁止从其他设备(光盘,U盘,网络)引导系统
将安全级别设为setup,并设置管理员密码

2.1.2GRUB限制

使用grub2-setpassword生成秘钥

[root@localhost ~]# grub2-setpassword                                   ##生成grub2菜单密码
Enter password: 
Confirm password: 
[root@localhost ~]# cat /boot/grub2/user.cfg                            ##查看密码是否添加
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.C3428AF0D7A62E00D540E2C8F9014F64CE6CDAD3632BD5B1D388AA09F6EE038B9494BD1E5B98AA7C7E97BC4936BDF34D8B08158E04009461BB4807BA13953D5D.DBAE85EFE16710D093B543E210F1636880957802C82141ECCB688E5D021B46DFA42778BDAF4E72C63BFC25427B78EE28BA92917A800B444556DA4D8968E1035E
[root@localhost ~]# reboot                                              ##重新启动

在grub引导界面按e进去,发现需要输入用户名密码
在这里插入图片描述
在这里插入图片描述

2.2终端登录安全控制

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

[root@localhost ~]# vi /etc/securetty 

在这里插入图片描述
我们切换到2或3终端发现root用户无法登陆
在这里插入图片描述

2.2.2禁止普通用户登录

建立/etc/nologin文件
删除nologin文件重启后即恢复正常

[root@localhost ~]# touch /etc/nologin      ##创建此文件后其他用户已经无法登陆
[root@localhost ~]# rm -rf /etc/nologin     ##删除此文件即可取消限制

三、弱口令检测

3.1Joth the Ripper,简称为 JR

一款密码分析工具,支持字典式的暴力破解
通过对shadow文件的口令分析,可以检测密码强度

3.2通过john工具查看自己的密码

使用xftp将John软件放到opt目录,进行解压
在这里插入图片描述

[root@localhost opt]# tar zxvf john-1.8.0.tar.gz                   ##进行解压
[root@localhost opt]# cd john-1.8.0/                               ##进入解压后的目录
[root@localhost john-1.8.0]# cd src/                               ##进入src目录
[root@localhost src]# make clean linux-x86-64                      ##进行编译
[root@localhost src]# cd /opt/john-1.8.0
[root@localhost john-1.8.0]# cd run                                ##进入run目录
[root@localhost run]# cp /etc/shadow /root/shadow.txt              ##拷贝shadow文件到/root/shadow.txt    
[root@localhost run]# ./john /root/shadow.txt                      ##执行暴力破解
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (root)                                            ##破解成功
123456           (tom2)
2g 0:00:01:42 17% 2/3 0.01947g/s 355.0p/s 356.9c/s 356.9C/s kevin2..rocky2
Use the "--show" option to display all of the cracked passwords reliably
Session aborted 

四、端口扫描

4.1NMAP

  • 一款强大的网络扫描,安全检测工具
    可以探测局域网中那些主机在线,或者某台主机中开了那些端口
  • NMAP的扫描语法
    nmap [扫描类型] [选项] <扫描目标…>

其中,扫描目标可以是主机名、IP地址或网络地址等,多个目标以空格分隔;常用的选项有“-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检测,快速判断目标主机是否存活,不做其他扫描。
  • -PO,跳过ping检测:这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。
[root@localhost run]# nmap -sP 192.168.179.100-200                   ##查看此网段内有哪些主机在线
Starting Nmap 6.40 ( http://nmap.org ) at 2020-06-22 19:48 CST
Nmap scan report for 192.168.179.144
Host is up.
Nmap done: 101 IP addresses (1 host up) scanned in 4.12 seconds

[root@localhost run]# nmap -sT 192.168.179.144                       ##查看主机192.168.179.144开了哪些TCP端口
Starting Nmap 6.40 ( http://nmap.org ) at 2020-06-22 19:51 CST
Nmap scan report for 192.168.179.144
Host is up (0.0013s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.14 seconds

猜你喜欢

转载自blog.csdn.net/weixin_47153988/article/details/106901667