Linux系统安全及应用

一.账号安全控制

1.基本安全措施

1.1 系统账号的清理
1.1.1 将非登录用户的Shell类型设为 /sbin/nologin

在我们使用Linux系统时,除了用户创建的账号之外,还会产生系统或程序安装过程中产生的许多其他账号,除了超级用户root外,其他账号都是用来维护系统运作的,一般不允许登录,常见的非登录用户有bin、adm、mail、lp、nobody、ftp等。

usermod -s /sbin/nologin 用户名
1.1.2 锁定长期不使用的账号
[root@localhost ~]# usermod -L xyl    锁定用户账号方法一
[root@localhost ~]# passwd -l xyl     锁定用户账号方法二

[root@localhost ~]# usermod -U xyl    解锁用户账号方法一
[root@localhost ~]# passwd -u xyl     解锁用户账号方法二
1.1.3 删除无用的账号
[root@localhost ~]# userdel wangwu
[root@localhost ~]# userdel -r wangwu   //加上 -r  直接把家目录下的用户目录一起删除了
1.1.4 锁定账号文件passwd、shadow
[root@localhost ~]# chattr +i /etc/passwd  /etc/shadow   锁定文件,包括root也无法修改
[root@localhost ~]# chattr -i /etc/passwd  /etc/shadow   解锁文件
[root@localhost ~]# lsattr /etc/passwd  /etc/shadow      查看文件状态属性

小问题:

中病毒怎么办?

先ps top 命令查找到这个异常进程,通过进程pid号找到proc文件夹下exe 文件,找到文件的真是位置。

然后将他删除,如果不可以,自己建一个和病毒同名的文件,加上 chattr +i 锁定文件,就操作不了了!

1.2 密码安全控制
1.2.1 设置密码有效期
1.[root@localhost ~]# chage -M 20 wangwu     修改 wangwu 的密码期限为20天
                                            这种方法适合修改已经存在的用户


2.[root@localhost ~]# vim /etc/login.defs   这种适合以后添加新用户,
   
    PASS_MAX_DAYS   20      //密码有效期为20天
    PASS_MIN_DAYS   0
    PASS_MIN_LEN    5
    PASS_WARN_AGE   7

方法一:

方法二:

新建一个用户wangwu03,查看到他的密码有效期就是修改后的20天

1.2.2 要求用户下次登录时修改密码
[root@localhost ~]# chage -d 0 wangwu03  强制要求用户下次登陆时修改密码


变化的字符是   最后一次修改密码的时间
1.3 命令历史、自动注销
减少记录命令的条数:
1.[root@localhost ~]# vim /etc/profile  进入配置文件修改限制命令条数。适合新用户
   HISTSIZE=200     修改限制命令为200条,系统默认是1000条profile 
   [root@localhost ~]# source /etc/profile 刷新配置文件,使文件立即生效
 
2.[root@localhost ~]# export HISTSIZE=200  适用于当前用户
   [root@localhost ~]# source /etc/profile 
   [root@localhost ~]# source /etc/profile 刷新配置文件,使文件立即生效
   
   
   
3. 开机时自动清空命令:
 [root@localhost ~]# vim ~/.bashrc
     echo "" > ~/.bash_history

history -c 临时清掉历史命令

1.3.1 减少记录的命令条数

① 配置文件修改记录history命令的条数(默认1000)

② 适用于当前用户

1.3.2 注销时自动清空命令历史

也就是将命令写入配置文件,然后开机自动运行

1.3.3 终端用户自动注销
闲置600秒后自动注销:
[root@localhost ~]#vim .bash_profile  进入配置文件
    export TMOUT=60    //全局声明超过60秒闲置后自动注销终端
[root@localhost ~]# source .bash_profile   //刷新
[root@localhost ~]# echo $TMOUT      //查看自动注销时间
 
[root@localhost ~]# export TMOUT=600   
                              //如果不在配置文件输入这条命令,那么是对当前用户生效
​
[root@localhost ~]#vim .bash_profile 
  # export TMOUT=60           //注释掉这条命令,就不会自动注销了

① 进入配置文件修改

② 仅对当前用户生效

2.用户切换与提权

2.1 su - 切换用户
1.用途及用法
用途:Substitute User,切换用户
格式:su - 目标用户 (横杠" - "代表切换到目标用户的家目录)
​
root  ------------------> 任意用户,不验证密码
普通用户 ------------------> 其他用户,验证目标用户的密码
带 " - " 表示将使用目标用户的登录Shell环境
su  不加 -  不完全的切换
su   加 -   是完全的切换
​
2.查看 su 操作记录
安全日志文件:/var/log/secure
​
3.whoami确定当前用户是谁
​
4. 限制使用 su 命令的用户
将允许使用 su 命令的用户加入wheel组
gpasswd  -a wangwu wheel      //正在将wangwu加入到"wheel"组中

5. vim /etc/pam.d/su       //进入到su里面
   
auth            sufficient      pam_rootok.so    //注释掉这行,root 切用户也需要密码了

默认情况下,使用root切换不需要密码

