[Linux]Linux中的/etc/passwd和/etc/shadow

因为最近工作中遇到,选择了手动在/etc/passwd中添加用户,忘了编辑/etc/shadow,导致无法使用目标账号远程登陆,特此写文夯实基础。

/etc/passwd

/etc/passwd 文件是一个纯文本文件,对所有用户可读。你可以用任何文本编辑器在/etc/password文件里直接手动进行用户管理(比如添加、修改或删除用户账户)。但这样做极其危险。如果/etc/passwd文件出现损坏,系统就无法读取它的内容了,这样会导致用户无法正常登录(即便是root用户)。用标准的Linux用户管理工具去执行这些用户管理功能就会安全许多。
每行采用了相同的格式:
name:password:uid:gid:comment:home:shell
比如:

jenkins:x:164:117:Jenkins Automation Server:/static/jenkins_slave/appsec-jenkins-s111:/bin/bash
  • name 用户登录名
  • password 用户口令。因为是加密的,常用x表示。如果为空,表明该用户登录时无需口令。
  • uid 用户标识。用户登陆进系统后,系统通过该值,而不是用户名来识别用户。(几个用户名对应的uid一样时,系统内部将他们视为同意用户,但是他们可以有不同的password, 不同的主目录以及不同的登录shell等)
  • gid 组标识, 对应着/etc/group文件中的一条记录。如果系统要对相同的一群人赋予相同的权力,则使用该值。
  • comment 保存用户的真实姓名和个人细节
  • home 指定用户的主目录的绝对路径
  • shell 如果用户登陆成功,则要执行的命令的绝对路径放在这一区域中。它可以是任何命令。

/etc/shadow

/etc/shadow是passwd文件的一个影子,它的记录行与/etc/passwd中的一一对应。它由pwconv命令根据/etc/passwd中的数据自动产生。/etc/shadow文件只有root才能查看和修改。
字段格式为:
登录名:加密口令:上次修改密码的日期:密码不可被更改的天数:密码需要被重新变更的天数:密码变更前提前几天警告:账号失效日期:账号取消日期:保留条目

修改用户工具

usermod

usermod命令是用户账户修改工具中最强大的一个。它能用来修改/etc/passwd文件中的大部分字段,只需用与想修改的字段对应的命令行参数就可以了。
比方之前使用过的修改user home directory:

sudo usermod -d /static/jenkins/ jenkins

还有诸如以下选项:

  • -l 修改用户账户的登录名。
  • -L 锁定账户,使用户无法登录。
  • -p 修改账户的密码。
  • -U 解除锁定,使用户能够登录。

passwd

修改用户密码。任何用户都能修改自己的密码,只有root才有权限修改别人的密码。

References:
http://www.chinastor.com/os/linux/092034W22016.html
https://blog.csdn.net/yaofeiNO1/article/details/54616440
https://www.cnblogs.com/linuxAndMcu/p/11112862.html