Linux——系统安全及应用

目录

一、账号安全控制

1、基本安全措施

(1)系统账号清理

(2)密码安全控制

(3)命令历史、自动注销

二、系统引导和登录控制

1、开关机安全控制

2、终端及登录控制

三、弱口令检测,端口扫描

1、弱口令检测

2、网络扫描------NMAP

一、账号安全控制

随着信息技术的快速发展,系统安全成为我们日常生活和工作中不可或缺的一部分。主要包括了账号安全控制、系统引导和登录控制、弱口令检测以及端口扫描等多个方面,为我们提供了一系列实用的安全措施和策略。

1、基本安全措施

(1)系统账号清理

在系统中,除了用户手动创造的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户 root 之外,其他大量账号只是用来维护系统运作,启动或保持服务进程,一般是不允许登录的,因此也称为非登录用户账号 。如下所示:

复制代码
[root@localhost ~]# grep "/sbin/nologin$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:1p:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin . //省略部分内容

各种非登录用户账号中,还有相当一部分是很少用到的,如 games。这些用户账号可以视为冗余账号,直接删除即可。除此之外,还有一些随应用程序安装的用户账号,若卸载程序以后未能自动删除,则需要管理员手动进行清理。

对于 Linux 服务器中长期不用的用户账号,若无法确定是否应该删除,可以暂时将其锁定。例如,若要锁定、解锁名为 zhangsan 的用户账号,可以执行以下操作(passwd、usermod 命令都可用来锁定。解锁账号)。

复制代码
[root@localhost ~]# usermod -L zhangsan //锁定账号
[root@localhost ~]# passwd -s zhangsan //查看账号状态
zhangsan LK 2017-08-240 99999 7 -1(密码已被锁定。)
[root@localhost ~]# usermod -U zhangsan //解锁账号
[root@localhost ~]# passwd S zhangsan
zhangsan ps 2017-08-24 0 99999 7 -1(密码已设置,使用 SHA512 算法。) 

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

复制代码
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow //锁定文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow //查看为锁定的状态
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow //解锁文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow //查看为解锁的状态
----------------/etc/passwd
----------------/etc/shadow

在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加、删除账号,也不能更改用户的密码、登录 She11、宿主目录等属性信息。

复制代码
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
[root@localhost ~]# useradd billgate
useradd:无法打开/etc/passwd

(2)密码安全控制

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

执行以下操作可将密码的有效期设为 30 天(chage 命令用于设置密码时限)

复制代码
[root@localhost ~]# wi /etc/login.defs... //省略部分内容
/适用于新建的用户
PASS MAX DAYS 38
[root@localhost ~]# chage -M 30 lisi //适用于已有的 lisi 用户

在某些特殊情况下,如要求批量创建的用户初次登录时必须自设密码,根据安全规划统一要求所有用户更新密码等,可以由管理员执行强制策略,以便用户在下次登录时必须更改密码。例如,执行以下操作可强制要求用户 zhangsan 下次登录时重设密码。

复制代码
[root@localhost ~]# chage -d 8 zhangsan
[root@localhost ~]#
Localhost login: zhangsan    //zhangsan 用户登录系统
password:
You are required to change your password immediately (root enforced)
Changing password for zhangsan.//强制修改 zhangsan 的密码
(current)UNIX password:
New password:
Retype new password:

(3)命令历史、自动注销

shell环境的命令历史机制为用户提供了极大的便利,但另一方而也给用户带来了潜在的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。

Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。

复制代码
[root@localhost ~]# vi /etc/profile //适用于新登录用户
...... //省略部分内容
HISTSIZE 200
[root@localhost ~]#export HISTSIZE=288 //适用于当前用户

除此之外,还可以修改用户宿主目录中的~/.bash_logout 文件,添加清空历史命令的操作语句。

这样,当用户退出已登录 Bash 环境以后,所记录的历史命令将自动清空。

复制代码
[root@localhost ~]# wi ~/.bash logout
history -c
clear

Bash 终端环境中,还可以设置一个闲置超时时间,当超过指定的时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置超时由变量 TMOUT 来控制,默认单位为秒(s)。

复制代码
[root@localhost ~]# vi /etc/profile //适用于新登录用户
... //省略部分内容
export TMOUT=300
[root@localhost ~]# export TMOUT=300 //适用于当前用户

