首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搞它!!!Linux系统安全及应用以弱口令检测

搞它!!!Linux系统安全及应用以弱口令检测

作者头像
不吃小白菜
发布2020-09-03 09:59:14
2.9K0
发布2020-09-03 09:59:14
举报

前言

作为一种开放源代码的操作系统,Linux服务器以其安全,高效和稳定的显著优势得以广泛应用 可以从账号安全控制,系统引导和登录控制的角度控制Linux系统的安全优化

1、账号安全基本措施

(1)系统账号清理

将非登录用户的Shell设为/sbin/nologin 锁定长期不使用的账号 'usermod -L ’ 删除无用的账号 ‘userdel -r’ 锁定账号文件passwd、shadow,用以控制用户(包括root)无法创建删除修改账户

[root@localhost ~]# grep "/sbin/nologin$"             查看不能登录的用户

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:lp:/var/spool/lpd:/sbin/nologin
...省略部分内容
[root@localhost ~]# grep "bash$" /etc/passwd	           查看当前可以登录的用户

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

[root@localhost ~]# passwd -l shang(或者 usermod -L shang	)	'#锁定用户shang'
锁定用户 shang的密码 。
passwd: 操作成功
[root@localhost ~]# usermod -U shang (或者 passwd -u shang)		'#解锁用户shang'
[root@localhost ~]# passwd -S shang	                                '#查看账号状态'
lisi PS 2019-11-14 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

删除无用的账号 在非登录用户中,还有一部分是很少用到的,如news,uucp,games,gopher等,这些用户可视为冗余账号,可以直接删除。此外,还有一些随着应用程序安装的用户账号,若程序卸载以后未能自动删除,需要人为手动删除。 锁定账号文件passwd,shadow 如果服务器中的用户账号已经固定,不在进行更改,还可以采取锁定账号配置文件的方法,使用chattr命令,分别结合“+i”“-i”选项来锁定,解锁文件,使用lsattr命令可以查看文件锁定情况

chattr命令基本格式
chattr +i [目标文件]     '锁定目标文件'
chattr -i [目标文件]     '解锁目标文件'
lsattr  [目标文件]       '查看目标文件'

