liunx|10.系统安全及应用


文章目录

    • 账号安全基本措施
      • 系统账号清理
    • chattr命令
    • 密码安全控制
    • 通过pam 模块来防止暴力破解ssh(扩展)
    • 命令历史限制
    • 系统自动注销设置
    • 限制su命令用户
    • PAM安全认证
    • sudo机制提升权限
    • 终端登录安全控制
    • 网络端口扫描nmap
      • 禁ping临时
      • 永久禁 ping
    • netstat命令

账号安全基本措施 系统账号清理
将非登陆用户的Shell设为 /sbin/noiogin
锁定长期不使用的账号
删除无用的账号
锁定账号文件 passwd,shadow
账号锁定:
liunx|10.系统安全及应用
文章图片

解锁账号:
liunx|10.系统安全及应用
文章图片

删除无用账号:
liunx|10.系统安全及应用
文章图片

chattr命令 如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方 法
使用 chattr 命令,分别结合“+i”“-i”选项来锁定、解锁文件,使用 lsattr 命令可以查看文 件锁定情况
参数:
+i:锁定文件
-i:解锁文件
lsattr:查看为锁定的状态
锁定文件:锁定后只可以看,其他操作都不允许
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wcSCUYgr-1654419807188)(https://typorqi.oss-cn-hangzhou.aliyuncs.com/image-20220528154304847.png)]
测试文件是否锁住:因为锁定没办法写入到/etc/passwd,所以创建不了用户,给密码也一样
liunx|10.系统安全及应用
文章图片

解锁文件:liunx|10.系统安全及应用
文章图片

密码安全控制 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 天。
liunx|10.系统安全及应用
文章图片

通过pam 模块来防止暴力破解ssh(扩展) root@benet ~]# vim /etc/pam.d/sshd
在第一行下面添加一行:
auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200
说明:尝试登陆失败超过3次,普通用户600秒解锁,root用户1200秒解锁
命令历史限制 查看历史命令: history
? history -c 临时的清除,重启之后还会有,因为清除的是缓存(内存)里的数据,不是磁盘里的
清除磁盘中的数据开机后就不在有显示 :
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bs3esRDi-1654419807188)(C:\Users\qi\AppData\Roaming\Typora\typora-user-images\image-20220529214108002.png)]
先清除缓存在echo覆盖掉,或直接rm -rf删除此文件也可以清除历史命令,此文件会开机自创建[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DMY9CXdI-1654419807189)(C:\Users\qi\AppData\Roaming\Typora\typora-user-images\image-20220529214345682.png)]
vim进入编辑(修改)历史记录遗留多少,用于新登录用户
/etc/profile 文件为系统的每个用户设置环境变量信息,此文件的修改会影响到所有用户
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dtQ4kyDI-1654419807189)(C:\Users\qi\AppData\Roaming\Typora\typora-user-images\image-20220529211341094.png)]
修改历史记录遗留为多少[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QB7oAGk5-1654419807189)(C:\Users\qi\AppData\Roaming\Typora\typora-user-images\image-20220529212121138.png)]
刷新一下 让系统识别,修改成功[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9OkOFGQd-1654419807189)(C:\Users\qi\AppData\Roaming\Typora\typora-user-images\image-20220529213146937.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kiH1Huc8-1654419807190)(C:\Users\qi\AppData\Roaming\Typora\typora-user-images\image-20220529213231482.png)]
关于环境变量的读取顺序:
用户登录 ->> 加载~/.bash_profile --> bash_profile中配置了首先是使~/.bashrc生效
.bash_profile”文件中的命令将在该用户每次登录时被执行
.bashrc”文件中的命令会在每次加载“ /bin/bash (Shell解释器)
.bash_logout 在退出shell时被读取
其他办法:
如果需要每个用户登出时都清除输入的命令历史记录,可以在/etc/skel/.bash_logout文件中添加下面这行rm -f $HOME/.bash_history 。这样,当用户每次注销时,
.bash_history文件都会被删除.
系统自动注销设置 进入编辑
liunx|10.系统安全及应用
文章图片

插入写闲着多久系统自动注销liunx|10.系统安全及应用
文章图片

需要注意的是,当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免 设置 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 认证
liunx|10.系统安全及应用
文章图片

在/etc/pam.d/su 文件里设置禁止用户使用su命令(一般注释2 6行)
liunx|10.系统安全及应用
文章图片

