十、系统安全及应用

十、系统安全及应用

系统账号清理

grep "/sbin/nologin$" /etc/passwd
usermod -s /sbin/nologin 用户名
#账号锁住
usermod -L zhangsan #锁定账号 
passwd -S zhangsan # 查看账号状态
passwd -l zhangsan 锁定用户账户
#解锁账号
usermod -U zhangsan #解锁账号 
passwd -u zhangsan  #解锁账号 
删除无用账号
userdel -r 用户名

如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方法。使用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       #查看为解锁的状态
删除无用的账号 
userdel

密码安全控制

#密码安全控制
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
验证结果
WARNING! The remote SSH server rejected X11 forwarding request.
You are required to change your password immediately (root enforced)
Last login: Tue Jun  8 11:51:43 2021 from 192.168.1.131
WARNING: Your password has expired.
You must change your password now and login again!
更改用户 zhangsan 的密码 。
为 zhangsan 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
无效的密码: 密码未通过字典检查 - 它基于字典单词
新的 密码:
无效的密码: 密码未提供
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
#验证检查 Linux 上特定用户的密码到期日期
chage -l zhangsan
chage -l lisi
检查 Linux 上除系统用户外的所有用户的密码有效期
下面的 shell 脚本将显示有到期日期的用户列表。
# for user in $(cat /etc/passwd |cut -d: -f1); do echo $user; chage -l $user | grep "Password expires"; done | paste -d " "  - - | sed 's/Password expires#g' | grep -v "never"

命令历史限制

vim /etc/profile #用于新登录用户

export HISTSIZE=15 #适用于当前用户

验证history中保留15条就前面记录将删除

history -c #临时的清楚

vim .bash_history

echo " " > .bash_history #清空记录

终端自动注销

#闲置600秒后自动注销
vi /etc/profile #适用于新登录用户 
export TMOUT=600  #适用于当前用户

当正在执行程序代码编译、修改系统配置等消耗时较长的操作时,应避免设置TMOUT。必要时可以执行“unset TMOUT”命令取消TMOUT变量设置。除此之外,可以修改用户宿主目录中的~/.bash_logout文件,添加情况历史命令的操作语句。这样,当用户退出已登录Bash环境以后,所记录的历史命令将自动清空。

vim ~/.bash_logout

history -c 临时消除

clear

限制su命令用户

在/etc/pam.d/su文件里设置禁止用户使用su命令
vim /etc/pam.d/su
2 # auth sufficient pam_ rootok.so
6 #auth required pam_ wheel.so use_ _uid

a)以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
b)两行都注释也是运行所有用户都能使用su命令,但root’下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
c)如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
d)如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。

[root@localhost ~]# gpasswd -a zhangsan wheel   #添加授权用户 zhangsan
正在将用户“zhangsan”加入到“wheel”组中
[root@localhost ~]# grep wheel /etc/group #确认 wheel 组成员
wheel:x:10:zhangsan 
[root@localhost ~]# vi /etc/pam.d/su
#%PAM-1.0 
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid    #去掉此行开头的 # 号

启用 pam_wheel 认证以后,未加入到 wheel 组内的其他用户将无法使用 su 命令,尝 试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。

PAM安全认证

Linux-PAM,是linux可插拔认证模块,是一套可定制、 可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。
PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证
模块,模块放置在/1ib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的
密码,这就是su命令通过调用PAM模块实现的。
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 模块及其参数
PAM 认证类型包括四种:
认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等;
密码管理(password management):主要是用来修改用户的密码; 
会话管理(session management):主要是提供对会话的管理和记账。 控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)

sudo机制提升权限

sudo:通过su命令可以非常方便地切换为另一个用户,前提条件知道目标用户地登录密码。

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

用户组设置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  #前面不需要输入密码 ,后面需要输入密码


验证1
[wangliu@kgc root]$ sudo /usr/sbin/useradd tom
[sudo] wangliu 的密码:
[wangliu@kgc root]$ tail -2 /etc/passwd
wangliu:x:1005:1005::/home/wangliu:/bin/bash
tom:x:1006:1006::/home/tom:/bin/bash

案列二 用户可以临时创建网卡  
 visudo
Tom  kgc=(root) NOPASSWD:/usr/sbin/ifconfig

验证2
su - Tom
[Tom@kgc root]$ ifconfig  ens33:0 192.168.1.11/24
#初次使用sudo时需验证当前用户的密码,默认超时时长为5分钟,在此期间不再重复验证密码。
sudo - l
#查看当前用户获得哪些sudo授权

