系统安全及应用

本文详细介绍了Linux系统安全加固的各种措施,包括账号安全、密码策略、命令历史限制、终端自动注销、su命令限制、PAM安全认证、sudo权限提升、终端登录控制以及网络端口扫描和网络状态监测。通过这些措施,可以有效增强系统的安全性,防止未经授权的访问和操作。
摘要由CSDN通过智能技术生成

系统安全及应用

一、账号安全基本措施

1.系统账号清理

将非登录用户的Shell设为/sbin/nologin

锁定长期不使用的账号

删除无用的账号

锁定账号文件passwd、shadow

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

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

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

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

测试文件是否锁住
useradd lisi  #查看结果

解锁文件
chattr -i /etc/passwd /etc/shadow    #解锁文件 
lsattr /etc/passwd /etc/shadow       #查看为解锁的状态

2.密码安全控制

密码安全控制
vi /etc/login.defs    #适用于新建的用户  
PASS_MAX_DAYS 30      #设置密码有效期30天   默认99999

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

chage 命令用于设置密码时限

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

执行以下操作可强制要求用户zhangsan下次登录时重设密码

chage -d 0 zhangsan  #强制在下次登录时更改密码
cat /etc/shadow | grep zhangsan   #shadow文件中的第三个字段被修改为0

验证检查 Linux 上特定用户的密码到期日期

chage -l zhangan

3.命令历史限制

[root@localhost ~]# history
   49  useradd han
   50  echo "abc123" | passwd --stdin han
   51  history

history 命令可以看到更改用户密码的历史记录,并不安全

history -c 可以临时清空,但是重启之后仍然可以看到之前的历史记录

1)减少记录的命令条数

/etc/profile这个文件是系统全局变量配置文件,可以通过重启系统或者执行source /etc/profile命令使文件被读取重载


[root@localhost ~]# vi /etc/profile              #编辑全局变量配置文件    
export HISTSIZE=10                              #输入export HISTZIZE=10
[root@localhost ~]# source /etc/profile          #相当于使/etc/profile内的命令重载一遍
2)登陆时自动清空历史命令

~/.bashrc文件中的命令会在每次打开新的bash shell时(也包括登录系统)被执行

echo " " > ~/.bash_history    

cd ~
vim .bash_history
echo " " > ~/.bash_history

cd ~
vim .bashrc
echo " " > ~/.bash_history

4.终端自动注销

闲置600秒后自动注销

vi /etc/profile 
export TMOUT=600

需要注意的是,当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免设置 TMOUT 变量。必要时可以执行“unset TMOUT”命令取消 TMOUT 变量设置

除此之外,还可以修改用户宿主目录中的~/.bash_logout 文件,添加清空历史命令的操作语句。这样,当用户退出已登录 Bash 环境以后,所记录的历史命令将自动清空

 vi ~/.bash_logout 
 history -c 
 clear

二、限制su命令用户

默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root)的登录密码,这样带来了安全风险。为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,只允许极个别用户使用 su 命令进行切换。实现过程如下:将授权使用 su 命令 的用户添加到 wheel 组,修改/etc/pam.d/su 认证配置以启用 pam_wheel 认证。

vim /etc/pam.d/su

2  auth    sufficient     pam_rootok.so



6 #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安全认证

可插拔是形象说法不是外部设备也不是U盘,可插拔可以理解为可配置、可定制的一个模块,你想让某个服务具有什么样的认证功能,你就可以通过配置它的配置文件实现
可以理解为可配置、可定制、我们可以编辑,我们可以定制某个服务的认证就是可插拔试认证模块,它是一种高效而且灵活的便利的用户级的认证,也是现在linux 服务器普遍使用的认证方式

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

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

3.用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM
模块也是不同的

如果想查看某个程序是否支持PAM 认证,可以用ls命令查看/etc/pam.d/
PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由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模块的参数

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

四、sudo机制提升权限

sudo机制介绍
通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登 录密码。例如,若要从zhangsan 用户切换为 root 用户,必须知道 root 用户的密码。对于生产环 境中的 Linux 服务器,每多一个人知道特权密码,其安全风险也就增加一分。 有没有一种折中的办法,既可以让普通用户拥有一部分管理权限,又不需要将 root 用户的密码告诉他呢?答案是肯定的,使用 sudo命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令。

