目录
前言:
作为一种开放源代码的操作系统,Linux系统以其安全、高效和稳定的显著优势而得以广泛应
用。这里从账户安全控制、系统引导和控制登录等方面,来学习安全优化,以及大多数安全工具的
构建和使用等,以帮助管理员查找安全隐患,及时采取有针对性的防护措施。
一、账号安全控制
1、基本安全措施
⑴、系统账号清理
Linux系统中,除了用户手动创建的各种账号之外,好包括随系统或程序安装过程而生成的其
他大量账号。除了root超级用户外,其他大量账号只是用来维护系统运作、启动或保持服务进程,
一般不允许登陆的,因此也称为非登录账号。
为确保系统安全,将非登陆用户的shell设为/sbin/nologin,表示禁止终端登陆,应确保不被人
为改动;或者删除无用账号;或者锁定长期不使用的账号;锁定账户文件passwd、shadow等。
①、将非登陆用户的shell设为/sbin/nologin。
[root@localhost ~]# grep "/sbin/nologin$" /etc/passwd #过滤已经禁止登陆shell的用户
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
…… #省略部分内容
[root@localhost ~]#useradd -s /sbin/nologin kl #设置用户kl不能登陆shell(注意设置对象为非登陆用户)
②、删除无用账号。各种非登录用户中,还有相当一部分是很少用到的账号。这些用户可以视作
冗余账号,可直接删除;还有一些随应用程序安装的用户账号,若程序卸载以后未能自动删除,则
需管理员手动清理。
③、锁定长期不使用的账号。长期不用的账号,若无法确认是否应该删除,此时就可以暂时将其锁
定。
[root@localhost ~]# usermod -L lisi #锁定用户lisi账号
[root@localhost ~]# passwd -S lisi #查看lisi账号状态
lisi LK 2021-08-18 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U lisi #解锁账号
[root@localhost ~]# passwd -S lisi
lisi PS 2021-08-18 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@localhost ~]#
④锁定账户文件passwd、shadow。若服务器中的玉壶账号已经固定,不再进行修改,还可以采取
锁定账号配置文件的方法。使用chattr命令,结合选项“+i”、 “-i”来锁定、解锁文件;使用命令lsattr
来查看文件锁定情况。
[root@localhost ~]# lsattr /etc/passwd /etc/shadow #查看文件锁定状态为解锁状态
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow #锁定账号配置文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow #查看文件锁定状态为锁定状态
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow #解锁账号配置文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]#
⑵、密码安全控制
①、避免长期使用同一个密码,要求用户下次登陆时修改密码;
②、管理员设置密码有效期,对于密码已过有效期的用户,登陆时被要求重新设置密码,否则将拒
绝登陆。
[root@localhost ~]# vim /etc/login.defs #进入编辑有效期文件,适用于新建的用户
^下面为编辑器内容:
#MAIL_FILE .mail
# Password aging controls:
…… #省略部分
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 30 #将密码有效期设为30天
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
…… #省略部分
:wq #保存并退出
[root@localhost ~]# chage -l lisi #查看用户lisi账号密码有效期是否改变
……
[root@localhost ~]#chage -M 30 lisi #将用户lisi密码有效期设置为30天,适用于已有用户设置。
若是需要强制要求用户下次登陆时重设密码,可使用chage -d 0 lils 命令。等到该用户下次登
陆时会强制要求他更改密码。
注:chage命令,用来修改帐号和密码的有效期限,针对目前系统已经存在的用户。
chage命令常用选项: | |
选项 | 说明 |
m | 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 |
M | 密码保持有效的最大天数。 |
E | 帐号到期的日期。过了这天,此帐号将不可用。 |
d | 上一次更改的日期。 |
i | 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 |
l | 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。 |
⑶、命令历史、自动注销
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风
险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在命令行输入
明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。(注:我们直接执行history -c命令可
以临时清除用户命令历史,重启之后历史命令还是有的。)
root@localhost ~]# echo "123456" | passwd --stdin oioi
更改用户 oioi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# history
1 ifconfig
……
…… #省略部分内容
……
185 cat kgc
186 cd
187 useradd oioi
188 echo "123456" | passwd --stdin oioi #可以看到我们修改lisi密码的命令历史都会在这里保留,所以安全受到了威胁。
189 history
[root@localhost ~]#
①、Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000条。修
改/etc/profile文件中的HISTSIZE变量值,它可以影响系统中的所有用户。以此减少记录的命令条
数,也可提高系统安全。
[root@localhost ~]# vim /etc/profile #进入系统环境变量配置文件,适用于新登录的用户
下面是编辑器里面内容:
…… #省略部分内容
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=10 #修改为最多只记录10条命令
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
…… #省略部分内容
( #或者可以直接输入以下命令 )
( [root@localhost ~]# export HISTSIZE=20 #适用于当前用户)
[root@localhost ~]# source /etc/profile #刷新profile文件
[root@localhost ~]# history #查找命令历史
11 echo
12 history
13 /etc/profile.d/
14 ls -a
15 vim /etc/profile #可以看到只显示了10条
16 source /etc/profile
17 history
18 vim /etc/profile
19 source /etc/profile
20 history
[root@localhost ~]#
注:此时虽然使用历史命令查看只能看到10条,但是我们整个的输入历史还保留在宿主目录~
下.bash_history文件中,我们使用cat还可以查看到
[root@localhost ~]# echo '' > ~/.bash_history #防止上述密码泄露,我们可以使用这条命令写入空字符到~/.bash_history文件中,此时就跟清空历史记录一样。
(或者可以添加“history -c”命令也可以达到同样的效果)
[root@localhost ~]# vim .bash_history #在进入文件查看,里面是没有任何命令记录的
②、上面方法还是有很多缺陷的,密码安全照样不能得到有效的保障,所以同理,我们可以在用户
宿主目录中的~/.bashrc文件和~/.bash_logout文件中,添加清空历史命令的操作语句。(这几个文
件都是与系统登陆相关的配置文件)
[root@localhost ~]# vim .bashrc #进入编辑
…………
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
echo '' > ~/.bash_history #最后一行输入写入这条命令,
~
:wq #保存并退出
(此时当用户每次登陆系统或者加载“bin/bash”时就会给历史记录文件
中写入空字符。同理在~/.bash_logout文件中写入这条命令就会在每次
用户退出登陆时清空历史记录文件)
③、还可以设置终端自动注销,设置闲置超时时间。由/etc/profile文件中变量TMOUT来控制(单
位为秒)。这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。
[root@localhost ~]# vim /etc/profile #进入系统环境变量文件
在编辑器最下面一行输入:
…… #省略部分内容
export TMOUT=180 #设置闲置超时,由变量TMOUT控制,单位为秒
~
:wq #保存退出
[root@localhost ~]# . /etc/profile #编辑完成后刷新,这里可以等待180秒验证
[root@localhost ~]#
注意:当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免设置TMOUT变
量。可以使用“unset TMOUT”命令取消TMOUT变量设置。
2、用户切换
⑴、su命令——切换用户
使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限。
命令“su 用户名” 切换后所在目录不变;
命令“su – 用户名”切换后所在目录变为用户宿主目录;
命令“whoami”可以查看当前用户。
[root@localhost ~]# su – lisi #切换后所在目录变为用户宿主目录
上一次登录:三 8月 18 16:18:34 CST 2021从 192.168.192.1pts/1 上
[lisi@localhost ~]$ whoami #查看当前用户
lisi
[lisi@localhost ~]$ exit
登出
[root@localhost ~]# su lisi #换后所在目录不变
[lisi@localhost root]$
⑵、限制使用su命令的用户
默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root) 的登录
密码,这样带来了安全风险。为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,
只允许极个别用户使用 su 命令进行切换。实现过程如下:将授权使用 su 命令 的用户添加到
wheel 组,修改/etc/pam.d/su 认证配置以启用 pam_wheel 认证。
启用pam_ wheel认证以后,未加入到 wheel内的其他用户将无法使用su命令,尝试进行切换
时将会按照“拒绝权限”来处理,而将切换用户的权限控制在最小范围内。
[root@localhost ~]# gpasswd -a kgc wheel #添加授权用户kgc
正在将用户“kgc”加入到“wheel”组中
[root@localhost ~]# grep wheel /etc/group #确认wheel组成员
wheel:x:10:kl,kgc
[root@localhost ~]# vi /etc/pam.d/su #进入配置文件
1 #%PAM-1.0
2 auth sufficient pam_rootok.so
3 # Uncomment the following line to implicitly trust users in the "wheel" group.
4 #auth sufficient pam_wheel.so trust use_uid
5 # Uncomment the following line to require a user to be in the "wheel" group.
6 auth required pam_wheel.so use_uid #去掉开头的#号
7 auth substack system-auth
8 auth include postlogin
…… #省去部分内容
[kgc00@localhost root]$ su lisi
密码:
su: 拒绝权限
使用su命令切换用户的操作将会记录到安全日志/var/log/secure文件中,我们可以根据需要进
行查看。
3、提升执行权限
⑴、sudo命令简介
通过su命令可以非常方便地切换为另一个用,但前提条件是必须知道目标用户的登录密码。对
于生产环境中的 Linux服务器,每多一个人知道特权密码,其安全风险也就增加一分。用sudo命令
就可以提升执行权限,让普通户拥有一部分管理权限,又不需要将root用户的密码让更多的人知
道。
命令格式:sudo 【选项】 【命令】
sudo命令常用选项: | |
-l | 列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的; |
-v | 验证用户的时间戳;如果用户运行sudo 后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo 操作;用-v 可以跟踪最新的时间戳; |
-u | 指定以以某个用户执行特定操作; |
-k | 删除时间戳,下一个sudo 命令要求用求提供密码; |
sudo机制的配置文件为/etc/ sudoers,文件的默认权限为440,需使用专门的visudo工其进行
编辑。虽然也可以用vi进行编辑,但保存时必须执行“w!”命令来强制操作,否则系统将提示为只读
文件而拒绝保存。
⑵、通过sudo执行特权命令
对于获得授权的用户,在执行特权命令时,需要将正常使用的命令行作为sudo命令的参数来执
行。并且第一次通过sudo执行命令时,必须以用户自己的密码进行验证。此后在时间间隔五分钟
内,不用再重复验证。
⑶、在配置文件/etc/ sudoers中添加授权
①、配置文件/etc/ sudoers中,授权记录的基本配置格式如下:
用户 主机名=命令程序列表
或用户 主机名=(用户)命令程序列表
授权配置主要包括用户、主机、命令三个部,即授权哪些人在哪些主机上执行哪些命令。配
置文件记录中每一行对应一个用户或组的sodu授权配置。各部分的具体含义如下。
● 用户(user):授权的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
● 主机名( MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用
同一份 sudoers文件,一般设为 localhost或者实际的主机名即可。ALL则代表所有主机。
● 命令( COMMANDS):允许授权的用户通sudo方式执行的特权命令,需填写命令程序的
完整路径,多个命令之间以逗号“,”进行分隔。ALL代表系统中的所有命令。(用户):用户能够以何
种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令.
②、单用户配置步骤如下
首先,我们确认一下,开始用户kgc是不能使用“useradd”命令进行创建新用户的。
[kgc2@kang root]$ sudo useradd kgc #登陆kgc用户,并使用命令useradd
…… #省略
[sudo] kgc2 的密码:
kgc2 不在 sudoers 文件中。此事将被报告。
[kgc2@kang root]$ #可以看到此时用户kgc没有权限使用该命令
接着,我们在配置文件/etc/sudoers中添加我们需要的,用户kgc可以在当前主机上面可以使
用useradd命令。
[root@kang ~]# visudo #使用命令进入配置文件
##下面是配置文件##
……
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
#kgc kang=(root) /sbin/useradd #在最后一行添加正确格式的命令
:wq #保存并退出
最后,查看结果,可以明确看到用户kgc可以使用useradd命令。
[root@kang ~]# su kgc
[kgc@kang root]$ sudo useradd kgc2
…… #省略
[sudo] kgc 的密码: #输入验证密码
[kgc@kang root]$ tail -5 /etc/passwd
kl:x:1000:1000:kl:/home/kl:/bin/bash
kgc:x:1001:1001::/home/kgc:/bin/bash
kgc2:x:1002:1002::/home/kgc2:/bin/bash #可以看到成功使用命令
[kgc@kang root]$
③、多用户多主机配置
此时,授权的命令、用户和主机都较多时,可以采用集中定义的别名。用户、主机、命令部分
都可以定义为别名(必须为大写),分别通过关键字User_Alias、
Host_Alias、Cmnd_Alias来进行设置。
需求:允许用户kgc、kgc1、kgc2在主机kang、pop中执行/sbin/目录下除了ifconfig、init和
reboot以外的其他所有命令,以及可以执行/bin/目录下rpm、useradd命令,并且不需要输入密码。
在配置文件中配置如下命令即可:
[root@kang ~]# visudo
下面是配置文件:
…… #省略部分内容
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
Host_Alisa MYHOST = kang,pop #这里往下就是我们需要配置的需求内容
User_Alisa MYUSER = kgc,kgc1,kgc2
Cmnd_Alisa MYCMND = /bin/rpm,/bin/useradd,!/sbin/ifconfig,!/sbin/init,!/sbin/reboot,/sbin/*
MYUSER MYHOST=NOPASSWD:MYCMND #别名可以自己取,单用户也可加nopasswd,必须大写。
:wq #保存退出即可
④、启用sudo日志
默认情况下,用户通过sudo方式执行的操作是没有记录的。若要启用sudo日志记录以备管理
员查看,应在/etc/sudoers文件中增加“Defaults logfile”设置。
……
## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe
Defaults logfile="var/log/sudo" ##添加该设置即可
# Defaults specification
……
二、Linux中的PAM安全认证
PAM,是linux可插拔认证模块,是一套可定制、 可动态加载的共享库,使本地系统管理员可
以随意选择程序的认证方式。
PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置
文件,从而调用本地的认证模块,模块放置在/1ib64/security下,以加载动态库的形式进行认证。
比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。
1、PAM认证原理:
⑴、PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so;(用户访问服
务,服务调用安全配置文件,配置文件里面在调用每个认证模块)
⑵、 PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),
最后调用认证模块(位于/lib64/security/下)进行安全认证。
⑶、用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不
同的应用程序所对应的PAM模块也是不同的。
如果想查看某个程序是否支持PAM 认证,可以用ls命令进行查看/etc/pam.d/
2、PAM认证的构成
以查看su的PAM配置文件为例:
PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模
块调用,每一行都可以分成三个字段列。
◆ 第一列代表PAM认证模块类型
auth: 对用户身份进行识别,如提示输入密码,判断是否为root。
account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最
大用户数等。
password: 使用用户信息来更新数据,如修改用户密码。
session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开
和关闭,挂载文件系统。
◆ 第二列代表PAM控制标记
required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进
行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影
响这类型的返回值。
optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调
用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配
置项。
◆ 第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝
对路径。同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,
这是由于每个模块针对不同的模块类型编制了不同的执行函数。
◆ 第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。传递给模块的参数。参
数可以有多个,之间用空格分隔开
3、PAM控制类型
①、required:表示该行以及所涉及模块的成功是用户通过鉴别的[必要条件]。换句话说,只有
当对应于应用程序的所有带required标记的模块全部成功后,该程序才能通过鉴别。同时,如果任
何带required标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有此类
型模块都调用完毕后才将错误消息返回调用他的程序。
反正说白了,就是必须将所有的此类型模块都执行一次,其中任何一个模块验证出错,验证
都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模
块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置
为drop-样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可
达。
②、requisite:与 required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同
之处在于其一旦失败 就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返
回错误信息。与上面的required相比,似乎要显得更光明正大一些。
③、sufficient:表示该行以及所涉及模块验证成功是用户通过鉴别的[充分条件]。也就是说只要
标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其
他模块。即便后面的层叠模块使用了requisite或者required控制标志也是一 样。当标记为sufficient
的模块失败时,sufficient模块会当做optional对待。因此拥有sufficient标志位的配置项在执行验证
出错的时候并不会导致整个验证失败,但执行验证成功之时则大门敞开。所以该控制位的使用务必
慎重。
④、optional:他表示即便该行所涉及的模块验证失败用户仍能通过认证。在PAM体系中,带有
该标记的模块失败后将继续处理下一模块。也就是说即使本行指定的模块验证失败,也允许用户享
受应用程序提供的服务。使用该标志,PAM框架会忽略这个模块产生的验证错误,继续顺序执行下
一个层叠模块。
4、实际应用
需求描述:控制用户使用命令su进行切换用户。
解决思路:启用/etc/pam.d中的pam_wheel模块。
这里用到两个模块:
◆pam_rootok:检查用户是否为超级用户,如果是超级用户(UID=0)则无条件通过认证,默认是已开启。
◆pam_wheel:只允许wheel组的用户有超级用户的存取权限,默认注释。
配置步骤:去掉pam_wheel模块“#”注释,将用户添加到wheel组中。
[root@kang ~]# useradd -G wheel kgc5 #创建并将用户kgc5添加到wheel组
[root@kang ~]# id kgc5
uid=1004(kgc5) gid=1004(kgc5) 组=1004(kgc5),10(wheel)
[root@kang ~]#
[root@kang ~]# vim /etc/pam.d/su
####以下是编辑配置文件页面:
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth required pam_wheel.so use_uid #去掉wheel模块注释
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so
~
:wq #保存并退出
结果验证:使用用户kgc5切换到root,普通用户则无法切换,提示拒绝权限。
三、系统引导和登陆控制
1、开关机安全控制
⑴、调整BIOS引导设置
● 将第一引导设备设为当前系统所在硬盘
● 禁止从其他设备(光盘、U盘、网络)引导系统
● 将安全级别设为setup,并设置管理员密码
⑵、GRUB限制
①、简介:通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这
对服务器是一个极大的威胁。这时可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许
修改引导参数。
②、实际应用:
● 使用grub2- mkpasswd-pbkdf2生成密钥
● 修改/etc/grub.d/00_header文件,添加密码记录
● 生成新的grub.cfg配置文件。
首先,生成密匙
[root@kang ~]# grub2-mkpasswd-pbkdf2 #生成密匙
输入口令: #输入密码
Reenter password: #再次输入密码
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.7258……#省略部分密匙
其次,我们先将原/boot/grub2/grub.cfg文件和/etc/grub.d/00_header配置文件进行备份。
[root@kang ~]# cd /boot/grub2/
[root@kang grub2]# ls
device.map fonts grub.cfg grubenv i386-pc locale
[root@kang grub2]# cp grub.cfg grub.cfg.bar
[root@kang grub2]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
[root@kang grub2]# ls
device.map fonts grub.cfg grub.cfg.bar grubenv i386-pc locale
接着,进入配置文件进行配置,并生成新的/boot/grub2/grub.cfg文件
[root@kang grub2]# vim /etc/grub.d/00_header #进入文件编辑
##以下是文件内容:
………… #省略部分内容,我们在最后添加以下内容
cat << EOF
set supperusers="root" #设置用户名为root
password pbkdf2 root grub.pbkdf2.sha512.10000.7258A21B54CDA84863AE302E3449
691C……#这里省略部分内容,注意自己做的时候必须将生成的密匙完整的复制到此处,而且前面需添加password pbkdf2 root,后面才跟的是密匙
EOF #注意此处是直接靠最左边,不能有任何添加
:wq #保存并退出
最后,进行验证,我们重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导
参数。
提示我们进输入用户名及密码验证才能进入GRUB菜单
2、终端及登陆安全控制
Linux服务器中,默认开启了6个tty终端,允许任何用户进行本地登陆。本地登陆的安全控制,
可以有以下几个方面:
⑴、减少开放的tty终端数
按Alt+F4或者Alt+F3等组合键可以切换终端。
⑵、禁止root用户登陆
在Linux系统中,login程序会读取/etc/securetty文件,以决定允许root用户从哪些安全终端登陆
系统。若要禁止root用户从指定的终端登陆,需将此文件中对应的行删除或注释即可。如下:
[root@kang ~]# vim /etc/securetty
console
vc/1
…… #省略
tty1
tty2
tty3
#tty4 将tty4、tty5注释掉
#tty5
…… #省略
⑶、禁止普通用户登陆
只需要简单地建立/etc/nologin文件即可。 login程序会检查/ctc/ nologin文件是否存在,如果存
在则拒绝普通用户登录系统(root用户不受限制)。建议只在服务器维护期间临时使用。结束后手
动删除即可恢复正常。
[root@kang ~]# touch /etc/nologin #禁止普通用户登陆
[root@kang ~]# rm -rf /etc/nologin #取消上述登陆限制
总结:
Linux系统的安全和优化:从账号安全控制、系统引导和登陆控制等方面阐述了安全是时刻存
在的,也给出了解决方法。