1)以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换
2)两行都注释也是运行所有用户都能使用su命令,但root’下使用su切换到其他普通用户需要输入密码; 如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
没注释之前切换是不需要密码的:liunx|10.系统安全及应用
文章图片

把第二行注释并保存后就会需要密码登陆:liunx|10.系统安全及应用
文章图片

表示双方登陆都需要验证liunx|10.系统安全及应用
文章图片

3)如果开启第六行,要第二行开启的情况下,表示只有root用户和wheel组内的用户才可以使用su命令
lisi用户不在wheel组中就不可以使用su命令
liunx|10.系统安全及应用
文章图片

liunx|10.系统安全及应用
文章图片

相反在同一个组内可以使用liunx|10.系统安全及应用
文章图片

同一级别用户,不在同一个组内的用户,要切换到在组内的用户不可以,但组内用户可切换都没有组的用户liunx|10.系统安全及应用
文章图片

4)如果注释第二行,开启六行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。
liunx|10.系统安全及应用
文章图片

组内成员liunx|10.系统安全及应用
文章图片

liunx|10.系统安全及应用
文章图片

取消第四条注释使得wheel成员su到root不用输密码
liunx|10.系统安全及应用
文章图片

liunx|10.系统安全及应用
文章图片

普通用户切换登录测试验证
使用 su 命令切换用户的操作将会记录到安全日志/var/log/secure 文件中,可以根据需要 进行查看
liunx|10.系统安全及应用
文章图片

PAM安全认证 可插拔是形象说法 不是外部设备也不是U盘,可插拔可以理解为可配置、可定制的一个模块,你想让某个服务具有什么样的认证功能,你就可以通过配置它的配置文件实现
可以理解为可配置、可定制、我们可以编辑,我们可以定制某个服务的认证就是可插拔试认证模块,它是一种高效而且灵活的便利的用户级的认证,也是现在linux 服务器普遍使用的认证方式
Linux-PAM,是linux可插拔认证模块,是一套可定制、 可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。
PAM认证原理:
1.PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so;
  1. PAM认证首先要确定哪一项应用 服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于
    /lib64/security/下)进行安全认证。
  2. 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM
    模块也是不同的。
    如果想查看某个程序是否支持PAM 认证,可以用ls命令进行查看/etc/pam.d/
    PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用
vim su 每一列的详细说明:
第一列代表PAM认证模块类型
auth: 对用户身份进行识别,如提示输入密码,判断是否为root。
account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等
password: 使用用户信息来更新数据,如修改用户密码。
session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统
第二列代表PAM控制记
required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。
传递给模块的参数。参数可以有多个,之间用空格分隔开
PAM 就是管理默认程序或服务的权限程序
PAM su 切换用户(su程序的使用权)
PAM sudo 提权/借权
sudo机制提升权限 sudo机制介绍:
通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登 录密码。例如,若要从zhangsan 用户切换为 root 用户,必须知道 root 用户的密码。对于生产环 境中的 Linux 服务器,每多一个人知道特权密码,其安全风险也就增加一分。 有没有一种折中的办法,既可以让普通用户拥有一部分管理权限,又不需要将 root 用户的密码告诉他,使用 sudo命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令。
etc/sudoers文件的默认权限为440,需使用专门的 visudo 工具进行编辑。虽然也可以用 vi 进行编辑,但保存时必须执行“:w!”命令来强制操作,否则 系统将提示为只读文件而拒绝保存
配置文件/etc/sudoers 中,授权记录的基本配置格式
用户 主机名(可自定义) 允许使用什么命令的绝对路径
zhangsan localhost=/usr/bin/ifdown
【liunx|10.系统安全及应用】sudo [参数选项] 命令:
-l 列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;
-v 验证用户的时间戳;如果用户运行sudo 后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo 操作;用-v 可以跟踪最新的时间戳;
-u 指定以以某个用户执行特定操作;
-k 删除时间戳,下一个sudo 命令要求用求提供密码;
普通用户没提权时不可操作
liunx|10.系统安全及应用
文章图片

授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令
具体含义如下:
注:Runas_Alias:在哪些主机以谁的身份运行的别名 这个不怎么使用
用户组设置sudo提权:
用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)
主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可
命令(COMMANDS):允许授权的用户通过 sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔
实验 例:visudo进入编辑
让某个用户可以使用那个命令
liunx|10.系统安全及应用
文章图片

