1. 背景

最近在部署Ansible运维工具,计划使用密钥做为工具账号登录凭证,同时禁止工具账号使用密码登录。这样达到只有管控端掌握私钥,可以通过密钥连接受控端。所有受控端工具账号禁止使用密码登录。

2. 参考

链接: Linux禁止指定用户登录的方法
链接: https://blog.csdn.net/jks212454/article/details/133932076
链接: Linux命令(21)之usermod

3. 命令

3.1 usermode -L

  • 查看 usermod 手册
root@Virtual-Machine-203:~# man usermod 
USERMOD(8)                                                               系统管理命令                                                               USERMOD(8)

名称
       usermod - 修改一个用户账户

大纲
       usermod [选项] 登录

......省略

       -e, --expiredate EXPIRE_DATE
           The date on which the user account will be disabled. The date is specified in the format YYYY-MM-DD.

           An empty EXPIRE_DATE argument will disable the expiration of the account.

           This option requires a /etc/shadow file. A /etc/shadow entry will be created if there were none.
       
......省略

       -L, --lock
           Lock a user's password. This puts a '!' in front of the encrypted password, effectively disabling the password. You can't use this option with -p
           or -U.

           Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
           
......省略

       -U, --unlock
           Unlock a user's password. This removes the '!' in front of the encrypted password. You can't use this option with -p or -L.

           Note: if you wish to unlock the account (not only access with a password), you should also set the EXPIRE_DATE (for example to 99999, or to the
           EXPIRE value from /etc/default/useradd).           
  • 选项解释
    • -L, --lock 锁定用户的密码。这会产生一个“!”在加密的密码前面,有效地禁用了密码。不能将此选项与-p一起使用或-U。
      注意:如果您希望锁定帐户(不仅仅是限制使用密码访问),还应将EXPIRE_DATE设置为1。
    • -U, --unlock 解锁用户的密码。这将删除“!”在加密的密码前面。此选项不能与-p或-L一起使用。
      注意:如果您希望解锁帐户(不仅仅是使用密码访问),还应设置EXPIRE_DATE(例如,设置为99999,或设置为 /etc/default/useradd 中的EXPIRE值)。
    • -e, --expiredate EXPIRE_DATE 日期是用户账号将被禁用的日期。日期的指定格式为YYYY-MM-DD。
      空的EXPIRE_DATE参数将禁用帐户的过期。
      此选项需要 /etc/shadow文件 。如果没有,将创建对应的 /etc/shadow 条目 。

3.2 passwd -l

  • 查看 passwd 手册
root@Virtual-Machine-203:~# man passwd
PASSWD(1)                                                                  用户命令                                                                  PASSWD(1)

名称
       passwd - 更改用户密码

大纲
       passwd [选项] [登录]

......省略

       -l, --lock
           锁定指定账户的密码。此选项通过将密码更改为一个不可能与加密值匹配的值来禁用(它在密码开头添加一个“!)。

           Note that this does not disable the account. The user may still be able to login using another authentication token (e.g. an SSH key). To disable
           the account, administrators should use usermod --expiredate 1 (this set the account's expire date to Jan 2, 1970).

           被锁定了密码的用户不允许更改密码。

......省略

       -u, --unlock
           Unlock the password of the named account. This option re-enables a password by changing the password back to its previous value (to the value
           before using the -l option).

  • 选项解释
    • -l, --lock 锁定指定账户的密码。此选项通过将密码更改为一个不可能与加密值匹配的值来禁用(它在密码开头添加一个“!”)。
      请注意,这不会禁用该帐户。用户可能仍然能够使用另一个认证令牌(例如SSH密钥)登录。要禁用该帐户,管理员应该使用 usermod --expiredate 1(这将帐户的过期日期设置为1970年1月2日)。
      被锁定密码的用户不允许更改密码。。
    • -u, --unlockk 解锁指定账号的密码。此选项通过将密码更改回以前的值(更改为使用 -l 选项之前的值)来重新启用密码。。

4. 总结

当不能全面禁止Linux所有用户账号使用密码登录,强制使用密钥登录时,可以使用passwd -l 或 usermod -L 的命令锁定某个账号的密码,锁定后账号可以使用密钥登录,但不能使用密码登录,且登录后不能修改密码。这样实现了强制个别用户使用密钥登录的目的。

04-04 22:05