系统安全及应用

一:账号安全控制

1.1 系统账号清理

1.1.1 将非登陆用户的Shell 设置为 /sbin/nologin (设置为这个解释器,禁止用户登陆)

复制代码
[root@localhost ~]# usermod -s /sbin/nologin  zhangsan           #将用户zhangsan 的登录解释器 设置为 /sbin/nologin
[root@localhost ~]# echo "123456" | passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。

在登录界面,登录zhangsan 的账号, 发现,输入完 用户账号 和 密码 后, 又会返回到登录界面

1.1.2 锁定上期不使用的账号

usermod -L 用户名 或者 passwd -l 用户名 ##锁定用户

usermod -U 用户名 或者 passwd -u 用户名 ## 解锁用户

passwd -S 用户名 #查看用户状态

复制代码
[root@localhost ~]# passwd -S zhangsan
zhangsan PS 2021-06-25 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@localhost ~]# passwd -l zhangsan       #锁定用户zhangsan
锁定用户 zhangsan 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S zhangsan         #查看用户 zhangsan 的账号状态
zhangsan LK 2021-06-25 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U zhangsan         #解锁用户 zhangsan
[root@localhost ~]# passwd -S zhangsan
zhangsan PS 2021-06-25 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

1.1.3 删除无用 的账号

userdel [-r] 用户名

复制代码
[root@localhost ~]# userdel -r zhangsan         #删除用户zhangsan , 选项  -r  表示连同它的家目录一起删除
[root@localhost ~]# id zhangsan
id: zhangsan: no such user

1.1.4 锁定账号文件 /etc/passed /etc/shadow

chattr +i 文件 #锁定文件

chattr -i 文件 #解锁文件

lsattr 文件 #查看文件是否锁定

修改用户信息会 涉及 到 /etc/passwd 和 /etc/shadow 两个文件。将这两个文件锁定,将无法 管理用户 ,如 删除/新建用户 , 修改密码等操作

复制代码
[root@localhost ~]# lsattr /etc/passwd /etc/shadow          #查看/etc/passwd 和 /etc/shadow 文件是否已经锁定
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow       #将/etc/passwd /etc/shadow 文件锁定     
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow

[root@localhost ~]# id zhangsan
id: zhangsan: no such user
[root@localhost ~]# useradd zhangsan                      #创建用户失败
useradd:无法打开 /etc/passwd
[root@localhost ~]# id test
uid=1000(test) gid=1000(test) 组=1000(test),10(wheel)
[root@localhost ~]# echo '123456' |passwd --stdin test    #修改用户密码失败
更改用户 test 的密码 。
passwd: 鉴定令牌操作错误
[root@localhost ~]# userdel test                           #删除用户失败
userdel:无法打开 /etc/passwd

 
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow       #解除 /etc/passwd 和 /etc/shadow 文件锁定     
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]# useradd zhangsan                     #解除锁定后,添加用户成功
[root@localhost ~]# id zhangsan
uid=1002(zhangsan) gid=1002(zhangsan) 组=1002(zhangsan)

1.2 密码安全控制

1.2.1 设置密码有效期

(1) 对于未创建的用户。修改 新建用户配置文件 /etc/login.defs , 修改字段 PASS_MAX_DAYS 的值

复制代码
[root@localhost ~]# vim /etc/login.defs    #修改新用户配置文件 
PASS_MAX_DAYS   30                         #设置密码有效期为 30 天

[root@localhost ~]# useradd wangwu          #创建信用户
[root@localhost ~]# cat /etc/shadow | grep wangwu
wangwu:!!:18803:0:30:7:::                  # 新用户密码有效期为30
 #/etc/shadow 的第 5 个字段保存 用户密码最长有效天

(2) 对于已有用户,使用 chage -M 时间 账户 #只有root 用户才可以使用 chage 命令

复制代码
[root@localhost ~]# cat /etc/shadow | grep test
test:密码加密数据:18803:0:99999:7:::            #此时,test 用户的密码 有效期 为99999 表示永不过期
[root@localhost ~]# chage -M 30 test           #设置test 用户密码有效期为30 天
[root@localhost ~]# cat /etc/shadow | grep test
test:密码加密数据:18803:0:30:7:::              #成功设置test 用户密码有效期为30 天

