一、账号安全基本措施
1.1 系统账号清理
1.1.1 将用户设置为无法登录-- 改登录shell
登录shell是用户与计算机系统直接交互的接口,使用户能够通过命令行方式进行各种操作和管理。
所以让用户无法登录,其实就是将登录shell改为 /sbin/nologin,可以用usermod -s
更改。
usermod -s /sbin/nologin 用户名 //使用户不能登录
具体步骤:
cat /etc/passwd | grep 用户 //查看用户基本信息,找到登录shell
usermod -s /sbin/nologin 用户名 //更改登录shell
cat /etc/passwd | grep 用户名 //查看修改是否成功
su 用户名 //看看能否切换到目标用户
1.1.2 删除用户 userdel
userdel [选项] 用户名 //删除用户
userdel -r 用户名 //删除用户和此用户的家目录
1.1.3 锁定用户
方式一
usermod -L 用户名 锁定用户
usermod -U 用户名 解锁用户
方式二
passwd -l 用户名 锁定用户
passwd -u 用户名 解锁用户
1.1.4 锁定配置文件 chattr
chattr
命令用于修改文件或目录的属性,设置文件的特殊属性,使其具有更高级的保护或控制
chattr [选项] 文件名
[选项]
+i 将文件设置为“不可修改”,即无法被删除、重命名、修改内容或链接的操作
-i 取消对文件的“不可修改”属性
+a 只能向文件中添加内容,无法修改或删除已有内容
通过锁定配置文件 /etc/passwd 和 /etc/shadow ,可以防止恶意修改或者误修改,保证系统和数据的安全性。
chattr +i /etc/passwd /etc/shadow
1.2 密码安全
1.2.1 对新建用户
编辑 /etc/login.defs
文件来设置密码规则
vim /etc/login.defs
.....
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
....
:wq 保存退出
PASS_MAX_DAYS:指定用户密码的最长有效天数
PASS_MIN_DAYS:指定在更改密码之间必须等待的最小天数
PASS_MIN_LEN: 指定用户密码的最小长度
PASS_WARN_AGE:指定在密码过期之前的多少天开始向用户发出警告
1.2.2 对已有用户 chage
chage [选项] 用户名
-m:密码可更改的最小天数,m=0 代表任何时候都可以更改密码
-M:密码保持有效的最大天数
-w:用户密码到期前,提前收到警告信息的天数
-E:帐号到期的日期。过了这天,此帐号将不可用
-d:上一次更改的日期
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
chage -d 0 用户名 //强制用户下一次登录要修改密码
1.3 自动注销
设置自动注销时间
方式一
vim .bashrc 对当前用户生效
export TMOUT= .. // 闲置多久自动关闭当前终端
:wq
. .bashrc
kkiaddld
方式二
vim /etc/proflie 对所有用户生效
export TMOUT=..
:wq
reboot
1.4 清除命令历史
1.4.1 查看历史命令
history //查看历史命令
1.4.2 历史命令限制
方式一、注销时清空历史命令
vim .bash_logout
.. ..
echo ' ' > /root/.bash_history //空文件导入
...
:wq
. .bash_logout //应用修改
方式二、修改全局配置文件
vim /etc/proflie // 修改此文件 全局生效
.....
HISTSIZE =....(自定义数字) //最大显示
....
:wq
reboot //重启应用修改
补充知识
. .bashrc = source .bashrc //刷新文件 应用修改 效果等同于重启刷新
echo $x //查看设置的变量
如果是自定义的变量 要加export
export ... (全局生效)
echo xxx | passwd --stdin 用户名 //非人机交互式改密码
二、用户切换和用户提权
2.1 用户切换 su命令
su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
命令格式
su [options...] [-] [user [args...]
su [选项] 用户名 //不完全切换,上一个用户的部分设置会保留
su - 用户名 //完全切换 ,相当于重新登录,
查看su操作记录
安全日志文件:/var/log/secure
# su 普通用户 //切换到普通用户需要密码
$ su root //切换到root用户需要输入密码
whoami
2.2 用户提权 sudo命令
sudo
命令使用户以超级用户的身份去执行命令
2.2.1 命令格式
sudo [选项] 命令
-V 显示版本编号
-l 显示出自己(执行 sudo 的使用者)的权限
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-p 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u 用户名 以指定用户的权限
-s 执行环境变数中的 SHELL 所指定的 shell
2.2.2 配置文件
/etc/sudoers 配置文件
vim /etc/sudoers = visudo //编辑配置文件
-
user字段
用户名或UID
%组名或者%GID -
host字段
IP地址或主机名
ALL代表任意主机 -
代表用户字段
用户名或UID
ALL代表任意用户 -
命令字段(绝对路径)
command name (命令)
directory (文件夹里的命令)
sudoedit (可以编辑sudoers这个文件,变相变成管理员)
Cmnd_Alias (命令别名)
举例
1.lucas ALL=(root) /usr/bin/ls
用户lucas通过任何主机登入系统后,可以以root的身份运行ls命令(命令前必须加sudo)
2.%gtest ALL=(ALL) ALL
gtest组内的成员通过任何主机登入系统后,可以以任何用户的身份运行所有命令,(命令前加sudo)
2.2.3 sudo子目录
将所有提权都放在配置文件/etc/sudoers中,不便于管理。
通过再/etc/sudoers.d/下创建子目录,可以更好地管理sudo的授权规则。
/etc/sudoers.d/test1 test2.....(针对性的创建文件)
举例
vim /etc/sudoers.d/test //创建子目录(新配置文件)
...
test1 ALL= (root) sudoedit //用户test1可以使用 sudoedit 命令
...
:wq
chmod 440 test //设置权限,加固安全
2.3 区别
-
身份验证方式:
su命令(切换用户)需要输入目标用户的密码来切换到目标用户的身份。sudo命令(以超级用户执行)需要输入当前用户的密码来验证身份。
-
执行命令的方式:
su命令会切换用户的环境,包括当前工作目录和环境变量等。在切换用户后,需要重新设置所需的工作环境。sudo命令在当前用户的环境下以超级用户身份执行命令,不会切换用户的环境。这使得在执行完命令后,可以继续以当前用户身份继续工作,而不需要重新设置环境。
-
授权:
su命令切换到目标用户后,拥有目标用户的完整权限。sudo命令可以按需授予用户对特定命令或特定命令组合的访问权限。
三、PAM安全认证
3.1 什么是PAM?
PAM:Pluggable Authentication Modules,插件式的验证模块,用于管理和进行用户身份验证的模块化系统。
PAM提供了灵活和可定制的用户身份验证框架,使系统管理员能够根据需要配置和管理身份验证方式。
3.2 为什么要用PAM?
su命令的安全隐患
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险;
为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
3.3 PAM认证原理
PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_*.so
1.用户访问(应用程序需要进行用户身份验证时,会调用PAM库来初始化PAM会话)
2.确定service类型(加载哪些身份验证模块,用户名、密钥、短信验证码等等)
3.PAM根据配置文件确定是否允许访问或者进一步的操作
4.PAM会话结束时,将最终的身份验证结果返回给应用程序
3.4 PAM配置文件
只有功能较强的功能模块才有配置文件,所以配置文件的数量小于功能模块的总数
- 配置文件路径
主要配置文件
/ etc / security / ,只有功能强大的pam模块才会有主配置文件
次要配置文件(优先生效)
/etc/pam.d/
以 /etc/pam.d/login文件举例
vim /etc/pam.d/login
第一列:模块类型(module-type)
模块类型 | 功能 |
---|---|
Auth | 账号的认证和授权 |
Account | 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录) |
Password | 用户修改密码时密码复杂度检查机制等功能 |
Session | 用户会话期间的控制,如:最多打开的文件数,最多的进程数等 |
-type | 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用 |
第二列:Control:( 控制位)
- required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件
- requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
- sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的
- equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置
- optional 可选项
第三列:PAM模块
模块 | 功能 |
---|---|
认证管理(authentication management) | 接受用户名和密码,进而对该用户的密码进行认证 |
帐户管理(account management) | 检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等 |
密码管理(password management) | 主要是用来修改用户的密码 |
会话管理(session management) | 主要是提供对会话的管理和记账 |
- 模块配置文件路径
/usr/lib64/security/
3.5 PAM安全认证流程
required 无论验证成功还是失败 会继续往下验证
requisite 验证成功则继续
验证失败则立即结束整个验证过程
sufficient 验证成功则立即返回,否则忽略结果并继续
optional 一般不用于验证,只显示信息
3.6 部分PAM功能模块
3.6.1 limits模块(重要)
1)功能
功能:限制用户的资源使用,例如:可打开的文件数量,可运行的进程数量,可用内存空间
2)ulimit 命令
通过ulimit命令可以查看和设置不同类型的资源限制
ulimit [选项]
ulimit -a 显示当前所有资源的限制
ulimit -c 设置core文件的最大大小,单位为blocks
ulimit -n 设置可以打开的最大文件描述符数
ulimit -u 设置用户可创建的最大进程数
ulimit -m 设置单个进程的物理内存限制,单位为KB
ulimit -v 设置单个进程的虚拟内存限制,单位为KB
ulimit -s 设置单个栈的最大大小,单位为blocks
ulimit -f 设置单个文件的最大大小,单位为blocks
四、端口扫描工具 nmap
4.1 nmap
yum -y install nmap //安装nmap
nmap [选项] [扫描方式]
常用选项
-p:指定扫描的端口。
-n:禁用反向DNS解析(以加快扫描速度) ip转换成 域名 12222 2www.baidu.com
常用扫描方式
-sP: ICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
检测192.168.2.0/24网段有哪些存活主机
nmap -n -sP 192.168.2.0/24
4.2 服务和端口号
服务 | 端口号 |
---|---|
HTTP | 80 |
HTTPS | 443 |
Telnet | 23 |
FTP | 21 |
SSH(安全登录)、SCP(文件传输)、端口重定向 | 22 |
SMTP | 25 |
POP3 | 110 |
WebLogic | 7001 |
TOMCAT | 8080 |
WIN2003远程登录 | 3389 |
Oracle数据库 | 1521 |
MS SQL* SEVER数据库sever | 1433 |
MySQL 数据库sever | 3306 |