Linux—系统安全及应用

本文详细介绍了Linux系统中账号安全控制的措施,包括账号清理、密码安全、命令历史限制,以及用户切换与提权(su和sudo)的使用。此外,还探讨了PAM安全认证的原理和配置。同时,文章提到了系统引导和登录的安全控制,如BIOS设置、GRUB密码保护以及网络扫描工具NMAP的使用,旨在增强服务器的安全性。
摘要由CSDN通过智能技术生成


前言

Linux 作为一种开放源代码的操作系统,Linux 服务器以其安全、高效和稳定的显著优势而得以广泛应用。下面是我总结的一些有关 Linux 系统安全优化方面的基础知识,希望能给刚接触 Linux 系统的小白一些帮助。


一、账号安全控制

用户账号是计算机使用者的身份凭证或标识,每一个要访问系统资源的人,必须凭借其用户账号才能进入计算机。
在 Linux 系统中,提供了多种机制来确保用户账号额正当、安全使用。

1.账号安全措施

1.1 系统账号清理

  • 将非登录用户的 Shell 设为 /sbin/nologin
  • 锁定长期不使用的账号
  • 删除无用的账号
  • 锁定账号文件passwd、shadow

命令如下

[root@localhost ~]# usermod -L zhangsan      #锁定账号
[root@localhost ~]# passwd -S zhangsan       #查看状态
[root@localhost ~]# usermod -U zhangsan      #解锁账号     
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow       #锁定文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow          #查看为锁定的状态
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow       #解锁文件

在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加、删除账号,也不能更改用户的密码、登录 Shell、宿主目录等属性信息。

1.2 密码安全控制

在不安全的网络环境中,为了降低密码被猜出或被暴力破解的风险,用户应养成定期更改密码的习惯,避免长时间使用同一个密码。

  • 我们可以使用 chage 命令设置密码时限,例如执行下面的操作可以将密码的有效期设置为30天。
[root@localhost ~]# chage -M 30 lisi             #适用于已有的用户
[root@localhost ~]# vim /etc/login.defs          #使用于新建的用户
PASS_MAX_DAYS   30
  • chage 命令还可以强制让用户在下次登录的时候重设密码,操作如下。
[root@localhost ~]# chage -d 0 zhangsan
[root@localhost ~]# cat /etc/shadow |grep zhangsan

1.3 命令历史限制

Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的危险。只要获得用户的命令历史文件,该用户的命令操作过程将一览无余,如果里面有曾经输入的密码,那么意味着服务器的安全又多了一个隐患。

  • 我们可以自己定义历史命令最多纪录多少条,如下,设置最多纪录200条命令。
[root@localhost ~]# vim /etc/profile                          #适用于新登录用户
HISTSIZE=200
[root@localhost ~]# export HISTSIZE=200                       #适用于当前用户
  • 除此之外,我们还可以修改用户宿主目录中的 ~/.bash_logout 文件,添加清空历史命令的操作语句,这样的话当用户退出已登录的 Bash 环境后,所记录的历史命令将会自动清空。
[root@localhost ~]# vim ~/.bash_logout
history -c                                #添加清空历史命令的语句
clear

或者

[root@localhost ~]# vim .bash
echo ' ' > ~/.bash_history
  • 除了设置自动清除之外还可以设置闲置超时时间,当超过指定的时间没有任何输入时自动注销终端,这样可以避免当管理员不在时其他的人对服务器误操作风险。
[root@localhost ~]# vim /etc/profile           #适用于新登录用户
export TMOUT=600

[root@localhost ~]# export TMOUT=600           #适用于当前用户

2.用户切换与提权

大多数情况下并不建议用户直接以 root 用户进行登录服务器。这样可以大大减少因误操作而导致的破坏,也降低了密码在不安全的网络中泄露的风险。所以我们就需要为普通用户提供一种身份切换或权限的提升,以便在必要的时候执行管理任务。

2.1 切换用户(su)

  • 使用 su 命令可以切换为指定的另一个用户,从而具有该用户的所有权限。当然,切换时需要对目标的密码进行验证(root 用户切换到其他用户不需要)。
[gulei@localhost ~]$su - root
密码:                                        #输入root 用户的密码
上一次登录:四 819 21:37:26 CST 2021192.168.24.1pts/0[root@localhost ~]#                          #验证成功后获得root权限

