系统安全及应用(2)

199 阅读7分钟

使用sudo机制提升权限

su命令的缺点:

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

sudo命令的用途及用法

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

用法:sudo 授权命令

配置sudo权限

visudo或vim /etc/sudoers(要强制保存“wq!”)

语法格式:

用户名 主机=命令列表(多条命令时使用,号间隔,支持使用* !等通配符,命令前面加NOPASSWD:可以不需要密码验证)

用户 主机名=(用户) 命令列表

用户直接授权指定的用户名,或采用“&组名”的形式(授权给一个组的所有用户)
主机名使用此规则的主机名,没配置过主机名时可用localhost,有配过的主机名用实际的主机名,ALL代表所有主机
(用户)用户以何种身份来执行命令,省略时以root用户的身份来运行命令
命令列表允许授权的用户通过sudo方式执行的特权命令,需填写命令的完整路径,多个命令之间以逗号","进行分隔。ALL则代表系统中的所有命令

举例:

Tom ALL=/sbin/ifconfig

Jerry localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff

#通配符“*"表示所有、取反符号“!”表示排除;

 
%wheel ALL=NOPASSWD: ALL

#表示whee1组成员无需验证登录码即可使用sudo执行任何命令

Mike ALL=(root)NOPASSWD: /bin/kill, /usr/bin/killall

允许lisi用户以root用户的身份运行ifconfig命令

设置网卡192.168.46.100

先查询网卡位置

后进入配置sudo授权

进入最后一行,输入lisi ALL=/usr/sbin/ifconfig

然后强制保存退出

image.png  

image.png

sudo别名

别名有四种类型:

User_Alias(用户)

Runas_Alias(代表用户)

Host_Alias(登录主机)

Cmnd_Alias(命令)

例子操作过程:

sudo 命令  #第一次执行时需要认证密码,默认超时时长为5分钟。在此期间不在重复验证密码

image.png

image.png

image.png

查询用户拥有的su权限

sudo –l  ##可以查看当前用户获得哪些sudo权限

开关机安全控制

1.  调整BlOS引导设置

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

2.  GRUB限制

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

限制更改GRUR引导参数

通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。

可以为GRUB菜单设置一个登录码,只有提供正确的登录码才被允许修改引导参数。

image.png  

image.png

image.png

终端登录安全控制

限制root只在安全终端登录

  • 安全终端配置:/etc/securetty
  • tty1~ 6是文本型控制台,tty7 是X Window图形显示管理器 可以通过CtrI+Alt+F1 (F1-F7键) 切换到对应的登录控制台。

注:按ctrl+Alt+F1回到图形化界面

实际操作:

设置不允许root用户使用tty5和tty6终端登录

image.png

设置完成后,重启主机切换终端测试是否能登录

image.png

禁止普通用户登录

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

实操:

touch /etc/nologin  #禁止普通用户登录

rm -rf /etc/nologin #取消上述登录限制

1.  创建文件,进行测试

image.png

image.png

2.  删除文件之后,进行测试

image.png

image.png

系统弱口令检测(Joth the Ripper 检测JR)

John the Ripper是一款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解

1、JR概述

 Joth the Ripper,简称为 JR

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

2、安装JR工具

  • 安装方法

    make clean 系统类型

  • 主程序文件为john

3、 检测弱口令账号

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

4、 密码文件的暴力破解

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

5.操作步骤:

解压工具包

cd /opt

tar zxvf john-1.8.0.tar.gz

image.png

安装软件编译工具

yum install -y gcc gcc-c++ make

image.png

切换到src子目录

cd /opt/john-1.8.0/src

进行编译安装

make clean linux-x86-64

image.png

准备待破解的密码文件

cp /etc/shadow /opt/shadow.txt

image.png

#执行暴力破解

cd /opt/john-1.8.0/ run

./john shadow

image.png

查看已破解出的账户列表

./john --show /opt/ shadow.txt

使用密码字典文件

 > john.pot  ##清空已破解出的账户列表,以便重新分析

./john --wordlist=. /password.lst /opt/mm.txt

##使用指定的字典文件进行破解

网络端口扫描NMAP命令

NMAP

一款强大的网络扫描、安全 检测工具

官方网站:nmap.org/

CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm

格式

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

 

namp命令常用的选项和扫描类型

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

示例

分别查看本机开发的TCP端口、UDP端口

[root@localhost~]#nmap -sT 127.0.0.1 #查看本机开发的TCP端口

image.png

[root@localhost~]#nmap -sU 127.0.0.1 #查看本机开发的UDP端口

image.png

检测192.168.80.0/24网段有哪些主机提供HTTP服务

[root@localhost~]#nmap -p 80 192.168.46.0/24 #80HTTP默认端口号

image.png

检测192.168.80.0/24网段有哪些存活主机

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

image.png

查看网络连接情况:netstat

命令常用选项

常用选项作用
-a 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-n以数字的形式显示相关的主机地址、端口号等信息
-t查看TCP相关的信息
-u显示UDP协议相关的信息
-p显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)
-r显示路由表信息
-l显示处于监听状态的网络连接及端口信息

举例:

[root@localhost~]#netstat -natp #查看正在运行的使用TCP协议的网络状态信息

image.png

[root@localhost~]#netstat -naup #查看正在运行的使用UDP协议的网络状态信息

  image.png

获取socket(套接字)系统信息:ss

ss命令

查看系统的网络链接情况,获取socket统计信息

命令格式:

ss [选项]

选项:

常用命令介绍
-t显示 TCP 协议的 sockets
-u显示 UDP 协议的 sockets
-n不解析服务的名称,如 “22” 端口不会显示成 “ssh”
-l只显示处于监听状态的端口
-p显示监听端口的进程
-a显示所有端口和连接
-r把 IP 解释为域名,把端口号解释为协议名称