需要注意的是,当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免设置 TMOUT 变量。必要时可以执行"unset TMOUT"命令取消 TMOUT 变量设置。

二、系统引导和登录控制

在互联网环境中,大部分服务器是通过远程登录的方式来进行管理的,而本地引导和终端登录过程往往容易被忽视,从而留下安全隐患。特别是当服务器所在的机房环境缺乏严格、安全的管控制度时,如何防止其他用户的非授权介入就成为必须重视的问题。

1、开关机安全控制

对于服务器主机,其物理环境的安全防护是非常重要的,不仅要保持机箱完好、机柜锁闭,还要严格控制机房的人员进出、硬件设备的现场接触等过程。在开关机安全控制方面,除了要做好物理安全防护以外,还要做好系统本身的一些安全措施。

(1)调整BIOS引导设置

  • 将第一优先引导设备(First Boot Device)设为当前系统所在磁盘;
  • 禁止从其他设备引导系统,对应的项为"Disabled";
  • 将BIOS的安全级别改为" setup ",并设置好管理密码,以防止未授权的修改。

(2)限制更改GRUB引导参数 在之前的课程中介绍过通过修改 GRUB 引导参数,对一些系统问题进行修复。从系统安全的角度来看,如果任何人都能够修改 GRUB 引导参数,对服务器本身显然是一个极大的威胁。为了加强对引导过程的安全控制,可以为 GRUB 菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

为 GRUB 菜单设置的密码建议采用"grub2-mkpasswd-pbkdf2"命令生成,表现为经过 PBKDF2 算法加密的字符串,安全性更好。生成密码后在/etc/grub.d/00 header 配置文件中,添加对应的用户。密码等配置,具体添加内容如下所示。

复制代码
[root@localhost ~]# grub2-mkpasswd-pbkdf2    //根据提示指定密码
输入密码:
重新输入口令:您的密码的 PBKDF2 哈希为 grub.pbkdf2.sha512.10000.008E820A9C9582F74076E747CF75F1E642C21CFA6B555DD2DF61D0A90DF98DAAFA8E83F3FC188BDE774C4B28ED158D2C274E9E4B24E91AFAE763F0FF6CE467AF,19BE9E44CB15605F64B80BFE6BA04428ABB29FF9CD1AA2D051DA20752600B898F8C49653DA24F58E39CBA1E5D798994BBB9A25B0B6EF12FFC9B26F17864C5871
[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@localhost ~]#t cp /etc/grub.d/00 header /etc/grub.d/00 header.bak
[root@localhost ~]# vim /etc/grub.d/0l users
#!/bin/sh -e
cat << EOF
set superusers="root"
export superusers
passwordpbkdf2rootgrub.pbkdf2.sha512.10000.008E820A9C9582F74076E747CF75F1E642C21CFA6B555DD2DF61D0A90DF98DAAFA8E83F3FC188BDE774C4B28ED158D2C274E9E4B24E91AFAE763F0FF6CE467AF,19BE9E44CB15605F64B80BFE6BA04428ABB29FF9CD1AA2D051DA20752600B898F8C49653DA24F58E39CBA1E5D798994BBB9A25B0B6EF12FFC9B26F17864C5871
EOF

使用 grub2-mkconfig 命令生成新的 grub.cfg 配置文件。

复制代码
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg    //生成新的 grub.cfg 文件
Generating    grub    configuration    file    ...    Found    liunx    image:
/boot/vmlinuz-3.10.0-514.e17.x86_64
Found initrd image: /boot/initramfs-3.10,0-514.e17.x86 64.img
Found linux image: /boot/vmlinuz-0-rescue-b15df1eb8205483f9f70c79709810abc
Found initrd image:/boot/initramfs-0-rescue-b15df1eb8205483f9f70c79709810abc.img
done

2、终端及登录控制

在Linux服务器中,默认开启了六个tty终端,允许任何用户进行本地登录。

(1)禁止普通用户登录

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

复制代码
[root@localhost ~]# touch /etc/nologin

此方法实际上是利用了 shutdown 延迟关机的限制机制,只建议在服务器维护期间临时使用。当手动删除/etc/nologin 文件或者重新启动主机以后,即可复正常。

三、弱口令检测,端口扫描

1、弱口令检测