etc/sudoers文件的默认权限为440,需使用专门的 visudo 工具进行编辑。虽然也可以用 vi 进行编辑,但保存时必须执行“:w!”命令来强制操作,否则 系统将提示为只读文件而拒绝保存。 配置文件/etc/sudoers 中,授权记录的基本配置格式如下所示
user MACHINE=COMMANDS

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

授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令

用户组设置sudo提权
用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)
主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可
命令(COMMANDS):允许授权的用户通过 sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。

五、终端登录安全控制

限制root只在安全终端登录
禁止普通用户登录,当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登录系统。这时候,只需要简单地建立/etc/nologin 文件即可。login 程序会检查/etc/nologin 文件是否存在,如果存在,则拒绝普通用户登录系统(root 用户不受限制)
touch /etc/nologin #除root以外的用户不能登录
此方法实际上是利用了 shutdown 延迟关机的限制机制,只建议在服务器维护期间临时 使用。当手动删除/etc/nologin 文件或者重新启动主机以后,即可恢复正常。
vim /etc/securetty 修改终端安全配置,注释终端 tty 就不能登录了

指定终端id进行登录

虚拟机内 远程不可
虚拟控制台的选择可以通过按下Ctrl+Alt键和功能键Fn(n=1~6)来实现(tty1-tty6) tty1 图形界面 tty2-6 字符界面

六、网络端口扫描nmap

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

SYN(synchronous建立联机)

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)

Sequence number(顺序号码)

Acknowledge number(确认号码)

rpm -qa |grep nmap

nmap-6.40-7.el7.x86_64.rpm
yum install -y nmap

其中,扫描目标可以是主机名、IP 地址或网络地址等,多个目标以空格分隔;
常用的 选项有-p:分别用来指定扫描的端口、

-n:禁用反向 DNS 解析(以加快扫描速度);
扫描 类型决定着检测的方式,也直接影响扫描的结果。
有的时候开启dns解析 通过该域名 回的是反向解析 把IP解析成域名 我禁止反向解析可以加快速度

比较常用的几种扫描类型如下:

-sS,TCP SYN 扫描(半开扫描):只向目标发出 SYN 数据包,如果收到 SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
tcp确定三次握手
-sT,TCP 连接扫描:这是完整的 TCP 扫描方式,用来建立一个 TCP 连接,如果 成功则认为目标端口正在监听服务,否则认为目标端口并未开放。

-sF,TCP FIN 扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对 SYN 数据包进行简单过滤,而忽略了其他形式的 TCP 攻 击包。这种类型的扫描可间接检测防火墙的健壮性。

-sU,UDP 扫描:探测目标主机提供哪些 UDP 服务,UDP扫描的速度会比较慢。

-sP,ICMP 扫描:类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。

-P0,跳过 ping 检测:这种方式认为所有的目标主机是存活的,当对方不响应 ICMP 请求时,使用这种方式可以避免因无法 ping 通而放弃扫描。

七、netstat命令

查看当前操作系统的网络连接状态、路由表、接口统计等信息,它是了解网络状态及排除网络服务故障的有效工具

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

-n 以数字的形式显示相关的主机地址、端口等信息
-r 显示路由表信息
-a 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-l 显示处于监听(Listening)状态的网络连接及端口信息
-t 查看 TCP(Transmission Control Protocol,传输控制协议)相关的信息
-u 显示 UDP(User Datagram Protocol,用户数据报协议)协议相关的信息
-p 显示与网络连接相关联的进程号、进程名称信息(该选项需要 root 权限

Proto显示连接使用的协议
RefCnt表示连接到本套接口上的进程数量
Types显示套接口的类型
State显示套接口当前的状态
Path表示连接到套接口的其它进程使用的路径名

用法:

①通常使用“-anpt”组合选项,以数字形式显示当前系统中所有的 TCP 连接信息,同时显示对应的进程信息
②配合管道符grep过滤出特定的记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值