Linux系统安全及应用

一.账号安全控制

1.基本安全措施

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

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

Linux系统安全及应用_第1张图片

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     解锁用户账号方法二
Linux系统安全及应用_第2张图片
1.1.3 删除无用的账号
[root@localhost ~]# userdel wangwu
[root@localhost ~]# userdel -r wangwu   //加上 -r  直接把家目录下的用户目录一起删除了
Linux系统安全及应用_第3张图片
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      查看文件状态属性
Linux系统安全及应用_第4张图片

小问题:

中病毒怎么办?

先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

方法一:Linux系统安全及应用_第5张图片

方法二:

Linux系统安全及应用_第6张图片

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

Linux系统安全及应用_第7张图片

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


变化的字符是   最后一次修改密码的时间
Linux系统安全及应用_第8张图片
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)

Linux系统安全及应用_第9张图片

Linux系统安全及应用_第10张图片

② 适用于当前用户

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

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

Linux系统安全及应用_第11张图片

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           //注释掉这条命令,就不会自动注销了

① 进入配置文件修改

Linux系统安全及应用_第12张图片

Linux系统安全及应用_第13张图片

② 仅对当前用户生效

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组才可以切换

Linux系统安全及应用_第14张图片

Linux系统安全及应用_第15张图片

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

Linux系统安全及应用_第16张图片

修改完之后,不能使用 su

Linux系统安全及应用_第17张图片

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

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

Linux系统安全及应用_第18张图片

Linux系统安全及应用_第19张图片

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"


Linux系统安全及应用_第20张图片

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

Linux系统安全及应用_第21张图片

建议将root那一行注释掉

Linux系统安全及应用_第22张图片

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

Linux系统安全及应用_第23张图片

使用通配符的注意事项

Linux系统安全及应用_第24张图片

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

Linux系统安全及应用_第25张图片

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

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

Linux系统安全及应用_第26张图片

③ 启用日志操作

Linux系统安全及应用_第27张图片

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模块调用。

Linux系统安全及应用_第28张图片

3.3 基本认知

认知几个模块:

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

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

/etc/security         复杂的配置文件

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

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

Linux系统安全及应用_第29张图片

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

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

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

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

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

② 第二段  控制位 (control)

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

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

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

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

Linux系统安全及应用_第30张图片

③ 第三段  代表PAM模块

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

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

概述:

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

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

PAM 认证类型包括四种:

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

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

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

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

① shell类型 模块

功能:检查有效的shell

帮助: man  8  pam  模块名

如果不知道怎么使用

Linux系统安全及应用_第31张图片

实例:

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

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

Linux系统安全及应用_第32张图片

Linux系统安全及应用_第33张图片

Linux系统安全及应用_第34张图片

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

② securetty 模块

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

Linux系统安全及应用_第35张图片

关闭两边的防火墙和防护

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

Linux系统安全及应用_第36张图片

③ pam_nologin.so 模块

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

Linux系统安全及应用_第37张图片

Linux系统安全及应用_第38张图片

④ limit 模块

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

Linux系统安全及应用_第39张图片

Linux系统安全及应用_第40张图片

实例:

Linux系统安全及应用_第41张图片

Linux系统安全及应用_第42张图片

Linux系统安全及应用_第43张图片

Linux系统安全及应用_第44张图片

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

Linux系统安全及应用_第45张图片

limits 一些建议设置

临时修改:

Linux系统安全及应用_第46张图片

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 服务

Linux系统安全及应用_第47张图片

Linux系统安全及应用_第48张图片

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

Linux系统安全及应用_第49张图片

Linux系统安全及应用_第50张图片

二.系统引导和登录控制

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文件,然后重启系统

验证结果

Linux系统安全及应用_第51张图片

方法一:直接设置修改密码

Linux系统安全及应用_第52张图片

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

Linux系统安全及应用_第53张图片

Linux系统安全及应用_第54张图片

Linux系统安全及应用_第55张图片

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

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
#使用指定的字典文件进行破解

Linux系统安全及应用_第56张图片

2. 网络扫描 - NMAP

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

控制位
SYN 建立链接
ACK 确认
FIN 结束断开
PSH 传送 0 数据缓存 上层应用协议
RST 重置
URG 紧急

① 常用格式:

nmap [扫描类型]  [选项]  <扫描目标>
netstat natp                                            #查看正在运行的使用TCP协议的网络状态信息
netstat -natp | grep httpd                          #实际操作(httpd换成80也可以)

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

Linux系统安全及应用_第57张图片

Linux系统安全及应用_第58张图片

[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端口

Linux系统安全及应用_第59张图片

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

Linux系统安全及应用_第60张图片

② 一些服务的端口号

Linux系统安全及应用_第61张图片

你可能感兴趣的:(Linux,linux,系统安全,运维)