0


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 准备密码文件

  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解析(以加快扫描速度)-sSTCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYNACK响应包就认为目标端口正在监听,并立即断开连接; 否则认为目标端口并未开放。-sTTCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否 则认为目标端口并未开放。-sFTCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而 忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。-sUUDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。-sPICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。-P0跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放 弃扫描。natstat常用选项作用-a显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。-n以数字的形式显示相关的主机地址、端1等信息。-t查看TCP相关的信息。-u显示UDP协议相关的信息。-p显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)-r显示路由表信息。-l显示处于监听状态的网络连接及端口信息。
示例:

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

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

② 一些服务的端口号


本文转载自: https://blog.csdn.net/qq_57093716/article/details/135401489
版权归原作者 小蜜蜂~嗡嗡嗡~ 所有, 如有侵权,请联系我们删除。

“Linux系统安全及应用”的评论:

还没有评论