用户账号是计算机使用者的身份标识,每一个要访问系统资源的人,必须凭借其用户
将非登录用户的Shell设为/sbin/nologin(不运行登录终端)
锁定长期不使用的账号
删除无用的账号
锁定账号文件passwd、shadow
此处我们就锁定账号文件进行讨论:
首先我们创建wangwu用户并设置密码
[root@localhost ~]# useradd wangwu
[root@localhost ~]# passwd wangwu
更改用户 wangwu 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# tail -2 /etc/passwd
dings02:x:1000:1000:dings02:/home/dings02:/bin/bash
wangwu:x:1001:1001::/home/wangwu:/bin/bash
查看文件属性状态:
[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 ~]# useradd lisi (尝试创建用户)
useradd:无法打开 /etc/passwd (无法加载文件,创建失败)
可见通过chattr +i可以锁定文件,同时解锁命令为chattr -i ,此时我们可以创建lisi用户。示例:
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]# useradd lisi
[root@localhost ~]# ls /home
dings02 lisi
我们同时可以使用“chattr +i 文件”来锁定,防止关键文件被修改。
示例:
[root@localhost ~]# chattr +i /etc/passwd
[root@localhost ~]# lsattr /etc/passwd
----i----------- /etc/passwd
[root@localhost ~]# mv /etc/passwd /home
mv: 无法删除"/etc/passwd": 不允许的操作
密码安全控制主要从以下两个方面进行:
设置密码有效期
要求用户下次登录时修改密码
查看账户密码文件:
更改密码属性文件,配置文件位置:etc/login.defs。进入编辑,示例:
[root@localhost ~]# vim /etc/login.defs
进入编辑模式,“ESC"---->”shift+:“进入末行模式,输入/99999,查找到PASS_MAX_DAYS(修改更改密码最大周期)的位置。然后改为30(密码更改周期为30天),最后wq保存退出,如图:
此设置针对创建新用户,我们新建一个“zhaoliu”用户,然后查看密码文件 vim /etc/shadow,如图可见新用户密码周期属性更改成功:
针对已有用户的密码属性更改的方法如下:
命令:chage -M 30 wangwu,示例:
还有一种设置,指定用户在下一次登录时强制其进行重新设置密码,方法如下:
命令:chage -d 0 wangwu,示例:
[root@localhost ~]# chage -d 0 wangwu
历史命令限制方式:
减少历史记录的命令条数
注销时自动清空命令历史
终端自动注销:
闲置xxx秒后自动注销
想要减少历史记录的命令条数,我们可以先进入/etc/profile环境变量配置文件中进行设置,保存退出后将其设置为生效,命令为:source /etc/profile,或者直接重启。示例:
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/profile (使更改的配置文件生效)
[root@localhost ~]# history (历史命令只保留了20条)
10 cat /john
11 cd /opt/john
12 ls
13 vim /etc/login.defs
14 useradd lisi
15 ls /home
16 tail /etc/shadow
17 useradd zhaoliu
18 passwd zhaoliu
19 tail -3 /etc/shadow
20 chage -M 30 zhaoliu
21 tail -3 /etc/shadow
22 chage -M 30 wangwu
23 tail -3 /etc/shadow
24 chage -d 0 wangwu
25 echo "123123" | passwd --stdin wangwu
26 vim etc/profile
27 vim /etc/profile
28 source /etc/profile
29 history
[root@localhost ~]#
以上针对于所有用户,如果我们想要指针对于用户进行设置,我们可以先进入用户的家目录,然后进入“.bash_logout 中进行设置。示例:
[root@localhost ~]# cd /home/wangwu
[root@localhost wangwu]# ls -a
. .. .bash_logout .bash_profile .bashrc .mozilla
[root@localhost wangwu]# vim .bash_logout (此配置文件在用户注销时会进行加载)
# ~/.bash_logout
history -c (注销时自动清除历史命令)
clear (清除缓存)
~
针对于闲置时自动注销,我们同样可以在/etc/profile中进行配置,示例:
设置完成后设置其生效:
[root@localhost wangwu]# vim /etc/profile
[root@localhost wangwu]# source /etc/profile
[root@localhost wangwu]# 等待输入超时:自动登出
如上图可见,我们在设置生效后,在15秒后系统自动登出。
首先我们对PAM认证模块进行简要介绍:
我们一般使用su 用户来切换用户,当无意中泄露root密码后,就有普通用户登录管理员用户的潜在安全问题,此处我们介绍通过设置用户级别来限制普通用户的su切换。
为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换
PAM(Pluggable Authentication Modules)可插拔式认证模块,它是一种高效且灵活便利的用户级别的认证。
PAM认证一般遵循的顺序:Service(服务)---->PAM(配置文件)—>pam_*.so
PAM认真首先要确定是哪一项服务,然后加载对应额PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/etc/security下)进行安全认证
用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
不同的应用程序所对应的PAM模块也是不同的。
查看PAM认证的构成:
查看某个程序是否支持PAM认证,可以用ls命令进行查看,以”su”为例:
[root@localhost wangwu]# ls /etc/pam.d | grep su
ksu
su
sudo
sudo-i
su-l
查看su的PAM配置文件:
[root@localhost wangwu]# cat /etc/pam.d/su
每一行都是一个独立的认证过程
每一行可以区分为三个字段:
认证类型
控制类型
PAM模块及参数
账户安全切换管理(su):
开启“su”功能的PAM认证模块:
PAM认证模块开启后,只有将普通用户添加到wheel组中,这个组中的用户才可以使用su进行切换。
查看wheel组:
[root@localhost ~]# grep "wheel" /etc/group
wheel:x:10:
我们现在有wangwu用户,现在新增一个lisi用户,并将此用户添加到wheel组中:
[root@localhost ~]# useradd lisi
[root@localhost ~]# passwd lisi
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# gpasswd -a lisi wheel
正在将用户“lisi”加入到“wheel”组中
[root@localhost ~]# grep "wheel" /etc/group
wheel:x:10:lisi
此时wheel组中只有lisi用户,wangwu用户不在此组内。我们现在假设lisi、wangwu用户知晓管理员密码,然后分别在这两个用户中进行切换root用户操作:
[root@localhost ~]# su lisi
[lisi@localhost root]$ su root
密码:
[root@localhost ~]# su wangwu
[wangwu@localhost root]$ su root
密码:
su: 拒绝权限
[wangwu@localhost root]$
此实验证明,我们在开启su的PAM认证后,未被管理员添加到wheel组的用户,知道其他用户密码后也无法进行su切换操作。
以上为通过开启PAM认证来控制用户权限的方法
sudo命令的用途及用法
用途:以其他身份(例如root)执行授权的命令
格式:sudo 授权命令
配置sudo授权
“visudo” 或者 vim /etc/sudoers (内容相同,只是有无颜色区别)
记录格式: 用户 主机名列表=命令程序列表(可使用”which 命令“查找到命令程序的绝对路径)
我们现在有两个用户,lisi与wangwu,而处于wheel组的只有lisi,示例:
[root@localhost ~]# tail -3 /etc/passwd
dings02:x:1000:1000:dings02:/home/dings02:/bin/bash
wangwu:x:1001:1001::/home/wangwu:/bin/bash
lisi:x:1002:1002::/home/lisi:/bin/bash
[root@localhost ~]# grep "wheel" /etc/group
wheel:x:10:lisi
假设现在我们分别从这两个用户中通过提权去进行重新指定ifconfig(IP地址),实验如下:
我们先在lisi用户中查询、尝试更改IP地址:
在lisi用户下使用sudo提权操作更改IP地址:
实验结果为lisi可以更改,然后我们使用wangwu用户尝试使用sudo提权更改IP地址:
如图,wangwu用户无法进行操作,现在我们切换到root用户编辑sudo的配置文件,给与wangwu使用ipconfig命令功能的权限,输入vim /etc/sudoers 进入配置文件进行新增,如图:
在此配置文件我们同时可看到wheel组拥有所有的root权限,所以用户lisi可以通过提权更改IP地址,如图:
保存退出后,我们再切换回wangwu用户,再次尝试提权更改IP地址:
以上为通过设置sudo(提权)的配置文件来指定给与普通用户权限的管理方法。
调整BIOS引导设置
将第一引导设备设为当前系统所在的硬盘
禁止从其他设备(光盘、U盘、网络)引导系统
将安全级别设为setup,并设置管理员密码
GRUB限制
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub.d/00_header文件中,添加密码记录
生成新的grub.cfg配置文吉件
我们在正常开机时可以通过此界面进入grub菜单来设置grub的配置文件:
GRUB菜单:
可见正常情况下并不安全,对于这种情况,我们可以通过设置口令的方法来加一道“锁”去防范。
我们先进行备份两个文件,以防操作失败后可以进行恢复:
[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
使用grub2-mkpasswd-pbkdf2 的形式进行哈希的密钥加密,生成密文:
这里我们的口令设置的是“123456”,“password is”之后我们复制的部分就是针对我们的口令“123456”使用哈希算法生成的密文。
然后我们在头文件中进行设置:
[root@localhost ~]# vim /etc/grub.d/00_header
创建grub中的配置
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
/etc/grub.d/00_header: line 362: warning: here-document at line 359 delimited by end-of-file (wanted `EOF')
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-7a07272cf0604d959af555760e807dbf
Found initrd image: /boot/initramfs-0-rescue-7a07272cf0604d959af555760e807dbf.img
(配置成功)
最后进行验证,重启,init 6/reboot
如图可见我们想要进入grub菜单需要输入口令才可以进入:
以上为通过设置GRUB菜单的密文来增强账号安全性
限制root只在安全终端登录
安全终端配置:/etc/securetty
禁止普通用户登录
建立/etc/nologin文件
删除nologin文件或重启后即恢复正常
命令:touch /etc/nologin 禁止普通用户登录
命令:rm -rf /etc/nologin 取消上述登录限制
我们一般在维护的时候会进行此类设置
安全终端配置文件: /etc/securetty
[root@localhost ~]# vim /etc/securetty
建立/etc/nologin文件
[root@localhost ~]# touch /etc/nologin
限制删除nologin文件
[root@localhost ~]# rm -rf /etc/nologin
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统。它是一款强大的网络扫描、安全检测的工具。
NMAP的扫描语法:
nmap [扫描类型] [选项] <扫描目标…>
我们常会使用netstat -natp 查看本机开启的TCP端口。
或者使用netstat -naup,查看本机开启的UDP端口
对于远程而言(例如Xshell),nmap是一个探测工具,同时也可以检测对方对外开启的哪些可以被连接的端口服务,命令:
[root@localhost ~]# nmap -sT 127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-16 20:17 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0025s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
111/tcp open rpcbind
631/tcp open ipp
Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds
现在我们安装一个网站服务(httpd)端口号为80,开启服务后再使用以上的命令:
[root@localhost ~]# yum install httpd已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
..................省略部分安装过程
[root@localhost ~]# systemctl start httpd.service
(开启httpd服务)
[root@localhost ~]# nmap -sT 127.0.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-16 20:23 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0016s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http (探测到了对方刚刚开启服务的端口)
111/tcp open rpcbind
631/tcp open ipp
Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds
同理,也可以探测UDP相对于的端口
[root@localhost ~]# nmap -sU 127.0.0.1
查看指定网段内已开启的主机数量
我们可以探测指定网段内已开启的主机,如图:
[root@localhost ~]# nmap -sP 192.168.15.0/24
Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-16 20:28 CST
Nmap scan report for 192.168.15.1
Host is up (0.00071s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.15.2
Host is up (0.00051s latency).
MAC Address: 00:50:56:FC:43:A9 (VMware)
Nmap scan report for 192.168.15.254
Host is up (0.00042s latency).
MAC Address: 00:50:56:F9:C9:09 (VMware)
Nmap scan report for 192.168.15.160
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 1.99 seconds
查看其中一个主机的状态及具体开启了哪些端口,示例:
[root@localhost ~]# nmap -sT 192.168.15.2
Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-16 20:33 CST
Nmap scan report for 192.168.15.2
Host is up (0.0094s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
53/tcp filtered domain
MAC Address: 00:50:56:FC:43:A9 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
以上为nmap探测工具的基本使用方式,具体需要根据我们某一时刻的需要而进行使用~
本篇博客内容包含的各种配置文件位置及作用需要我们在日常学习、工作中能尽数熟悉,在编辑配置文件时,需注意不要使用中文输入法。
在我们实验过程中,可以把防火墙和增强型安全功能关闭,例如在nmap探测中就有可能导致探测不到指定主机的端口信息,关闭防火墙:systemctl stop firewalld.service 。关闭增强型安全功能:setenforce 0。