zhangsan用户创建用户时不需要密码,控制账号锁定解锁等需要密码
liunx|10.系统安全及应用
文章图片

sudo输入命令第一次默认5分钟,前提是密码没改
终端登录安全控制 限制root只在安全终端登录
禁止普通用户登录 当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登录系统。这时 候,只需要简单地建立/etc/nologin 文件即可。login 程序会检查/etc/nologin 文件是否存在, 如果存在,则拒绝普通用户登录系统(root 用户不受限制)
touch /etc/nologin #除root以外的用户不能登录了。
此方法实际上是利用了 shutdown 延迟关机的限制机制,只建议在服务器维护期间临时 使用。当手动删除/etc/nologin 文件或者重新启动主机以后,即可恢复正常。
vi /etc/securetty 虚拟机内 远程不可
liunx|10.系统安全及应用
文章图片

liunx|10.系统安全及应用
文章图片

liunx|10.系统安全及应用
文章图片

删除之后就可登陆
liunx|10.系统安全及应用
文章图片

liunx|10.系统安全及应用
文章图片

虚拟机内 远程不可
虚拟控制台的选择可以通过按下Ctrl+Alt键和功能键Fn(n=1~6)来实现(tty1-tty6) tty1 图形界面 tty2-6 字符界面
注释 tty5 tty6
root 就不能登录
按Ctrl+Alt键和功能键F(1-12),F5,6不可登陆
使用last命令显示用户或终端登录情况
liunx|10.系统安全及应用
文章图片

liunx|10.系统安全及应用
文章图片

网络端口扫描nmap SYN(synchronous建立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)
Sequence number(顺序号码)
Acknowledge number(确认号码)
端口的取值范围是:0-65535 1-1027 0(是预留的特殊端口)
其中,扫描目标可以是主机名、IP 地址或网络地址等,多个目标以空格分隔
常用选项:
-p:分别用来指定扫描的端口
-n:禁用反向 DNS 解析(以加快扫描速度)
扫描 类型决定着检测的方式,也直接影响扫描的结果。
有的时候开启dns解析 通过该域名 回的是反向解析 把IP解析成域名 我禁止反向解析可以加快速度
netstat -natp | grep 80 查看本地占用80端口的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 通而放弃扫描。
防火墙是有软件形式,和硬件形式的,防火墙是禁ping的
禁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
例:nmap -p 80 192.168.226.100-200
检测 IP 地址位于 192.168.226.100-200的主机是否开启文件共享服务
liunx|10.系统安全及应用
文章图片

netstat命令 查看当前操作系统的网络连接状态、路由表、接口统计等信息,它是了解网络状态及排除网络服务故障的有效工具
选项:
-n:以数字的形式显示相关的主机地址、端口等信息
-r:显示路由表信息
-a:显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-l:显示处于监听(Listening)状态的网络连接及端口信息
-t:查看 TCP(Transmission Control Protocol,传输控制协议)相关的信息
-u:显示 UDP(User Datagram Protocol,用户数据报协议)协议相关的信息
-p:显示与网络连接相关联的进程号、进程名称信息(该选项需要 root 权限)
netstat -natp 查看正在运行的使用TCP协议的网络状态信息(可配合管道符grep过滤出特定的记录)
netstat -naup 查看正在运行的使用UDP协议的网络状态信息(可配合管道符grep过滤出特定的记录)
Proto 显示连接使用的协议,
RefCnt 表示连接到本套接口上的进程数量,
Types 显示套接口的类型,
State 显示套接口当前的状态,
ion Control Protocol,传输控制协议)相关的信息
-u:显示 UDP(User Datagram Protocol,用户数据报协议)协议相关的信息
-p:显示与网络连接相关联的进程号、进程名称信息(该选项需要 root 权限)
netstat -natp 查看正在运行的使用TCP协议的网络状态信息(可配合管道符grep过滤出特定的记录)
netstat -naup 查看正在运行的使用UDP协议的网络状态信息(可配合管道符grep过滤出特定的记录)
Proto 显示连接使用的协议,
RefCnt 表示连接到本套接口上的进程数量,
Types 显示套接口的类型,
State 显示套接口当前的状态,
Path 表示连接到套接口的其它进程使用的路径名

    推荐阅读