目录
1.系统账号的安全管理
2.密码的安全管理
3.命令历史记录
4.用户的切换及权限提升
5.grub加密
1)把用户设置为无法登录
所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已
如果我们想创建一个新用户并将它设置为无法登陆,可以使用useradd命令
useradd 用户名 -s /sbin/nologin
这我以zi这个账户为例,可以看到最后的shell路径是/sbin/nologin
如果我们想修改已有账户为不可登录,可以使用chsh命令或是usermod命令
chsh -s /sbin/nologin 用户名
usermod -s /sbin/nologin 用户名
这里我以账户zz为例,它原来的默认路径是/bin/bash
在我使用了chsh命令之后,它的路径也变为了/sbin/nologin
2)锁定账户
如需要锁定账户可以使用usermod和passwd命令
usermod -L 用户名 //锁定用户
usermod -U 用户名 //解锁用户
passwd -l 用户名 //锁定用户
passwd -u 用户名 //解锁用户
3)删除账户
删除账户需要使用userdel命令
userdel -r 用户名
-r选项是将该用户的家目录一起删除
4)锁定配置文件
锁定配置文件其实就是限制/etc/passwd 和 /etc/shadow的这两个文件,我们知道passwd是存放用户账号信息的文件,而shadow是存放用户密码的文件,如果限制这两个文件的写入,就可以做到限制新建账户。
我们可以使用chattr命令来实现锁定配置文件
chattr +/-i 文件路径 //+i 不得任意改动文件或目录 -i解除锁定
chattr -a 文件路径 //-a 让文件或目录仅供附加用途。只能追加
lsattr 文件路径 //查看文件的属性
可以看到这两个文件都加上了i选项此时我们将无法创建用户
对于还未创建的用户,可以进入/etc/login.defs 这个文件中来修改密码规则,修改的信息会在下次创建用户时生效
我们需要修改的信息在25-28行
前几行是对下面字段的解释
PASS_MAX_DAYS 99999 //密码的最大生产周期 99999代表永久有效
PASS_MIN_DAYS 0 //密码的最小生产周期
PASS_MIN_LEN 5 //密码设置的最小长度
PASS_WARN_AGE 7 //密码过期提前警告天数
如果我们想对已有的用户进行密码的设置,可以使用chage命令
chage [选项] 用户名
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐
shell环境中为了给用户带来更好的体验,提供了历史命令机制,它会记录我们使用过那些命令,保存在命令历史文件中,但是这个机制有利有弊,非法用户如果进入我们的账户,也可以通过查看历史命令记录,来判断该账号的用途并加以破坏,所以修改命令历史记录很有必要
history -c //临时清除历史命令
可以修改/etc/profile 文件中的第46行的属性来更改历史命令出现的数量
vim /etc/profile
此外我们还可以在bash_logout和bashrc这两个文件中设置命令清除
vim .bash_logout
echo " " >~/.bash_history //退出后清除
vim .bashrc
echo " " >~/.bash_history //开机后清除
切换用户命令su 可以指定用户的身份来执行命令
切换用户的方式:
su 用户名 //非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
su - 用户名 //登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
当我们是root用户时,使用su至其他用户时不需要输入密码的,但普通用户使用su是需要密码的
此外,su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱
我们可以使用wheel组来限制使用su命令的用户
wheel相当于一个管理员组,可以通过修改配置文件来实现组内用户使用su命令
vim /etc/pam.d/su
2 # auth sufficient pam_ rootok.so
6 #auth required pam_ wheel.so use_ _uid
以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
两行都注释也是运行所有用户都能使用su命令,但root'下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令
之后我们可以使用gpasswd来将用户加入到wheel
gpasswd -a 用户名 wheel
sudo
Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行
sudo特性:
sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
在 /etc/sudoers 中可以找到使用sudo的格式为 注:可以使用通配符
用户 登入主机 = (代表用户) 命令
user host = (runas) command
当我们想要批量授权用户时,可以使用sudo的别名
sudo别名有四种类型:
User_Alias (用户)
Runas_Alias (代表用户)
Host_Alias (登录主机)
Cmnd_Alias (命令)
定义每个菜单项的所有脚本都存放在/etc/grub.d目录中,这些脚本的名称必须有两位的数字前缀,其目的是构建GRUB 2菜单时定义脚本的执行顺序以及相应菜单项的顺序,比如00_header文件首先被读取。
文件 | 描述 |
---|---|
00_header | 设置grub默认参数 |
10_linux | 系统中存在多个linux版本 |
20_ppc_terminfo | 设置tty控制台 |
30_os_prober | 设置其他分区中的系统(硬盘中有多个操作系统时设置) |
40_custom和41_custom | 用户自定义的配置 |
为了防止恶意用户通过grub菜单使用单用户模式修改服务器的密码,我们可以给grub菜单进行加密
GRUB 2密码支持以下两种格式
明文密码:密码数据没有经过加密,安全性差
PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。
根据服务器版本不同,使用的方法也不尽相同,如果使用centos7系统,只需要一条命令就可以完成修改
grub2-setpassword
如果是centos6,先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成grub配置文件。
在文件末尾添加刚刚复制id密码