lock and unkock a user account on linux
Lock and Unlock a User on Linux
锁住账户的意思是,该账户不能够通过密码进行登录(当然,有别的方法进行登录,比如:通过root用户su - lockeduser
,只要没有密码验证环节即可),为什么要锁住账户呢?这是出于系统安全的考虑,因为系统上常常运行有各种各样的服务,这些服务都是以特定的用户权限来运行的,这类用户的权限应该仅限与运行服务,它们就没有登录系统的必要,锁住用户可以避免这些不该登录的用户试图通过密码验证进行登录
lock user
通过passwd命令
passwd -l username
通过usermod命令
usermod -L username
unlock user
通过passwd命令
passwd -u username
通过usermod命令
usermod -U username
lock user的实质
先列出系统部分账户的信息:
/etc/passwd的部分内容(注意,第二字段和最后一个字段)
ftp❌14:50:FTP User:/var/ftp:/sbin/nologin
nobody❌99:99:Nobody:/:/sbin/nologin
postgres❌26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
mongod❌496:492:mongod:/var/lib/mongo:/bin/false
redis❌495:491:Redis Server:/var/lib/redis:/sbin/nologin
/etc/shadow的部分内容(注意,注意第二字段)
ftp:*:15628:0:99999:7:::
nobody:*:15628:0:99999:7:::
postgres:!!:16215::::::
mongod:!!:16221::::::
redis:!!:16252::::::
passwd文件中第二字段表示的是密码的占位符,真正的密码在shadow文件的第二字段中,但是我列出的这些账户的第二字段都是!和*组成的,凡是以这两字符开头的账户都是被lock的,当你使用passwd或usermod锁账户时,实际是修改了shawod文件的第二字段(分别添加了!!和!,这只是不同命令的不同做法,其效果是一样的,都可将账户锁住),至于第二字段是 *, 表明该账户不曾有过密码(与账户密码为空是不一样的,密码为空的话,第二字段直接留空),既然不曾有过密码也就是说不可进行登录的,所以shadow文件第二字段凡是以 ! 或 * 开头的密码,其账户是被锁定的,为了保障系统安全,除了通过设置不允许以密码登录外,在passwd文件的最后一个字段中为账户指定/bin/false或/sbin/nologin这类无法登录的shell算是添加了另一层保护(即便通过密码登录认证,取得的shell也是没有登录权限的)
**注:**当你为一个账户重设密码时,原先的lock属性丢失,也就是说你将一个不应具有登录权限的账户权限放大了,这样做很具有安全风险,好的做法是从不试图改变系统中默认没有登录权限的账户的密码