在 Internet 环境中,过于简单的口令是服务器面临的最大风险。尽管大家都知道设置一个更长、更复杂的口令会更加安全,但总是会有一些用户因贪图方便而采用简单、易记的口令字串。对于任何一个承担着安全责任的管理员,及时找出这些弱口令账号是非常必要的,这样便于采取进一步的安全措施(如提醒用户重设更安全的口令)

John the Ripper 是一款开源的密码破解工具,能够在已知密文的情况下快速分析出明文的密码字串,支持 DES、MD5 等多种加密算法,而且允许使用密码字典(包含各种密码组合的列表文件)来进行暴力破解。通过使用 John the Ripper,可以检测 Linux/UNIX 系统用户账号的密码强度。

(1)下载并安装John the Ripper

以源码包 john-1.8.0.tar.gz 为例,解压后可看到三个子目录--doc、run、src,分别表示手册文档、运行程序、源码文件,除此之外还有一个链接的说明文件 README。其中,doc 目录下包括 README、INSTALL、EXAMPLES 等多个文档,提供了较全面的使用指导。步骤如下:

复制代码
[root@localhost ~]# tar zxf john-1.8.0.tar.gz
[root@localhost ~]# cd john-1.8.0
[root@localhost john-1.8.0]# ls -ld* drwxr-xr-x 2 root root 208 Sep 14 21:43 doc
lrwxrwxrwx 1 root root 10 May 29 2013 README ->dOC/README
drwxr-xr-x 2 root root 143 sep 14 21:43 run
drwxr-xr-x2 root root 4096 Sep 14 21:43 src
[root@localhost john-1.8.0]# ls doc/
CHANGES CONTACT CREDITS EXTERNAL INSTALL MODES README
CONFIG COPYING EXAMPLES FAQ LICENSE OPTIONS RULES

切换到 src 子目录并执行"make clean linux-x86-64"命令,即可执行编译过程。若单独执行 make命令,将列出可用的编译操作、支持的系统类型。编译完成以后,run 子目录下会生成一个名为 john 的可执行程序。

复制代码
[root@localhost john-1.8.0]# cd src/
[root@localhost src]# make clean linux-x86-64 ... //省略编译信息
[root@localhost src]#ls ../run/john //确认已生成可执行程序 john
../run/john

John the Ripper 不需要特别的安装操作,编译完成后的 run 子目录中包括可执行程序 john 及相关的配置文件、字典文件等,可以复制到任何位置使用。

(2)检测弱口令账号

在安装有 John the Ripper 的服务器中,可以直接对/etc/shadow 文件进行检测。对于其他 Linux服务器,可以对 shadow 文件进行复制,并传递给 john 程序进行检测。只需执行 run 目录下的 john 程序,将待检测的 shadow 文件作为命令行参数,就可以开始弱口令分析了。步骤如下:

复制代码
[root@localhost src]# cp /etc/shadow /root/shadow.txt    //准备待破解的密码文件[root@localhost src]#cd ../run
[root@localhost run]# ./john /root/shadow.txt     //执行暴力破解
Loaded 6 password hashes with 6 different salts (crypt, generic crypt(3)[?/64])
Remaining 4 password hashes with 4 different salts
Press 'g'or ctrl-c to abort, almost any other key for status
zhangsan(zhangsan)
nwod-b(b-down)
123456(kadmin)
a1b2c3(tsengyia)
iloveyou(lisi)... //按 Ctrl+C 组合键中止后续过程

在执行过程中,分析出来的弱口令账号将即时输出,第一列为密码字串,第二列的括号内为相应的用户名(如用户 zhangsan 的密码为"123456")。默认情况下,john 将针对常见的弱口令设置特点,尝试破解已识别的所有密文字串,如果检测的时间太长,可以按 Ctr1+C组合键强行终止。破解出的密码信息自动保存到 john.pot 文件中,可以结合"--show"选项进行查看。

复制代码
[root@localhost run]#./john--show /root/shadow.txt     //查看已破解出的账户列表kadmin:123456:15114:0:99999:7:::
zhangsan:zhangsan:15154:0:99999:7:::
tsengyia:a1b2c3:15154:0:99999:7:::
b-down:nwod-b:15146:0:99999:7:::
lisi:iloveyou:15154:0:99999:7:::
5 password hashes cracked,3 lef

