1.账号安全基本措施
1.1系统账号清理
-
将用户设置为无法登录、
-
锁定账户
-
删除账户
-
锁定账户密码 本质锁定
shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。
1.1.1将用户设置为无法登录
[root@localhost ~]# tail /etc/passwd #查看lisi的属性 [root@localhost ~]# chsh -s /sbin/nologin lisi #修改lisi的shell属性 Changing shell for lisi. Shell changed. [root@localhost ~]# tail -1 /etc/passwd #查看lisi的属性 lisi:x:1001:1001::/home/lisi:/sbin/nologin usermod
1.1.2锁定用户:
[root@localhost ~]# passwd -l zhaosi 锁定用户 zhaosi 的密码 。 passwd: 操作成功 [root@localhost ~]# su zhangsan [zhangsan@localhost root]$ su zhaosi 密码: su: 鉴定故障 [root@localhost ~]# passwd -u zhaosi 解锁用户 zhaosi 的密码。 passwd: 操作成功 [root@localhost ~]# passwd -u zhaosi 解锁用户 zhaosi 的密码。 passwd: 操作成功 [root@localhost ~]# su zhangsan [zhangsan@localhost root]$ su zhaosi 密码: [zhaosi@localhost root]$
1.1.3删除账户
userdel -r 用户名 家目录 家目录 无主文件 前主人的uid
1.1.4锁定配置文件
chattr
-a 让文件或目录仅供附加用途。只能追加
-i 不得任意更动文件或目录。
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow #加i [root@localhost ~]# useradd liqi useradd:无法打开 /etc/passwd [root@localhost ~]# lsattr /etc/passwd /etc/shadow ----i----------- /etc/passwd ----i----------- /etc/shadow chattr -i /etc/passwd /etc/shadow
1.2密码安全控制
1.2.1设置密码规则
对于新建用户
可以修改 /etc/login.defs 文件里的内容来设置密码规则
[root@localhost ~]# vim /etc/login.defs #适用于修改后生效后修改的用户 -------------------------------- 25 PASS_MAX_DAYS 99999 26 PASS_MIN_DAYS 0 27 PASS_MIN_LEN 5 28 PASS_WARN_AGE 7 [root@localhost ~]# tail -5 /etc/shadow #修改密码有效期限
对于已有用户可以使用chage命令
chage
chage [选项] 用户名 -m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。 -M:密码保持有效的最大天数。 -w:用户密码到期前,提前收到警告信息的天数。 -E:帐号到期的日期。过了这天,此帐号将不可用。 -d:上一次更改的日期。 -i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。 [root@localhost ~]# chage -d 0 zhangsan #强制张三下一次登录一定修改密码(密码符合复杂性要求) [root@localhost ~]#chage -M 30 lisi #设置密码有效期为30天 [root@localhost ~]#cat /etc/shadow|tail -1 lisi:!!:19055:0:30:7::: 第5字段 man 5 shadow
1.3 命令历史
Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。
#可以使用以下命令临时清除历史命令 history -c clear [root@localhost ~]#vim /etc/profile ............................. export HISTSIZE=200 ###退出清空密码############# [root@localhost ~]#vim .bash_logout #退出后清除 # ~/.bash_logout echo " " >~/.bash_history #一定要加空格 [root@localhost ~]#vim .bashrc #开机后清除 echo " " >~/.bash_history #设置超时时间 [root@localhost ~]# vi /etc/profile ................................. export TMOUT=60s
1.4切换用户
-
su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
su [options...] [-] [user [args...]]
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
说明:root su至其他用户无须密码;非root用户切换时需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
su 与 su-
即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。
[zhangsan@localhost ~]$ pwd /home/zhangsan [zhangsan@localhost ~]$ su 密码: [root@localhost zhangsan]# pwd /home/zhangsan [zhangsan@localhost ~]$ su - 密码: 上一次登录:二 7月 13 10:24:14 CST 2021pts/1 上 [root@localhost ~]# pwd /root
-
限制使用su命令的用户
[root@localhost ~]# gpasswd -a lisi wheel #将用户加入 wheel组 root [root@localhost ~]#vim /etc/pam.d/su #开启服务 #auth required pam_wheel.so use_uid vim /etc/pam.d/su 2 # auth sufficient pam_ rootok.so 6 #auth required pam_ wheel.so use_ _uid a)以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。 b)两行都注释也是运行所有用户都能使用su命令,但root'下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。) c)如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令 d)如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。
1.5sudo
superuser do
sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。
sudo特性:
-
sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
-
sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
-
sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
-
sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
[root@localhost ~]#vim /etc/sudoers [root@localhost ~]#visudo #语法检查 visudo -c #检查语法
配置文件格式说明:/etc/sudoers, /etc/sudoers.d/
配置文件中支持使用通配符 glob
/bin/mount /dev/cdrom /mnt /usr/bin/mount /dev/cdrom /mnt/ #用户 登入主机 = (代表用户) 命令 #user host = (runas) command root ALL= ALL(绝对路径) user: 运行命令者的身份 host: 通过哪些主机 多个 192.168.91.100 - 110 (runas):以哪个用户的身份 command: 运行哪些命令 User和runas: username(用户名) #uid(id号) %group_name(组名) %#gid(组id) user_alias|runas_alias(别名) MYUSER=zhangsan,lisi host: ip或hostname(IP地址或主机名) host_alias(别名) localhost command: command name (命令) directory (文件夹里的命令) sudoedit (可以编辑sudoers这个文件,变相变成管理员) Cmnd_Alias (命令别名) 范例: root ALL=(ALL) ALL ## Allow root to run any commands anywhere root ALL=(ALL) ALL lisi ALL=(root) /usr/bin/mount /dev/cdrom /mnt/ #可以跟多个命令 lisi ALL=(root) /usr/bin/mount /dev/cdrom /mnt/,/usr/bin/mount /mnt/ #也可以对组进行操作 %在前表示组 ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL [root@localhost ~]#gpasswd -a liwu wheel 正在将用户“liwu”加入到“wheel”组中 wheel组表示管理员组是比较特殊的一个组,在wheel组中的成员可以使用任何命令 #思考这个设置有意义么? root ALL=(ALL) ALL [root@localhost ~]#vim /etc/passwd #修改passwd文件中root的uid [root@localhost ~]$sudo -ulisi cat /etc/shadow #-u指定用户的意思 ####密码问题 [root@localhost ~]#sudo -V #可以查看相关配置信息 #67 Defaults env_reset,timestamp_timeout=2 #启用sudo操作日志 visudo Defaults logfile = "/var/log/sudo"
1.6别名
sudo别名有四种类型:
-
User_Alias(用户)
-
Runas_Alias(代表用户)
-
Host_Alias(登录主机)
-
Cmnd_Alias(命令)
###别名 Host_Alias MYHOSTS = kgc,localhost User_Alias MYUSERS = zhangsan,wangwu,lisi Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm MYUSERS MYHOSTS=NOPASSWD:MYCMNDS root ALL=(ALL) ALL 用户 主机名ip= 命令
1.6.2子目录
[root@localhost sudoers.d]#vim /etc/sudoers.d/test lisi ALL= sudoedit #lisi 变相管理员 lisi vim sudoers [root@localhost sudoers.d]#chmod 440 test #设置权限,加固安全 [root@localhost ~]#su lisi [lisi@localhost root]$ sudoedit /etc/sudoers #李四使用sudoedit 可以修改sudo配置文件 通配符 ? 任意单一字符 * 匹配任意长度字符 [wxc] 匹配其中一个字符 [!wxc] 除了这三个字符的其它字符 \x 转义 [[alpha]] 字母 [root@localhost sudoers.d]#vim /etc/sudoers.d/test liliu ALL= /bin/cat /var/log/vmware*
1.7 grub 加密
/etc/grub.d目录
定义每个菜单项的所有脚本都存放在/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 2加密
由于GRUB 2负责引导linux系统,其作为系统中的第一道屏障的安全性非常重要,对GRUB 2进行加密可以实现安全性。
在默认情况下,GRUB 2对所有可以在物理上进入控制台的人都是可访问的。任何人都可以选择并编辑任意菜单项,并且可以直接访问GRUB命令行。要启用认真支持,必须将环境变量超级用户设置为一组用户名(可以使用空格、逗号、分号作为分隔符)这样就只允许超级用户使用GRUB命令行、编辑菜单项以及执行任意菜单项。
GRUB 2密码支持以下两种格式
-
明文密码:密码数据没有经过加密,安全性差
-
PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。
先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成grub配置文件。
在/etc/grub.d/00_header文件中添加用户和PBKDF2加密口令的格式如下。
[root@kgc ~]# grub2-mkpasswd-pbkdf2 #根据提示设置GRUB菜单的密码 输入口令: Reenter password: 123456 PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.E96097D1B1E470345D9FB62759335832B4A0F39CD4C9A57B502BD59CF1B8C393EEA37847984E242AAD4BFBB72E4BDC2196E6A7495CE7C86BF3D2498A34CAC2B7.B2EB99ED40267AE9496357B78C0DC04CE79957980A4A3FFA577B7502D70A5412D2EAD5CE4DAAC0FE068621CB29B76E44A7645EDCC7784FF20E113AF0B95E3467i [root@kgc ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak [root@kgc ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak #备份文件 [root@kgc ~]# vim /etc/grub.d/00_header #最后 cat << EOF set superusers="root" #设置登录用户 password_pbkdf2 root #设置密码 grub.pbkdf2.sha512.10000.E96097D1B1E470345D9FB62759335832B4A0F39CD4C9A57B502BD59CF1B8C393EEA37847984E242AAD4BFBB72E4BDC2196E6A7495CE7C86BF3D2498A34CAC2B7.B2EB99ED40267AE9496357B78C0DC04CE79957980A4A3FFA577B7502D70A5412D2EAD5CE4DAAC0FE068621CB29B76E44A7645EDCC7784FF20E113AF0B95E3467i EOF 使用 grub2-mkconfig 命令生成新的 grub.cfg 配置文件。 [root@kgc ~]# grub2-mkconfig -o /boot/grub2/grub.cfg //生成新的 grub.cfg 文件 重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。 cat << EOF set superusers="root" password_pbkdf2 root grub.pbkdf2.sha512.10000.4F3CD9383616C3AAFB1E98A289CB707A6FEEDAE7BEFB10A59642FE641C8F13AD9A27EAD43DEB07D9F4228149C716FA40C8C04E13E98FFAC45EF7AA2AD76C96B9.49CEC46B324DC9A94D0B461C711569ADB79213708929B1891232DB5FE31EC6F5A0A4E4D0A4AA0EAA64E38A6876EEB3B5EBF8991D0FB04537E1F39D1AA40D1AD5 EOF cat << EOF set superusers="用户" password_pbkdf2 用户 加密密码 EOF [root@localhost ~]#grub2-setpassword #直接设置密码