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 直接把压缩包拖进即可 ​ 2. 解压 \[root@localhost opt\]#tar zxvf john-1.8.0.tar.gz ​ 3. 安装软件编译工具 \[root@localhost src\]#yum install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel -y ​ 4. 进行编译安装 \[root@localhost src\]#make clean linux-x86-64 ​ 5. 准备待破解的密码文件 \[root@localhost src\]#cd .. 切换至上级目录 \[root@localhost src\]#cp /etc/shadow /opt/shadow.txt 准备密码文件 6. 执行暴力破解 \[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 8. \> 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端口 ![](https://file.jishuzhan.net/article/1743795405369380865/3cd0fb927d94301eced5cd4d5d40cbef.webp) 检测192.168.44.0/24 网段有哪些存活主机 ![](https://file.jishuzhan.net/article/1743795405369380865/56eeae2539e28cbf9a915fbeeeb7451a.webp) ##### ② 一些服务的端口号 ![](https://file.jishuzhan.net/article/1743795405369380865/ed08245c0affcc82621a881f02fb610e.webp)

相关推荐
minji...3 分钟前
linux 进程控制(一) (fork进程创建,exit进程终止)
linux·运维·服务器·c++·git·算法
wanhengidc3 分钟前
巨 椰 云手机功能丰富 高性价比
运维·服务器·科技·智能手机·云计算
I · T · LUCKYBOOM6 分钟前
21.Linux网络设置
linux·运维·网络
Likeyou78 分钟前
关于Linux下的Oracle的rman备份操作指南
linux·运维·oracle
峰顶听歌的鲸鱼11 分钟前
13.docker部署
linux·运维·笔记·docker·容器·云计算
橘子编程14 分钟前
仓颉语言变量与表达式解析
java·linux·服务器·开发语言·数据库·python·mysql
虚神界熊孩儿20 分钟前
linux下创建用户和用户组
linux·运维·服务器
hhwyqwqhhwy22 分钟前
linux 驱动 rtc
linux·运维·实时音视频
python百炼成钢24 分钟前
53.Linux regmap驱动框架
linux·运维·服务器·驱动开发