例如
[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

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

[root@localhost ~]# chattr +i /etc/passwd /etc/shadow			'锁定目标文件'
[root@localhost ~]# id shang			'查看是否存在wangwu用户'
id: shang: no such user
[root@localhost ~]# useradd wangwu				'尝试添加wangwu用户'
useradd:无法打开 /etc/passwd		'提示无法添加,文件已被锁定'

2、密码安全控制

设置密码有效期 要求用户下次登陆时修改密码

[root@localhost ~]# vim /etc/login.defs	'进入默认配置文件'
......
PASS_MAX_DAYS   99999	'默认设置为99999天'

PASS_MAX_DAYS   30	'可以先修改为30天验证'

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

[root@localhost ~]# vi .bash_logout
history -c
clear
[root@localhost ~]# history 
source .bash_logout

或者
使用vi /etc/profile,将其中的history值改为0
但是将history值改为0后,↑无法显示刚刚输入的命令。
在这里插入图片描述
在这里插入图片描述

终端自动注销

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

[root@localhost ~]# vi /etc/profile		'适用于新登录的用户'
...中间省略内容
export TMOUT=20			'闲置时间设置为20s'
[root@localhost ~]# source /etc/profile		'使设置生效'
[root@localhost ~]# export TMOUT=20		'适用于当前用户'

2、用户切换与提权

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

[root@localhost /]# su - 目标用户
用法:
 su [选项] [-] [USER [参数]...]

将有效用户 id 和组 id 更改为 USER 的 id。
单个 - 视为 -l。如果未指定 USER,将假定为 root。

选项:
 -m, -p, --preserve-environment  不重置环境变量
 -g, --group <组>             指定主组
 -G, --supp-group <组>        指定一个辅助组

 -, -l, --login                  使 shell 成为登录 shell
 -c, --command <命令>            使用 -c 向 shell 传递一条命令
 --session-command <命令>        使用 -c 向 shell 传递一条命令
                                 而不创建新会话
 -f, --fast                      向shell 传递 -f 选项(csh 或 tcsh)
 -s, --shell <shell>             若 /etc/shells 允许,则运行 shell

 -h, --help     显示此帮助并退出
 -V, --version  输出版本信息并退出
[root@localhost ~]# su - shang		'从root切换到其他用户不需要输入密码'
[lisi@localhost ~]$ su - root		'从其他用户切换到root用户需要输入密码'
密码:			'输入用户root的密码'

将允许使用su命令的用户加入wheel组,在wheel组内的用户才可以使用su切换用户命令

[root@localhost ~]# id shang
uid=1000(shang) gid=1000(shang) 组=1000(shang)
[root@localhost ~]# cat /etc/group | grep wheel
wheel:x:10:  
[root@localhost ~]# cat /etc/gshadow | grep wheel
wheel:::
[root@localhost ~]# gpasswd -a shang wheel
正在将用户“shang”加入到“wheel”组中
[root@localhost ~]# id shang
uid=1000(shang) gid=1000(shang) 组=1000(shang),10(wheel)
[root@localhost ~]# cat /etc/group | grep wheel
wheel:x:10:shang
[root@localhost ~]# cat /etc/gshadow | grep wheel
wheel:::shang

启用pam_wheel认证模块

启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令
尝试进行切换时将会按照“拒绝权限”来处理,从而将切换用户的权限控制在最小范围内
/pam.d  服务模块目录
使用su命令切换用户的操作将会记录到安全日志/var/log/secure文件中,可以根据需要进行查看

[root@localhost ~]# su - shang		'之前添加了wangwu用户,但并未加入到wheel组中'
上一次登录:四 11月 14 16:39:40 CST 2019pts/0 上
[wangwu@localhost ~]$ su - zhen	'无法使用su命令'
密码:
su: 拒绝权限
[wangwu@localhost ~]$ su - zhen	'无法使用su命令'
密码:
su: 拒绝权限
[wangwu@localhost ~]$ exit		'返回root用户'
登出
[root@localhost ~]# su - zhen		'root切换到lisi用户不需要密码'
上一次登录:四 11月 14 16:39:17 CST 2019pts/0 上
[lisi@localhost ~]$ su -zhen		'lisi切换到wangwu用户'
密码:
上一次登录:四 11月 14 16:41:57 CST 2019pts/0 上
[wangwu@localhost ~]$ exit		'返回lisi'
登出
[lisi@localhost ~]$ su - root		'切换为root'
密码:
上一次登录:四 11月 14 16:41:35 CST 2019pts/0 上
[root@localhost ~]# 

3、Linux中的PAM安全认证

(1)su命令的安全隐患

默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户的登录密码,带来风险 借助pam_wheel认证模块,可以实现指定允许的用户使用su命令

(2)PAM认证原理

PAM(Pluggable Authentication Modules)可插拔式认证模块,它是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式 PAM认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so(.so 后缀代表模块文件) PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证 用户访问服务器的时候,服务器的某一个服务程序把用户的不同请求发送到PAM模块进行认证 不同的应用程序所对应的PAM模块也是不同的

(3)PAM认证的构成

查看某个程序是否支持PAM认证,可以用ls命令进行查看,例如查看su是否支持PAM模块认证

[root@localhost ~]# ls /etc/pam.d | grep su

查看su的PAM配置文件:cat /etc/pam.d/su

每一行都是一个独立的认证过程

每一行可以区分为三个字段(认证类型,控制类型,PAM模块及其参数)

(4)PAM安全认证流程

在这里插入图片描述
在这里插入图片描述

控制类型也可以称作Control Flags,用于PAM验证类型的返回结果

1.required验证失败时仍然继续,但返回Fail

2.requisite验证失败则立即结束整个验证过程,返回Fail

3.sufficient验证成功则立即返回,不在继续,否则忽略结果并继续

4.optional不用于验证,只显示信息(通常用于session(会话)类型)

4、使用sudo机制提升权限

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

(1) sudo命令的用途及用法

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

(3)配置sudo授权

visudo 或者 vi /etc/sudoers :sudo机制的配置文件为/etc/sudoers,文件的默认权限是440,需要使用专门的visudo工具进行编辑。若使用vi编辑,保存时必须执行“:w!”命令强制操作,否则系统将提示为只读文件而拒绝保存 配置文件/etc/sudoers中,授权记录的基本配置格式 用户 主机名列表 = 命令程序列表 命令程序列表是绝对列表

例如:

[root@localhost ~]# visudo
shang		localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route		'表示张三用户在本地主机拥有以下权限 (/sbin下的所有权限,除了/sbin/ifconfig,除了/sbin/route权限)'

*:通配符号
!:取反符号
 %:代表组
在这里插入图片描述
在这里插入图片描述

(4)sudo实验

我们现在用shang和lzhen这两个用户来做修改ip地址的sudo实验

[root@localhost ~]# id shang
uid=1002(shang) gid=1002(shang) 组=1002(shang
[root@localhost ~]# id zhen
uid=1001(zhen) gid=1001(zhen) 组=1001(zhen),10(wheel)
    
'1.我们先用lisi用户尝试修改IP地址'
[root@localhost ~]# su -zhen		'切换到zhen用户'
[lisi@localhost ~]$ ifconfig		'查看主机IP'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.197.141  netmask 255.255.255.0  broadcast 192.168.197.2
    ...省略部分信息
[lisi@localhost ~]$ sudo ifconfig ens33 12.12.12.12		'使用sudo命令修改IP地址'
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] zhen 的密码:

[zhen@localhost ~]$ ifconfig		'发现修改成功'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 12.12.12.12  netmask 255.0.0.0  broadcast 12.255.255.255
    ...此处省略部分信息

'2.我们用wangwu用户尝试修改IP地址'
[root@localhost ~]# su - shang
[shang@localhost ~]$ id shang
uid=1002(shang) gid=1002(shang) 组=1002(shang)
[shang@localhost ~]$ sudo ifconfig ens33 13.13.13.13

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] shang的密码:
shang不在 sudoers 文件中。此事将被报告。		'我们发现shang用户无法修改IP地址'
总结
[root@localhost ~]# id shang
uid=1002(shang) gid=1002(shang) 组=1002(shang)
[root@localhost ~]# id lisi
uid=1001(zhen) gid=1001(zhen) 组=1001(lisi),10(wheel)
'我们发现zhen用户在wheel组中,而shang用户不在'

