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属性丢失,也就是说你将一个不应具有登录权限的账户权限放大了,这样做很具有安全风险,好的做法是从不试图改变系统中默认没有登录权限的账户的密码

Previous
Next