上面操作中,选项“-”表示切换用户后进入目标用户的宿主目录,不加则表示切换到当前目录。

  • 默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试 root 用户的登陆密码,带来安全隐患。我们可以使用 pam_whell 认证模块只允许极个别的用户使用 su 命令进行切换。具体操作如下:
[root@localhost ~]#gpasswd -a zhangsan wheel                   #添加授权用户zhangsan
正在将用户“zhangsan”加入到“wheel”组中
[root@localhost ~]#grep wheel /etc/group                       #确认 wheel 组成员
wheel:x:10:zhangsan
[root@localhost ~]#vim /etc/pam.d/su
auth            required        pam_wheel.so use_uid          #去掉此行开头的“#号”
wq                                                            #保存并退出

验证是否设置成功

[lisi@localhost ~]$su - root
密码:
su: 拒绝权限                                    # lisi 用户没有授权所以登陆失败
[zhangsan@localhost ~]$su - root
密码:
上一次登录:五 820 00:52:07 CST 2021pts/0[root@localhost ~]#                          # zhangsan 用户可以可以登录
  • 我们也可以在 /etc/pam.d/su 文件里设置禁止用户使用su命令
[root@localhost ~]#vim /etc/pam.d/su
......

 #auth sufficient pam rootok.so
 #auth required pam wheel.so useuid
  1. 以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
  2. 两行都注释是运行所有用户都能使用su命令,但 root 下使用 su 切换到其他普通用户需要输入密码。
  3. 如果第一行不注释,则 root 使用 su 切换普通用户就不需要输入密码。
  4. 如果开启第二行,表示只有 root 用户和 wheel 组内的用户才可以使用 su 命令。
  5. 如果注释第一行,开启第二行,表示只有 wheel 组内的用户才能使用 su 命令,root 用户也被禁用 su 命令。
  • 使用 su 命令切换用户的操作将会记录到安全日志 /var/log/secure 文件中,可以根据需要进行查看。

2.2 提升执行权限(sudo)

通过 su 命令可以很方便的切换为另外一个用户,前提条件是必须知道用户的登录密码。但对于服务器来说,多一个人知道密码,它的安全风险也就会多增加一分。我们可以使用 sudo 命令进行提升权限,这样就可以降低密码泄露的风险。

  • 在配置文件 /etc/sudoers 中添加授权,文件的默认权限为440, 保存退出时必须执行 “:w!” 命令来强制操作,否则系统将提示为只读文件而拒绝保存
  • 配置文件中,授权记录的基本格式如下
用户 主机名列表=命令程序列表

上面主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令,含义如下
用户:授权的用户名,或者用“%组名”的形式,授权一个组的所有用户
主机:使用此配置文件的主机名称,没配置过的主机名时可用local host ,配置过则用实际主机名,ALL 代表所有主机
命令:运行授权的用户通过sudo方式执行的特权命令,需要填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔
  • 例如,授权用户zhangsan 能够执行 ifconfig 命令来修改 IP地址,wheel 组的用户不需要验证密码就可以执行任何命令
[root@localhost ~]# visudo    或者  vim /etc/sudoers
......
zhangsan    localhost=/sbin/ifconfig
%wheel   ALL=NOPASSWD:ALL
  • 当使用相同授权的用户较多,或者授权命令较多时,可以使用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias 来进行设置。
[root@localhost ~]# visudo    
...
User_Alias USERS=zs, wer,lisi
Host_Alias HOSTS=localhost, bogon
Cmnd_Alias CMNDS=/sbin/ifconfig, /usr/sbin/useradd, /usr/sbin/userdel
USERS HOSTS=CMNDS
  • sudo 配置记录的命令部分允许使用通配符“*”、取反符号“!”,当需要授权某个目录下的所有命令或取消其中个别命令时也别有用。
[root@localhost ~]# visudo    
...
Host_Alias MYHOSTS=kgc,localhost
User_Alias MYUSERS=zhangsan,wangwu,lisi
Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm
MYUSERS MYHOSTS=NOPASSWD:MYCMNDS
  • 若要查看用户自己获得哪些 sudo 授权,可以执行 sudu -l 命令,未授权的用户将会得到“may not run sudo”的提示,已授权的用户可以看到自己的 sudo 配置。
[root@localhost ~]# sudo -l
  • 如果已经启用 sudo 日志,则可以从 /var/log/sudo 文件中看到用户的 sudo 操作记录。