[root@localhost ~]# visudo		'或者使用vi /etc/sudoers 命令进入sudo配置文件'
...此处省略部分信息
root    ALL=(ALL)       ALL		'发现root用户拥有所有权限'
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL		'发现wheel组中的用户也拥有所有权限'
...此处省略部分信息
'因此,在wheel组中的zhen用户拥有修改IP地址的权限'
' 不在wheel组中的shang用户没有权限修改IP地址'

‘实现没有权限的wnagwu用户修改IP地址的方法’ 1.将wangwu用户添加到wheel组中(方法简单,不赘述)’ 2.在sudo配置文件中给wangwu用户提权’

第二种方法步骤

[root@localhost ~]# which ifconfig		'查询ifconfig命令所在位置'
/usr/sbin/ifconfig
[root@localhost ~]# visudo		'修改sudo配置文件,将shang用户的ifconfig权限添加进去'
将这条命令添加进去
shang  localhost = /sbin/ifconfig		'用户shang的本地主机添加 /sbin/ifconfig 权限'
[root@localhost ~]# su - shang	'切换到shang用户'
上一次登录:四 11月 14 19:11:33 CST 2019pts/1 上
[shang@localhost ~]$ sudo ifconfig ens33 33.33.33.33		'修改ens33网卡IP地址'
[sudo] shang的密码:
[shang@localhost ~]$ ifconfig		'修改成功'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 33.33.33.33  netmask 255.0.0.0  broadcast 33.255.255.255
实验成功

5、弱口令检测、端口扫描

(1)弱口令检测—John the Ripper,简称JR

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

实验:

