Linux--系统安全管理及应用

一、账号安全控制

1、系统账号清理

在Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而产生的其他大量账号

除了root之外,其他大量账号只是用来维护系统运作,启动或保持服务进程,一般是不允许登录的,也称为非登录用户

常见的非登录用户包括bin,daemon,adm,lp,mail,nobody,apache,mysql,dbus,ftp,gdm,haldaemon等

为了确保系统安全,这些用户的登录shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动

#查看当前不可登录系统的用户
grep "/sbin/nologin" /etc/passwd  
#也可以指定用户无法登录
usermod -s /sbin/nologin 用户名

1、1.账号锁住

usermod -L zhangsan #锁定账号 
passwd -S zhangsan # 查看账号状态
passwd -l zhangsan 锁定用户账户

1、2.解锁账号

usermod -U zhangsan #解锁账号 
passwd -u zhangsan  #解锁账号 

1、3.删除无用账号

userdel -r 用户名

1、4.锁定文件

如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方 法。使用 chattr 命令,分别结合“+i”“-i”选项来锁定、解锁文件,使用 lsattr 命令可以查看文 件锁定情况

chattr +i /etc/passwd /etc/shadow    #锁定文件

lsattr /etc/passwd /etc/shadow       #查看为锁定的状

chattr -i /etc/passwd /etc/shadow    #解锁文件

1、5.解锁文件

  • 测试文件是否锁住
useradd lisi  #查看结果
  • 解锁文件
chattr -i /etc/passwd /etc/shadow    #解锁文件 
lsattr /etc/passwd /etc/shadow       #查看为解锁的状态

二、密码安全控制

在不安全的网络环境中,为了降低密码被猜出或者被暴力破解的风险,用户应养成定期修改密码的习惯,避免长期使用同一个密码
管理员可以在服务器端限制用户密码的最大有效天数
对于密码已经过期的用户,登录时将被要求重新设置密码,否则拒绝登录

1.对于新建立的用户

vi /etc/login.defs    #适用于新建的用户
#进入vi编辑器中设置密码有效期
PASS_MAX_DAYS 30      #设置密码有效期30天   默认99999
PASS_MIN_DAYS   0    #表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0
PASS_MIN_LEN    5    #密码最小长度,对于root无效
注解:指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。
PASS_WARN_AGE   7    #指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。

2.对于已有的用户使用 chage命令

chage -M 30 lisi  #适用于已有的 lisi 用户
cat /etc/shadow | grep lisi

#执行以下操作可强制要求用户zhangsan下次登录时重设密码
chage -d 0 zhangsan
cat /etc/shadow | grep zhangsan

重新登录后,必须更改密码(重设的密码有密码复杂性要求,例如不可是连续的数字,连续的字母等)

三、命令历史限制

减少记录的命令条数:bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISTSIZE变量值,可以影响系统中 的所有用户

1.设置历史命令显示

例如:设置最多只记录200条历史命令
[root@localhost ~]# vi /etc/profile
将其中的HISTSIZE=1000,修改为HISTSIZE=200
[root@localhost ~]# source /etc/profile           ##使用命令source /etc/profile或者换重启使之生效

2.历史命令清除

  • 临时的清除
history -c 
重启之后会重新出现
  • 永久清空
#进入bash_history中编写
vim .bash_history
#追加清空历史命令
echo " " > .bash_history  #清空记录
  • 登录时自动清空
cd ~
vim .bashrc 
echo '' > ~/.bash_history 

如果需要每个用户登出时都清除输入的命令历史记录,可以在/etc/skel/.bash_logout文件中添加下面这行rm -f $HOME/.bash_history 。这样,当用户每次注销时,
.bash_history文件都会被删除.

四、终端自动注销

bash终端环境中,可以设置一个闲置超时时间,当超过指定时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险

[root@localhost ~]# vi /etc/profile                ##适用于新登录用户
export TMOUT=20                                    ##将闲置时间设为20S
[root@localhost ~]# source /etc/profile            ##使设置生效
[root@localhost ~]# export TMOUT=30                ##对当前用户生效

五、用户切换命令 su

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

为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,只允许极个别用户使用 su 命令进行切换。实现过程如下:将授权使用 su 命令 的用户添加到 wheel 组,修改/etc/pam.d/su 认证配置以启用 pam_wheel 认证。

限制用户使用su命令

  • 在/etc/pam.d/su文件里设置禁止用户使用su命令
vim /etc/pam.d/su
  • 注释命令
#找以下命令
auth sufficient pam_ rootok.so
auth required pam_ wheel.so use_ _uid
#注释掉
#auth sufficient pam_ rootok.so
#auth required pam_ wheel.so use_ _uid
  • 含义
  1. 以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。

  2. 两行都注释也是运行所有用户都能使用su命令,但root’下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)

  3. 如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令

  4. 如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。

六、PAM安全认证

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

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

PAM(Pluggable Authentication Modules)可插拔式认证模块

  • 是一种高效而且灵活便利的用户级别的认证方式
  • 也是当前Linux服务器普遍使用的认证方式