1.2.2 要求用户下一次 登录时修改密码

chage -d 0 用户名

复制代码
[root@localhost ~]# cat /etc/shadow | grep wangwu
wangwu:!!:18803:0:30:7:::                        #表示上一次修改密码时间(从1970.01.01 开始计算),
[root@localhost ~]# chage -d 0 wangwu           #设置用户wangwu 下一次登录时修改密码
[root@localhost ~]# cat /etc/shadow | grep wangwu
wangwu:!!:0:0:30:7:::                             #0表示下次登录强制修改密码

1.3 历史命令限制

历史命令,可以查看到用户之前输入的命令。

history 可以查看到用户的历史命令。历史命令默认保存1000 条。保存在 用户家目录 的 .bash_history隐藏文件中

history -c 可以清空历史命令。但是,用户家目录下的 .bash_history文件中依旧保存着历史命令

!命令字 可以执行最近使用的该命令字开头的命令

! 加编号 可以执行该编号的历史命令

复制代码
[root@localhost ~]# !ls      #调用最近一次以  ls  开头的命令
lsattr /etc/passwd /etc/shadow   #这个是最近一次 以 ls 开头的命令,执行这个命令 
---------------- /etc/passwd
---------------- /etc/shadow

root@localhost opt\]# ls rh \[root@localhost opt\]# history #查看历史命令 1 ls 2 cd . 3 rm -rf shadow.txt 4 ls 5 history \[root@localhost opt\]# !1 #执行编号为 1 的历史命令 ls rh **1.3.1 设置历史命令的数目** 历史命令的配置 在 全局文件 **/etc/profile** 中 。有个 字段 **HISTSIZE=1000,设置了历史命令的数目** ![](https://i-blog.csdnimg.cn/img_convert/f232083ec2c4d9e9c1aa719eb4bcb228.png) 可以**修改 HISTSIZE 的值** ,或者 新添加 字段 **export HISTSIZE** ,并设置数值 ``` [root@localhost opt]# vim /etc/profile    #修改全局配置文件 export HISTSIZE=30    #设置历史命令数为30 [root@localhost opt]# source /etc/profile   #重新加载文件 ``` **1.3.2 设置登录时自动清空历史命令** 用户每次登录时,都会加载**家目录下的 .bashrc** 文件。用户的历史命令保存在 用户家目录的 **.bash_history** 文件中 所以,我们可以在 用户家目录下的 **.bashrc** 文件 中设置命令 来清空 家目录 下的 **.bash_history** 文件 ``` root@localhost ~]# echo "echo '' >~/.bash_history " >> ~/.bashrc #将 echo '' > ~/.bash_history 追加重定向写入 到 ~/.bashrc 文件中 #echo '' > ~/.bash_history 表示 将空字符 覆盖重定向写入 到 ~/.bash_history 文件中 [root@localhost ~]# history 1 ifconfig 2 ping www.baidu.com 3 cd /etc/sysconfig/ 4 ls 5 cd network-scripts/ 6 ls [root@localhost ~]# init 6 #重启系统 [root@localhost ~]# history #历史命令被清空 1 history ``` ### 1.4 终端自动注销 修改全局配置文件 **/etc/profile** ,添加 字段 **export TMOUT** ,并设置数值(单位为秒) ``` [root@localhost ~]# echo "export TMOUT=600" >> /etc/profile #设置终端闲置600s 自动注销 [root@localhost ~]# source /etc/profile #重新加载文件 ``` ### 1.5 限制使用su 命令切换 将允许使用su 命令的用户加入到 wheel 组中 启用pam_wheel 认证模块 。 编辑 文件 **/etc/pam.d/su** ``` [root@localhost ~]# grep "wheel" /etc/group #查看wheel 组有哪些用户 wheel:x:10:test [root@localhost ~]# gpasswd -a zhangsan wheel #将zhangsna 用户加入 wheel 组中 正在将用户“zhangsan”加入到“wheel”组中 [root@localhost ~]# grep "wheel" /etc/group wheel:x:10:test,zhangsan [root@localhost ~]# vim /etc/pam.d/su #编辑 /etc/pam.d/su 文件 6// auth required pam_wheel.so use_uid #将文件 第6 行注释打开, 启用 pam_wheel 认证模块 [lisi@localhost ~]$ whoami lisi [lisi@localhost ~]$ su - root #lisi 不在 wheel 组中,所以切换失败 密码: su: 拒绝权限 [lisi@localhost ~]$ [zhangsan@localhost ~]$ whoami zhangsan [zhangsan@localhost ~]$ su - root #zhangsan 在wheel 组中 ,所以 可以切换 密码: 上一次登录:五 6月 25 10:19:00 CST 2021从 192.168.23.1pts/0 上 最后一次失败的登录:五 6月 25 10:46:41 CST 2021pts/0 上 最有一次成功登录后有 1 次失败的登录尝试。 [root@localhost ~]# ``` **su 的操作记录会记录在 安全日志文件 /var/log/secure 中** ### 1.6 配置sudo 授权 sudo 命令可以让普通用户 提权, 执行高权限用户 才可以执行的命令 ``` [zhangsan@localhost opt]$ ls -ld #查看/opt/目录权限,发现只有 root 用户有写(w)的权限 drwxr-xr-x. 3 root root 34 6月 25 10:41 . [zhangsan@localhost opt]$ whoami zhangsan [zhangsan@localhost opt]$ touch abc.txt #因为zhangsan 用户没有写(w)的权限,所以写入失败 touch: 无法创建"abc.txt": 权限不够 [zhangsan@localhost opt]$ sudo touch abc.txt #提权,在执行写入 [sudo] zhangsan 的密码: #输入zhangsan 用户密码 [zhangsan@localhost opt]$ ls abc.txt rh #写入成功 ``` **1.6.1配置sudo 授权** **vim /etc/sudoers** 或者**visudo** 编辑sudo 的配置文件 (注,vim /etc/sudoers 保存需要强制保存 :wq!) 格式: **用户 主机名=命令程序列表** **用户 主机名=(使用哪个用户的权限) 命令程序列表** ``` [lisi@localhost ~]$ sudo ifconfig ens33:1 192.168.100.100/24 #lisi 用户提权使用ifconfig 命令失败 我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点: #1) 尊重别人的隐私。 #2) 输入前要先考虑(后果和风险)。 #3) 权力越大,责任越大。 [sudo] lisi 的密码: 对不起,用户 lisi 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/ifconfig ens33:1 192.168.100.100/24。 [lisi@localhost ~]$ exit 登出 [root@localhost ~]# vim /etc/sudoers #修改配置文件 /etc/sudoers 或者 visudo lisi ALL=/usr/sbin/* #允许lisi 用户在所有主机 使用 /usr/sbin/下的所有命令 [root@localhost ~]# su - lisi [lisi@localhost ~]$ sudo ifconfig ens33:1 192.168.100.100/24 #提权使用ifconfig 命令成功 [sudo] lisi 的密码: [lisi@localhost ~]$ ifconfig ens33:1 ens33:1: flags=4163 mtu 1500 inet 192.168.100.100 netmask 255.255.255.0 broadcast 192.168.100.255 ether 00:0c:29:e8:7a:50 txqueuelen 1000 (Ethernet) ``` **1.6.2 /etc/sudoers 文件的编辑语法格式** (1)如果主机没有设置过主机名,可以用localhost 表示本机 。有配置过的则用实际的主机名 (2) 可以使用通配符 \* ,取反符号 !。 lisi centos=/usr/sbin/\*,!/usr/sbin/ifconfig ,表示lisi 用户可以在 主机名为 centos 的主机上提权使用/usr/sbin/ 下的所有命令,除了 /usr/sbin/ifconfig 命令 (3) ALL 代表所有。 ALL ALL=ALL ,表示所有用户在所有主机可以提权使用所有命令 (4) 用% 表示组。 %wheel 表示wheel 组 (5) 可以使用**NOPASSWD:**来免去提权时的密码输入 %wheel ALL=NOPASSWD: /usr/sbin/\* #wheel 组用户可以在所有主机上提权使用 /usr/sbin/ 下的所有命令,并且不用输入密码 (6) 支持使用关键字设置和调用别名 ,但是 别名必须大写。关键字 User_Alias、Host_Alias, Cmnd_Alias,分别表示 用户,主机,命令列表 User_Alias USERS=zhangsan,lisi #设置别名,USERS表示 用户zhangsan,lisi Host_Alias HOSTS=localhost,centos #HOSTS 表示 主机名 localhost ,centos Cmnd_Alias CMNDS=/usr/sbin/ifconfig,/usr/sbin/useradd #CMNDS 表示 命令 /usr/sbin/ifconfig 和 /usr/sbin/useradd USERS HOSTS=CMNDS #调用别名。 #允许用户zhangsan,lisi ,在本机 和 主机名centos 主机上允许 提权使用命令 /usr/sbin/ifconfig 和命令 /usr/sbin/useradd **1.6.3 查看 sudo -l 查看用户的提权** ``` [zhangsan@localhost ~]$ sudo -l [sudo] zhangsan 的密码: 用户 zhangsan 可以在 localhost 上运行以下命令: (ALL) ALL ``` **1.6.4 查看sudo 操作记录** **sudo 的默认日志文件 /var/log/sudo** 添加字段 **Defaults logfile="/var/log/sudo"** ,开启日志 ## 二:系统引导和控制登录 ### **2.1 开关机安全控制** **2.1.1 调整BIOS 引导设置** (1) 将第一引导设备设置为当前系统所在硬盘 (2) 禁止从其他设备(光盘,U盘,网络)引导设备 (3)将安全级别设为setup ,并设置管理员密码 **2.1.2 GRUB 限制** 重启系统时,按 e 直接就可以进入GRUB 菜单。需要进行限制,设置密码 ``` [root@localhost ~]# grub2-mkpasswd-pbkdf2 #设置密码 输入口令: Reenter password: PBKDF2 hash of your password is grub.pbkdf2.略过,这是一长串的密码加密 [root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.bak [root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak #备份这两个文件 [root@localhost ~]# vim /etc/grub.d/00_header #编辑文件 cat << EOF set superusers="root" password_pbkdf2 root grub.pbkdf2...... EOF [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg ``` 重启系统,进入grub 菜单需要输入账户和密码 ![](https://i-blog.csdnimg.cn/img_convert/1f77dedb703233cab51d3baa156620e3.png) ### 2.2 终端登录控制 **2.2.1 限制root 只在安全终端登录** **安全终端配置 /etc/securetty** ``` [root@localhost logs]# vim /etc/securetty #编辑配置文件,将禁止root 登录的终端注释。如注释 tty2,就禁止root在tty1 终端登录 tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8 tty9 ``` **2.2.1 禁止普通用户登录** 建立**/etc/nologin** 文件。 建立后,所有的普通用户将无法登录。删除文件后,恢复正常。或者重启系统后,/etc/nologin 文件自动消失 ``` [root@localhost ~]# touch /etc/nologin ``` ## 三:网络端口扫描 ### 3.1 NMAP 工具扫描 (1) 下载软件包 ``` [root@promote ~]# rpm -qa |grep nmap nmap-6.40-7.el7.x86_64 #如果没有安装此软件包,则下载 nmap-ncat-6.40-19.el7.x86_64 [root@promote ~]# yum -y install nmap ``` (2) 使用nmap 工具 nmap命令常用的选项和扫描类型 **-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通而放弃扫描 ``` [root@promote ~]# nmap -p 80 192.168.23.0/24 #查看192.168.23.0 网段,开发80 端口的有哪些 Starting Nmap 6.40 ( http://nmap.org ) at 2021-06-26 16:59 CST Nmap scan report for promote.ldns.rate.local (192.168.23.1) #主机iP 地址 Host is up (0.00015s latency). PORT STATE SERVICE 80/tcp filtered http MAC Address: 00:50:56:C0:00:08 (VMware) #主机mac地址 [root@promote ~]# nmap -n -sP 192.168.23.0/24 # 快速扫描查看192.168.23.0 网段哪些主机可以ping通 Starting Nmap 6.40 ( http://nmap.org ) at 2021-06-26 16:59 CST Nmap scan report for 192.168.23.1 Host is up (0.000069s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.23.2 Host is up (0.000034s latency). MAC Address: 00:50:56:ED:B2:47 (VMware) Nmap scan report for 192.168.23.254 Host is up (0.000043s latency). MAC Address: 00:50:56:EB:E6:DF (VMware) Nmap scan report for 192.168.23.10 Host is up. Nmap done: 256 IP addresses (4 hosts up) scanned in 1.96 seconds [root@promote ~]# nmap -n -sT 192.168.23.10 # 快速扫描目标 主机开放的 tcp 端口 Starting Nmap 6.40 ( http://nmap.org ) at 2021-06-26 17:00 CST Nmap scan report for 192.168.23.10 Host is up (0.00036s latency). Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 111/tcp open rpcbind Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds ``` ### 3.2 netstat 命令 **netstat命令常用选项:** **-a** :显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口) **-n** :以数字的形式显示相关的主机地址、端口等信息。 **-t** :查看TCP相关的信息。 **-u** :显示UDP协议相关的信息。 **-p** :显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限) **-r** :显示路由表信息。 **-l** :显示处于监听状态的网络连接及端口信息。 **-i** : 显示网卡接口信息 **netstat -natp #查看正在运行使用tcp 协议的相关信息** ![](https://i-blog.csdnimg.cn/img_convert/e244b3491a75f80abc1243873c377d49.png) **netstat -naup** **#查看正在运行使用的 udp 协议 相关信息** ![](https://i-blog.csdnimg.cn/img_convert/00755ded14cfe41f98f88a73406d981b.png) **netstat -na \| more** **# more 查看所有开放的端口信息** ![](https://i-blog.csdnimg.cn/img_convert/34ca74042b7beba947415a8ce0b929f8.png) **netstat -i 或者 netstat -ie** #显示网卡接口信息。 ![](https://i-blog.csdnimg.cn/img_convert/917fe4f6b759b81401b685320026bc19.png) ![](https://i-blog.csdnimg.cn/img_convert/c0b52cccac49429386aa27b7f680823f.png) ## 总结: 要保护root 账号,限制普通用户。 账户密码的设置应该复杂,英文,数字,大小写,特殊字符等,都应该有,防止暴力破解 管理普通账号,清理长期不使用的,无用的账号,清理锁定陌生账号。 授予权限要谨慎,不要给普通用户超出范围的权限。 清理历史命令,防止泄露数据。如密码等 能够对系统造成威胁的操作,要设置保护,如进入grub 菜单等 只开放必要端口和业务端口,对于非必要端口,不使用端口,统统关闭

相关推荐
purrrew11 分钟前
【Java ee初阶】网络原理
java·运维·服务器·网络·网络协议·udp·java-ee
python算法(魔法师版)26 分钟前
数据库故障排查指南:从连接问题和性能优化
服务器·网络·数据库·性能优化
滴水之功1 小时前
Ubuntu22.04怎么退出Emergency Mode(紧急模式)
linux·运维·服务器
小馬佩德罗1 小时前
Linux/AndroidOS中进程间的通信&线程间的同步 - 信号量
linux·信号量
又逢乱世1 小时前
Ubuntu 安装 HAProxy
服务器·网络·数据库
明仔丶2 小时前
开启docker中mysql的binlog日志
运维·docker·容器·binlog
wqqqianqian2 小时前
国产linux系统(银河麒麟,统信uos)使用 PageOffice 在线打开Word文件,并用前端对话框实现填空填表
linux·前端·word·pageoffice
清风来点灯2 小时前
Ubuntu22.04安装显卡驱动/卸载显卡驱动
linux·笔记·ubuntu
qrh_yogurt3 小时前
搭建spark伪分布集群
大数据·服务器·spark
还有几根头发呀3 小时前
深入理解 TCP:重传机制、滑动窗口、流量控制与拥塞控制
服务器·网络