auth           required        pam_wheel.so use_uid   //取消这行注释之后,不在这个组的用户不能使用 su 指令

 
pam_rootok.so    //root不需要密码
pam_wheel.so     //只有wheel组才可以切换

不在 wheel 组,不能使用 su 指令

修改完之后,不能使用 su

将wangwu03 加入到 wheel 组之后,su 指令又可以使用了

root 用户切换其他用户也需要密码

2.2 sudo 提升执行权限
sudo命令的用途及用法:
用途:以其他用户身份(如root)执行授权命令
用法:sudo  授权命令
1.
配置sudo授权
visudo      //自带语法检查功能(建议使用)
或者 vim  /etc/sudoers
记录格式:

root     ALL=(ALL)        ALL

解析:
root    哪个用户要使用命令
ALL     哪台主机
(ALL)   以谁的身份运行
ALL     所有命令

所有命令里面可以使用通配符" * "号任意值和" !"号进行取反操作。

visudo -c        //检查语法是否正确


%在前表示组
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL 
wheel组表示管理员组是比较特殊的一个组,在wheel组中的成员可以使用任何命令


2.
配置/etc/sudoers文件,可以授权用户较多的时使用,相当于设置了别名
​
 Host_Alias MYHOST= localhost,XXX  //主机名
 User_Alias USERS = wangwu01,wangwu02,lisi    //需要授权的用户   
 Cmnd_Alias MYCMD =/usr/bin/*    //授权
 USERS  MYHOST=    NOPASSWD : MYCMD       //授权格式
​
​
3.查看sudo操作记录
需启用Defaults logfile


配置默认日志文件:
visudo 进入编辑模式

添加以下内容:
Defaults logfile = "/data/sudo.log"

输入 visudo ,找到这一行,按照模板进行编辑

建议将root那一行注释掉

在命令行加上NOPASSWD: 就不再需要输入命令

使用通配符的注意事项

也就是后面只能出现一个文件,不能空格隔开。如果有空格隔开的文件,那个隔开的文件就差看不了!

② 配置/etc/sudoers文件,可以授权用户较多的时使用,相当于设置了别名

注意别名的格式:必须大写字母,数字可以使用但是不能放在开头!

③ 启用日志操作

3.PAM安全认证

  • su命令的安全隐患

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

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

3.1 什么是PAM?
  • PAM(Pluggable Authentication Modules)可插拔式认证模块

  • 是一种高效而且灵活便利的用户级别的认证方式;

  • 也是当前Linux服务器普遍使用的认证方式。

  • PAM提供了对所有服务进行认证的中央机制,适用于login,远程登陆,su等应用。

  • 系统管理员通过PAM配置文件来制定不同的应用程序的不同认证策略。

① PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_*.so

② PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d),最后调用认证文件(位于/lib64/security/)进行安全认证。

③ 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。

④ 如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/

ls /etc/pam.d/ | grep su

⑤ PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用。

3.3 基本认知

认知几个模块:

/usr/lib64/security 存放功能模块

/etc/pam.d 存放配置文件

/etc/security 复杂的配置文件

看看 /etc/pam.d 下面的sshd

当用户来访问某一程序的时候,如果这个启用了pam模块,会先去读取配置文件,然后按照配置文件调用模块,进行操作。

① 第一段 模块类型(type)
  • Auth 账号的认证和授权

  • Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)

  • Password 用户修改密码时密码复杂度检查机制等功能

  • Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等

  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

② 第二段 控制位 (control)

required 一票否决 如果失败 最后一定失败,但是会继续进行验证

requistite 一票否决 如果失败 会立即结束验证,反馈失败

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

optional 不用于验证,只显示信息,可选项

③ 第三段 代表PAM模块

默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。

同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

概述:

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

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

PAM 认证类型包括四种:

认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证。

帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等。

密码管理(password management):主要是用来修改用户的密码。

会话管理(session management):主要是提供对会话的管理和记账。

① shell类型 模块

功能:检查有效的shell

帮助: man 8 pam 模块名

如果不知道怎么使用

实例:

不允许使用/bin/csh的用户本地登录

模块: pam_shells.so 只允许 规定的shell类型通过, 是在/etc/shells 文件中存在的 类型通过

因为删掉了 /etc/shells 中的 /bin/csh,然后又给 su 命令添加了pam.shells认证,所以导致shell类型为 /bin/csh 的 lisi 用户无法使用 su 命令。

② securetty 模块

功能:只允许root用户在 /etc/securetty 列出的安全终端上登陆

关闭两边的防火墙和防护

远程登录对方机器,登陆成功!

③ pam_nologin.so 模块

功能:如果 /etc/nologin 文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示 /etc/nologin 文件内容,并拒绝登陆。

④ limit 模块

功能:控制进程占用资源,在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间等。

实例:

修改完之后,需要退出重新切换 lisi 用户,建议用 su - 用户名 ,完全切换

limits 一些建议设置

临时修改:

ulimit命令

ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。

ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。使用ulimit进行修改,立即生效。

ulimit只影响shell进程及其子进程,用户登出后失效。

可以在profile中加入ulimit的设置,变相的做到永久生效

-H 设置硬件资源限制.

-S 设置软件资源限制.

-a 显示当前所有的资源限制.

-c size:设置core文件的最大值.单位:blocks

-d size:设置数据段的最大值.单位:kbytes

-f size:设置创建文件的最大值.单位:blocks

-l size:设置在内存中锁定进程的最大值.单位:kbytes

-m size:设置可以使用的常驻内存的最大值.单位:kbytes

-n size:设置内核可以同时打开的文件描述符的最大值.单位:n

-p size:设置管道缓冲区的最大值.单位:kbytes

-s size:设置堆栈的最大值.单位:kbytes

-t size:设置CPU使用时间的最大上限.单位:seconds

-u size:最大用户进程数

-v size:设置虚拟内存的最大值.单位:kbytes

unlimited 是一个特殊值,用于表示不限制

④ 压力测试:

如果 ab 命令不可用,就请先安装 httpd-tools ,然后开启 httpd 服务

测的是同一时间 192.168.44.20 这个服务器可以接待多少次的访问

二.系统引导和登录控制

1.开关机安全控制

1.1 调整 BIOS 引导设置原则
  • 将第一引导设备设为当前系统所在硬盘;

  • 禁止从其他设备(光盘、 U盘、网络)引导系统;

  • 将安全级别设为setup,并设置管理员密码。

    禁用重启热键:Ctrl+Alt+Delete 避免因用户误操作重启

1.2 GRUB 菜单设置
  • 未经授权禁止修改启动参数

  • 未经授权禁止进入指定系统

1.3 GRUB限制的实现
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。



法一:
1.  使用grub2-mkpasswd-pbkdf2生成密钥并复制,然后备份两个配置文件。 
2.  修改/etc/grub.d/00_ header文件中, 添加密码记录,并存并退出 

太复杂
​
法二:
直接设置grub2---setpasswd 设置grub密码
生成新的grub.cfg文件,然后重启系统

验证结果
方法一:直接设置修改密码

方法二:太复杂(不建议使用)

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

1.弱口令检测 (暴力破解)

  • 一款密码分析工具,支持字典式的暴力破解;

  • 通过对shadow文件的口令分析,可以检测密码强度;

实例:

  1. 把下载好的安装包用过rz命令下到目录opy下(sz可以把linux系统中的文件传到自己的windows系统中):

[root@localhost ~]#cd /opt

[root@localhost ~]#rz

[root@localhost opt]#ls

john-1.8.0.tar.gz

直接把压缩包拖进即可

  1. 解压

[root@localhost opt]#tar zxvf john-1.8.0.tar.gz

  1. 安装软件编译工具

[root@localhost src]#yum install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel -y

  1. 进行编译安装

[root@localhost src]#make clean linux-x86-64

  1. 准备待破解的密码文件

[root@localhost src]#cd .. 切换至上级目录

[root@localhost src]#cp /etc/shadow /opt/shadow.txt 准备密码文件

  1. 执行暴力破解

[root@localhost src]#cd /opt/john-1.8.0/run/

[root@localhost run]#./john /opt/shadow.txt

7.查看已经破解出的密码

[root@localhost run]#./john --show /opt/shadow.txt

> john. pot

#使用密码字典文件

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

./john --wordlist=./password.1st /opt/shadow.txt

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

2. 网络扫描 - NMAP

  • 一款强大的网络扫描、安全 检测工具
控制位
SYN 建立链接
ACK 确认
FIN 结束断开
PSH 传送 0 数据缓存 上层应用协议
RST 重置
URG 紧急
① 常用格式:

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

netstat natp #查看正在运行的使用TCP协议的网络状态信息

netstat -natp | grep httpd #实际操作(httpd换成80也可以)

netstat -naup #查看正在运行的使用UDP协议的网络状态信息

[root@localhost run]#rpm -qa|grep nmap 查看nmap

[root@localhost run]#yum install -y nmap 安装nmap

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

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

示例:

查看本机开启的 TCP端口、UDP端口

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

② 一些服务的端口号
相关推荐
想学习java初学者4 分钟前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
人类群星闪耀时31 分钟前
未来运维的发展趋势:运维领域的新技术与趋势
运维
落非36 分钟前
NFS存储基础操作
运维
Vanish_ran1 小时前
gitlab与jenkins
运维·gitlab·jenkins
朱容君1 小时前
Linux系统编程多线程之读写锁讲解
linux·开发语言
大风吹PP凉1 小时前
38配置管理工具(如Ansible、Puppet、Chef)
linux·运维·服务器·ansible·puppet
康熙38bdc1 小时前
Linux 进程间通信——共享内存
linux·运维·服务器
jwybobo20072 小时前
redis7.x源码分析:(3) dict字典
linux·redis
scoone2 小时前
ssh登陆服务器后支持Tab键命令补全
linux·shell
微刻时光2 小时前
Docker部署Nginx
运维·nginx·docker·容器·经验