系统安全及应用

一:账号安全控制

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 菜单等 只开放必要端口和业务端口,对于非必要端口,不使用端口,统统关闭

相关推荐
zxyzxyzxyzxyzz35 分钟前
Ubuntu设置Samba文件共享
linux·服务器·ubuntu
Forever Nore1 小时前
Nginx 学习
运维·学习·nginx
野犬寒鸦2 小时前
Pipeline功能实现Redis批处理(项目批量查询点赞情况的应用)
java·服务器·数据库·redis·后端·缓存
疯狂吧小飞牛2 小时前
基于ubuntu搭建gitlab
linux·ubuntu·gitlab
泽02022 小时前
Linux基本指令(一)
linux·运维·服务器
2301_801673012 小时前
ipv6学习
linux·服务器·学习
AOwhisky3 小时前
板块三章节3——NFS 服务器
运维·服务器·php
₯㎕星空&繁华3 小时前
接口自动化-pytest
运维·经验分享·笔记·自动化·pytest·接口
从零开始的ops生活3 小时前
【Day 18】Linux-DNS解析
linux·运维·服务器
AI克斯3 小时前
【VSCode】 使用 SFTP 插件实现多服务器同步
服务器·ide·vscode