首先需要有一个弱口令包并挂载到系统中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)网络扫描— NMAP

  • 一款网络扫描、安全检测工具
  • 官方网站:http://nmap.org/
  • 可以从Centos镜像中安装nmap包
NMAP的扫描语法
nmap [扫描类型] [选项] <扫描目标…>

常用的扫描类型
-sP:ICMP扫描:类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-sT:TCP连接扫描:这是完整的TCP扫描方式,用来建立一个TCP连接, 如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sU: UDP扫描:探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
-sS: TCP SYN扫描(半开扫描):只向目标发出SYN数据包,如果收到 SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sF:TCP FIN扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST 数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的 TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-P0:跳过ping检测:这种方式认为所有的目标主机是存活的,当对方不响 应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。

实验:

检查是否有nmap包,安装nmap

1、针对本机进行扫描,检查开放了哪些常用的TCP端口、UDP端口
[root@localhost ~]# nmap -sT 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-15 11:50 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00035s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh               
25/tcp  open  smtp
80/tcp  open  http                 //安装httpd  打开80端口
111/tcp open  rpcbind
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
[root@localhost ~]# nmap -sU 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-15 11:50 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000046s latency).
Not shown: 997 closed ports
PORT     STATE         SERVICE
68/udp   open|filtered dhcpc
111/udp  open          rpcbind
5353/udp open|filtered zeroconf

Nmap done: 1 IP address (1 host up) scanned in 51.51 seconds
[root@localhost ~]# netstat -ntap |grep 80        //过滤查看80端口
tcp        0      0 192.168.17.129:38952    192.168.10.180:445      ESTABLISHED -                   
tcp6       0      0 :::80                   :::*                    LISTEN      52184/httpd   

在扫描结果中,STATE列若为open则表示端口为开启状态,为filtered表示可能被防火墙过滤,为closed表示端口为关闭状态

2、快速检测192.168.17.0/24网段中有哪些存活主机(能ping通)

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.17.129  netmask 255.255.255.0  broadcast 192.168.17.255
        …………省略部分内容
[root@localhost ~]# nmap -sP 192.168.17.0/24

[root@localhost ~]# nmap -sP 192.168.17.0/24

Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-15 12:07 CST
Nmap scan report for 192.168.17.1
Host is up (0.0010s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.17.2
Host is up (0.000048s latency).
MAC Address: 00:50:56:FF:5A:DB (VMware)
Nmap scan report for 192.168.17.128                  //另一台IP
Host is up (0.000098s latency).
MAC Address: 00:0C:29:70:C7:ED (VMware)
Nmap scan report for 192.168.17.254
Host is up (0.000066s latency).
MAC Address: 00:50:56:F2:13:2A (VMware)
Nmap scan report for 192.168.17.129                       //本机IP
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 1.88 seconds

[root@localhost ~]# ping 192.168.17.128          //ping 192.168.17.128
PING 192.168.17.128 (192.168.17.128) 56(84) bytes of data.
64 bytes from 192.168.17.128: icmp_seq=1 ttl=64 time=0.199 ms
64 bytes from 192.168.17.128: icmp_seq=2 ttl=64 time=0.193 ms
64 bytes from 192.168.17.128: icmp_seq=3 ttl=64 time=0.213 ms
^C
--- 192.168.17.128 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.193/0.201/0.213/0.018 ms

探测工具,查看对方是否在线,开了哪些tcp udp端口

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1、账号安全基本措施
    • (1)系统账号清理
      • 2、密码安全控制
      • 2、用户切换与提权
      • 3、Linux中的PAM安全认证
        • (1)su命令的安全隐患
          • (2)PAM认证原理
            • (3)PAM认证的构成
              • (4)PAM安全认证流程
              • 4、使用sudo机制提升权限
                • (1) sudo命令的用途及用法
                  • (3)配置sudo授权
                    • (4)sudo实验
                    • 5、弱口令检测、端口扫描
                      • (1)弱口令检测—John the Ripper,简称JR
                        • (2)网络扫描— NMAP
                        相关产品与服务
                        访问管理
                        访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档