终端登录安全控制

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

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

注释 tty4
root 就不能登录

网络端口扫描nmap

SYN(synchronous建立联机)

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)

Sequence number(顺序号码)

Acknowledge number(确认号码)

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

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 通而放弃扫描。

通过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秒解锁
注解:
deny 指定最大几次认证错误,如果超出此错误,将执行后面的策略。如锁定N秒,如果后面没有其他策略指定时,默认永远锁定,除非手动解锁。
lock_time 锁定多长时间,按秒为单位;
unlock_time 指定认证被锁后,多长时间自动解锁用户;
even_deny_root root用户在认证出错时,一样被锁定
root_unlock_time root用户在登录失败时,锁定多长时间。该选项一般是配合even_deny_root 一起使用的。

手动解除锁定:
查看某一用户错误登陆次数:
pam_tally2 –-user
例如,查看work用户的错误登陆次数:
pam_tally2 –-user root
清空某一用户错误登陆次数:
pam_tally2 –-user –-reset
例如,清空 work 用户的错误登陆次数,
pam_tally2 –-user work –-reset

pam 认证的服务配置文件目录 /etc/pam.d
pam_tally2 --user=root 查看当前用户登陆失败的次数
pam_tally2 --user=sshuser --reset 解锁用户

/etc/pam.d/login中配置只在本地文本终端上做限制;
/etc/pam.d/kde在配置时在kde图形界面调用时限制;
/etc/pam.d/sshd中配置时在通过ssh连接时做限制;
/etc/pam.d/system-auth中配置凡是调用 system-auth 文件的服务,都会生效。

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

netstat命令 查看当前操作系统的网络连接状态、路由表、接口统计等信息,它是了解网络状态及排除网络服务故障的有效工具
-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过滤出特定的记录

小结:

一、账号管理
锁定 锁定对象:账号 文件/目录
账号锁定:passwd usermod
文件/目录锁定:chattr +i lsattr 目标对象

二、密码安全
chage 命令 控制账户的密码
/etc/login.defs
最长密码有效期
最小密码有效期
失效时间
提示时间

三、历史记录控制
linux中 在执行命令的同时,会保存在内存中->磁盘中,表现形式:~./bash_history
所以,想要完全清空,清空缓存 + 清空磁盘
或者在~./bash_logout 中定义清除日志
PS:环境变量
/etc/profile ——》当前系统的所有用户生效
./bash_profile(./bashrc) ——》 当前用户生效

四、su 切换用户登陆
管理使用su命令的用户或附加组(wheel)对象
配置文件:PAM模块的配置:/etc/pam.d/su
可是实现的是:
控制用户,分为root 用户和组用户(wheel组)
可以通过将普通用户添加到wheel组中,来实现“赋权”——》可以使用su切换

五、sudo “提权”(暂时接用root用户的权限来执行操作)
visudo : 标准格式: 用户/%组名(表示组) 主机名=命令(绝对路径)
可以通过控制例如: zhangsan ALL=NOPASSWD: /usr/sbin/,PASSWD: /usr/bin/
提权的目的:可以有效减少重复输入root密码的次数/频率

六、PAM 原理
用户——》访问服务——》进行pam验证——》调用对应的so(模块)
如何查看指定的一个服务程序/命令工具,是否能被pam管理?
ls /etc/pam.d/ | grep 名称对象

七、终端登陆
对于用户登陆终端的id进行限制
控制的文件:/etc/securetty ——》控制指定的终端ID
——》可以在非远程登陆的终端上,来切换终端 alt + ctrl + [FN] +F1-F6

八、Nmap 端口扫描
可以使用NMAP 扫描目主机,主要输出的内容在于端口、协议、主机ip、是否存活
作用场景:
1、扫描指定协议(TCP/UDP)端口的目标IP、主机名、网络号 是否开启
2、扫描指定网段中哪些主机是存活/开启的

九、Netstat 命令
netstat 是查看指定协议的网络信息,包含:
① 协议(TCP/UDP) TCP
② 队列 queue 接收队列 0
③ 队列 queue 发送队列 0
④ IP:Port :::80(IPV6) 192.168.226.131:80(接收端) 192.168.226.132:Port(发送端)
⑤ LISTEN 状态 包含了连接状态、断开状态、等待状态
⑥ PID/进程任务 3459/httpd

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