(3)使用密码字典文件

对于密码的暴力破解,字典文件的选择很关键。只要字典文件足够完整,密码破解只是时间上的问题。

John the Ripper 默认提供的字典文件为 password.lst,其列出了 3000 多个常见的弱口令。如果有必要,用户可以在字典文件中添加更多的密码组合,也可以直接使用更加完整的其他字典文件。执行john 程序时,可以结合"--wordlist="选项来指定字典文件的位置,以便对指定的密码文件进行暴力分析。

复制代码
[root@localhost run]# :> john.pot    //清空已破解出的账户列表,以便重新分析
[root@localhost run]# ./john --wordlist=./password.lst /root/shadow.txt
Loaded 6 password hashes with 6 different salts (crypt, generic crypt(3)[?/64])
Press 'g'or ctrl-c to abort, almost any other key for status
123456(jerry)
123456 (kadmin)
a1b2c3(tsengyia)
iloveyou(lisi)
4g 0:00:00:28 100% 0.1412g/s 125.2p/s 270.8c/s 270.8C/s !@#$%..ssS
Use the "-show" option to display all of the cracked passwords reliably
Session completed

2、网络扫描------NMAP

NMAP 是一个强大的端口扫描类安全评测工具。NMAP 被设计为检测众多主机数量的巨大网络,支持 ping 扫描、多端口检测、0S 识别等多种技术。使用 NMAP 定期扫描内部网络,可以找出网络中不可控的应用服务,及时关闭不安全的服务,减小安全风险。

(1)安装NAMP软件

复制代码
[root@localhost ~]#dnf -y install nmap

(2)扫描语法及类型

NMAP的扫描程序位于/usr/bin/nmap目录下,基本命令格式如下:

复制代码
nmap [扫描类型] [选项] <扫描目标...>

其中,扫描目标可以是主机名、IP 地址或网络地址等,多个目标以空格分隔;常用的选项有"-p""-n"分别用来指定扫描的端口、禁用反向 DNS 解析(以加快扫描速度);扫描类型决定着检测的方式,也直接影响扫描的结果。

常用的几种扫描类型如下:

  • -SS,TCP SYN 扫描(半开扫描):只向目标发出 SN 数据包,如果收到 SYN/ACK 响应包就认为目标端口正在监听,并立即断开连接:否则认为目标端口并未开放。
  • -ST,TCP 连接扫描:这是完整的 TCP扫描方式,用来建立一个 TCP 连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
  • -SF,TCP FIN 扫描:开放的端口会忽略这种数据包,关闭的端口会回应 RST 数据包。许多防火墙只对 SYN 数据包进行简单过滤,而忽略了其他形式的 TCP 攻击包。这种类型的扫描可间接检测防火墙的健壮性。
  • -sU,UDP 扫描:探测目标主机提供哪些 UDP 服务,UDP 扫描的速度会比较慢。
  • -SP,ICMP 扫描:类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。
  • -P0,跳过 ping 检测:这种方式认为所有的目标主机是存活的,当对方不响应 ICMP 请求时,使用这种方式可以避免因无法 ping 通而放弃扫描。
相关推荐
九转苍翎6 分钟前
Java EE(20)——线程安全——ThreadLocal
安全·java-ee
小白iP代理10 分钟前
长效IP与短效IP:如何选择适合业务的代理类型
网络·tcp/ip·安全
学习溢出2 小时前
【网络安全】OWASP 十大漏洞
网络·安全·web安全·网络安全
AORO_BEIDOU3 小时前
北斗短报文终端与5G融合:构建空天地海一体化通信新生态
科技·5g·安全·智能手机·信息与通信
半升酒3 小时前
Day-1 漏洞攻击实战
安全·网络安全
浩浩测试一下4 小时前
信息收集之hack用的网络空间搜索引擎
android·网络·安全·web安全·搜索引擎·网络安全·安全架构
网易易盾4 小时前
AIGC产品如何平衡用户体验与内容安全?
安全·aigc·ux
tiegenZ4 小时前
C#接口开发异常:System.Web.HttpRequestValidationException
服务器·安全·c#
火绒终端安全管理系统4 小时前
教育行业网络安全:守护学校终端安全,筑牢教育行业网络安全防线!
网络·安全·web安全·网络安全·火绒安全