[root@localhost ~]# tail /var/log/sudo

3.PAM 安全认证

3.1 PAM 及其作用

  • PAM,是linux 系统可插拔认证模块,是一套可定制、 可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。
  • PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/1ib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。

3.2 PAM 认证原理

  • PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so
  • PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证。
  • 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。

如果想查看某个程序是否支持PAM 认证,可以用 ls 命令进行查看,例如查看 su 是否支持 PAM 模块认证,操作如下

[root@localhost ~]# ls /etc/pam.d | grep su

3.3 PAM认证的构成

查看 su 的PAM 配置文件

[root@localhost ~]#cat /etc/pam.d/su
#%PAM-1.0
auth		sufficient	pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth		sufficient	pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth		required	pam_wheel.so use_uid
auth		substack	system-auth
auth		include		postlogin
account		sufficient	pam_succeed_if.so uid = 0 use_uid quiet
account		include		system-auth
password	include		system-auth
session		include		system-auth
session		include		postlogin
session		optional	pam_xauth.so

上面输出结果中

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

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

  • 第一列代表PAM认证模块类型

参数说明
auth对用户身份进行识别,如提示输入密码,判断是否为root。
account对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
password使用用户信息来更新数据,如修改用户密码。
session定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
  • 第二列代表PAM控制标记
格式说明
required表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
optional不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
include表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
  • 第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
    同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

  • 第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。传递给模块的参数。参数可以有多个,之间用空格分隔开

3.4 PAM控制类型

  • required 验证失败时仍然继续,但返回 Fail
  • requisite 验证失败则立即结束整个验证过程,返回 Fail
  • sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
  • optional 不用于验证,只是显示信息(通常用于 session 类型)

验证流程图如下图所示
在这里插入图片描述

二、系统引导和登录控制

在互联网环境中,大部分服务器都是通过远程登录来进行管理的,而本地引导和终端登录过程中往往容易被忽略,从而留下安全隐患。

1.开关机安全控制

  • 调整 BIOS 引导设置
    (1)将第一引导设备设为当前系统所在硬盘。
    (2)禁止从其他设备(如光盘、U盘、网络等)引导系统。
    (3)将安全级别设为"setup",并设置管理员密码,以防止未授权的修改。

  • GRUB 限制
    (1)通过修改 GRUB 引导参数进入单用户模式,可以不需要密码就能进入系统,从而拥有 root 权限,从安全的角度来看,如果任何人都能够这样修改参数,对服务器显然是很大的威胁。
    (2)为了加强对引导过程的安全控制,可以为 GRUB 菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
    (3)使用 “grub2-mkpasswd-pbkdf2” 生产密钥
    (4)修改 /etc/grub.d/00_header 文件中,添加密码记录
    (5)生成新的 grub.cfg 配置文件

2.终端登录安全控制

  • 限制 root 只在安全终端登录
[root@localhost ~]# vim/etc/securetty
...
#tty5
#tty6                    #禁止root用户从终端tty5、tty6登录
  • 禁止普通用户登录
[root@localhost ~]# touch /etc/nologin                    #禁止普通用户登录
[root@localhost ~]# rm -rf /etc/nologin                   #取消上述登录限制

3.网络扫描(NMAP)

NMAP是一个强大的端口扫描类安全评测工具,官方网站 ,支持 ping 扫描,多端口检测,OS识别等多种技术。使用 NMAP 定期扫描内部网络,可以找出网络中不可控的应用服务,及时关闭不安全的服务,能减小安全风险。

  • 安装 NMAP 软件包
[root@localhost ~]# yum install -y nmap
  • 扫描语法及类型(程序位于/usr/bin/nmap 目录下)
nmap   [扫描类型]   [选项]   < 扫描目标... >

常用选项如下

选项说明
-P指定扫描的端口
-n禁用 反向DNS 解析
-sSTCP 的 SYN 扫描(半开扫描)
-sTTCP连接扫描
-sFTCP FIN扫描
-sUUDP 扫描
-sPICMP 扫描
-P0跳过 ping 检测

案例
检查本机开放了哪些常用的 TCP 端口、UDP 端口

[root@localhost ~]#nmap 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2021-08-21 23:00 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
111/tcp open  rpcbind
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

总结

上面就是我对于账号安全控制,系统引导和登陆控制基础知识的一些总结,希望能给刚接触 Linux 系统的人一些帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头发莫的了呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值