1.PAM认证原理

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

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

  • 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证

  • 不同的应用程序所对应的PAM模块是不同的

2.PAM安全认证流程

在这里插入图片描述

  • required:验证失败时仍然继续,但返回Fail

  • requisite:验证失败则立即结束整个验证过程,返回Fail

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

  • optional:不用于验证,只显示信息(通常用于session类型)

  • include : 表示在验证过程中,调用其他的PAM配置文件,比如很对应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。

七、 使用sudo机制提升权限

1.sudo命令的用途及用法

  • 用途:以其它的用户身份(如root)执行授权的命令
  • 用法:sudo 授权命令

2.sudo命令

选项作用
-l列出用户在主机上可用的和被禁止的命令,一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的。
-v验证用户的时间戳,如果用户运行sudo后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo操作,可以跟踪最新的时间戳
-u指定以用户执行特定操作
-k删除时间戳

3.用户组设置sudo提权

授权配置主要包括用户、主机、命令三个部分

  • 用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。

  • 主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份sudoers 文件,一般设为 localhost 或者实际的主机名即可。

  • 命令(COMMANDS):允许授权的用户通过 sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。

例如

wangliu 用户可以使用useradd usermod
需求:wangliu     root用户下的权限 useradd usermod

配置
visudo
wangliu ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod
如wangliu ALL=(root) NOPASSWD:/usr/sbin/useradd,PASSWD:/usr/sbin/usermod  #前面不需要输入密码 ,后面需要输入密码

八、用户别名案例

当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、 主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置

1.用户别名的语法格式

  • User_Alias 用户别名:包含用户、用户组(%组名(使用%引导))、还可以包含其他其他已经用户的别名

     User_Alias OPERATORS=zhangsan,tom,lisi
    
  • Host_Alias
    主机别名:主机名、IP、网络地址、其他主机别名 !取反

    Host_Alias MAILSVRS=smtp,pop 
    
  • Cmnd_Alias
    命令路劲、目录(此目录内的所有命令)、其他事先定义过的命令别名

    Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum 
    
例如,以下操作通过别名方式来添加授权记录,允许用户wangliu、 wangliu组、useradmin组 并且定义命令别名。
在主机 smtp、pop 中执行 rpm、yum 命令
User_Alias USERADMIN = wangliu,%wangliu ,%useradmin
Cmnd_Alias USERADMINCMND =/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/usr/bin/passwd,!/usr/bin/passwd root  #取反的优先级最高
USERADMIN ALL=(root) NOPASSWD: USERADMINCMND

验证别名以及命令路径
注bug
sudo passwd root 测试
解决方法
Cmnd_Alias USERADMINCMND =/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,! /usr/bin/passwd root

2.开关控制

1.调整BIOS引导设置

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

2.限制更改GRUB引导参数

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

命令操作

[root@kgc ~]# grub2-mkpasswd-pbkdf2      #根据提示设置GRUB菜单的密码
[root@kgc ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@kgc ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
[root@kgc ~]# vim /etc/grub.d/00_header
cat << EOF 
set superusers="root"       #设置密码,省略部分内容为经过加密生成的密码字符串
#使用 grub2-mkconfig 命令生成新的 grub.cfg 配置文件。
[root@kgc ~]# grub2-mkconfig -o /boot/grub2/grub.cfg //生成新的 grub.cfg 文件

重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。
一步到位
grub2-setpassword

3.终端登录安全控制

  • 限制root只在安全终端登录

    [root@localhost ~]# vi /etc/securetty 
    #将tty2、tty3注释使root用户无法登录2、3终端
    #tty2
    #tty3
    
  • 禁止普通用户登录

    [root@localhost ~]# touch /etc/nologin      ##创建此文件后其他用户已经无法登陆
    [root@localhost ~]# rm -rf /etc/nologin     ##删除此文件即可取消限制
    
    

九、网络端口扫描-nmap

1.namp

  • 一款强大的网络扫描,安全检测工具
    可以探测局域网中那些主机在线,或者某台主机中开了那些端口

  • NMAP的扫描语法
    nmap [扫描类型] [选项] <扫描目标…>

  • 端口的取值范围是:0-65535

  • 常用选项:-p、-n

    • -p:分别用来指定扫描的端口
    • n:禁用反向 DNS 解析(以加快扫描速度)

2.常用的几种扫描

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

3.操作

nmap -sT 127.0.0.1 //扫描常用的 TCP 端口
nmap -sU  127.0.0.1 //扫描常用的 UTP 端口
nmap -sP  127.0.0.1 //ICMP 扫描
nmap -P0 192.168.10.0/24
  • 禁ping临时
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#启用ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • 永久禁 ping
#编辑配置
vim /etc/sysctl.conf
#设置禁ping(如果有此配置就无需重复添加,仅更新值即可)
net.ipv4.icmp_echo_ignore_all = 1
#刷新配置
sysctl -p

#启用ping
net.ipv4.icmp_echo_ignore_all = 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值