系统安全及应用
账号安全控制
系统账号清理
账户文件锁定
chattr +/-i 文件#锁定/解锁账户文件
点击查看选项
A:即Atime,告诉系统不要修改对这个文件的最后访问时间。
S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:当dump程序执行时,该文件或目录不会被dump备份。
D:检查压缩文件中的错误。
i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
t:文件系统支持尾部合并(tail-merging)。
X:可以直接访问压缩文件的内容
系统管理基本命令
将非登录用户的Shell设为/sbin/nologin
usermod -s /sbin/nologin 用户名
·锁定长期不使用的账号
usermod -L 用户名
passwd -l 用户名
passwd -S 用户名 #查看用户账号状态
·删除无用的账号
userdel [-r] 用户名
·锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow #锁定账号及密码文件
lsattr /etc/passwd /etc/shadow #查看账号及密码文件
chattr -i /etc/passwd /etc/shadow #解锁账号及密码文件
设置密码有效期
vi /etc/login.defs#对于新建的用户,修改配置文件
PASS_MAX_DAYS 99999/n #99999=无限时间/n=天数
chage 选项 用户
选项
点击查看代码
-d 指定密码最后修改日期
-E 密码到期的日期,过了这天,此账号将不可用,0表示马上过期,-1表示永不过期
-h 显示帮助信息并退出
-I 密码过期后,锁定账号的天数
-l 列出用户及密码的有效期
-m 密码可更改的最小天数。为零代表任何时候都可以更改密码
-M 密码保持有效的最大天数
-W 密码过期前,提前收到警告信息的天数
cat /etc/shadow #发现用户密码有效期为99999天
vim /etc/login.defs #更改最大有效期为30天
# PASS_MAX_DAYS 99999
PASS_MAX_DAYS 30
useradd wangwu && echo "000000" | passwd --stdin wangwu #创建wangwu用户
cat /etc/shadow | grep wangwu #查看密码有效期为30天
用法举例
chage -M 30 用户#用户密码有效期为30天
chage -d 0 用户#用户下次登陆必须修改密码
命令历史、自动注销
减少记录的命令条数
vi /etc/profile
修改HISTSIZE=n,n为修改条数
或末行添加export HISTSIZE=n
完成修改后source /etc/profile刷新,系统将重新读取该文件
登录时自动清空命令历史
vi /etc/.bashrc
末行添加echo "" > ~./bash_histroy
终端自动注销
vi /etc/profile
修改TMOUNT=n,n为无操作的秒数,若n秒无操作,账户将自动注销
完成修改后source /etc/profile刷新,系统将重新读取该文件
用户切换与提权
su 用户安全切换
su - root切换用户后进入目标用户的登录shell环境
修改/etc/pam.d/su认证配置,去掉开头#注释,以启用pam_wheel认证
vim /etc/pam.d/su
auth required pam_wheel.so use_uid
只有在wheel组中的用户可以正常切换root用户,查看wheel组,其中没有已添加的用户
grep "^wheel" /etc/group
再次尝试切换root用户,权限拒绝
su - root
将用户加入wheel组
gpasswd -a 用户 wheel
再次尝试切换root用户,成功切换
su - root
sudo 用户提权
提升普通用户执行权限
使用visudo编辑配置文件/etc/sudoers
user MACHINE=COMMANDS
user:授权的用户名,或%组名,表示组内所有用户。
MACHINE:使用此配置文件的主机名称,一般设为localhost或者实际主机名。
COMMANDS:允许授权用户通过sudo执行的特权命令,需要命令的完整路径,多个以,分隔。
集中定义别名:User_Alias、Host_Alias、Cmnd_Alias,别名必须大写。
例子:
允许用户jerry、tom、kcce在主机smtp、pop中执行rpm、yum命令。
User_Alias OPERATORS=jerry,tom,kcce
Host_Alias MAILSVRS=smtp,pop
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
OPERATORS MAILSVRS=PKGTOOLS
通配符、取反符号!,一般授权某个目录下所有命令,但取消其中个别命令时使用。
zhangsan localhost=/sbin/,!/sbin/ifconfig,!/sbin/route
启用日志,配置文件添加以下参数。
Defaults logfile="/var/log/sudo"
例子
已有普通用户lisi、现有网卡配置
id lisi
ifconfig ens33
使用lisi尝试修改网卡地址,无法修改
ifconfig ens33 192.168.128.128
sudo ifconfig ens33 192.168.128.128
ifconfig ens33
使用root用户编辑/etc/sudoers,给lisi添加授权
visudo /etc/sudoers
lisi localhost=/sbin/ifconfig
再次使用lisi用户修改地址,成功修改
sudo ifconfig ens33 192.168.128.128
ifconfig ens33
使用sudu -l查看自己的sudo配置
sudo -l
GRUB限制
默认情况下,CentOS 7启动时,是可以随意进入GRUB菜单修改引导参数的,为了安全,可以对其设置密码,只有拥有相应的用户与密码才可以进入
例子
备份需要修改的GRUB配置文件
cp -p /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp -p /etc/grub.d/00_header /etc/geub.d/00_header.bak
创建一个GRUB密码备份
grub2-mkpasswd-pbkdf2
Enter password:输入密码
Reenter password:再次输入密码
PBKDF2 hash of your password is 输出秘钥
修改/etc/grub.d/00_header,加入用户与对应的密码
vim /etc/grub.d/00_header
cat << EOF
set superusers="root"
password_pbkdf2 root 秘钥
EOF
重新创建GRUB配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
重启验证
reboot
验证结果
使用上下取消读秒,按下e默认进入3,可以随意修改引导参数,不需要密码
加入密码后,需要输入用户名、密码才可以进入3
弱口令检测
使用弱密码会增加安全风险,而管理员可以使用john the Ripper这款开源工具,可以分析弱密码,以便采取相应的安全措施
例子
安装编译器环境
yum install gcc gcc-c++ -y
源代码编译安装
tar zxvf john-1.8.0.tar.gz -C ~
ll
cd ~/john-1.8.0/src/
ls
make linux-x86-64
运行脚本,分析账户、密码文件,只有zhangsan用户的密码强度足够,没有分析出来
cd ~/john-1.8.0/run/
ls
./john /etc/passwd /etc/shadow
端口扫描
nmap 端口扫描
NMAP是一个强大的端口扫描类安全评测工具,支持ping扫描、多端口检测等多种技术
yum install -y namp更新运行环境
选项
-p 指定扫描的窗口
-n 禁用反向DNS解析(以加快扫描速度)
-sS TCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接:否则认为目标端口并未开放
-sT TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放
-sF TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只读SYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可简介检测防火墙的健壮性
-sU UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢
-sP ICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描
-P0 跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描
entstat
netstat -natp #查看正在运行的使用TCP协议的网络状态信息
netstat -naup #查看正在运行的使用UDP协议的网络状态信息
分别查看本机/其他主机开放的TCP、UDP端口
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1
检测192.168.80.0/24网段有哪些主机提供HTTP服务
nmap -p 80 192.168.80.0/24
检测192.168.80.0/24网段有哪些存活主机
nmap -n -sP 192.168.80.0/24
常用选项 说明
-a 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-n 以数字的形式显示相关的主机地址、端口等信息
-t 查看TCP相关的信息
-u 显示UDP协议相关的信息
-p 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)
-r 显示路由表信息
-l 显示处于监听状态的网络了解及端口信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现