在Linux系统中,用户登录密码是用于安全验证用户身份的一种方式。登录密码通常是加密后存储在系统的/etc/shadow
文件中。
如果您想要获取Linux系统中用户的登录密码,这通常是不可能的,因为密码是经过加密处理的,而且出于安全考虑,没有直接的方式可以获取它们的明文形式。
/etc/passwd详解
/etc/passwd具有统一性和标准型,各版本的Linux操作系统的/etc/passwd功能和内容格式基本相同,/etc/passwd文件为按行记录的文本文件,每行记录一个用户的信息,所有用户均可读/etc/passwd,只有超级用户可以写/etc/passwd。
/etc/passwd保存了所有用户的用于读取的必要信息,包括①用户名②密码占位符③用户标识号④用户组标识号⑤用户信息描述⑥用户登录目录⑦用户登录Shell。
username:password-placeholder:uid:gid:user-info-desc:user-login-directory:user- login-shell |
- 用户名(username):这是用户在系统中的标识,通常长度不超过8个字符,合法字符包括字母、数字、下划线和句点。
- 密码占位符(password-placeholder):该位置通常只存放一个"x",这表示密码在/etc/shadow文件中加密存储。
注:该信息位原先用于存放加密后的用户密码,但在现代Linux系统中,出于安全性考虑,真正的密码已转移到了/etc/shadow文件中。
- 用户标识号(UID):UID是用户在系统中的唯一标识号,和用户名一一对应。一般情况,超级用户是0,系统用户是1~499,普通用户是500~65535。。
- 用户组标识号(GID):该信息位记录用户所属的用户组,用户组的具体定义可以查看/etc/group文件。
- 个人信息描述:该信息位记录着用户的真实姓名、电话、地址和邮编等个人信息,各项之间用逗号分隔。它通常为空,但在某些系统中可能包含详细信息。
- 登录目录:该目录是用户登录系统后的默认目录,通常就是用户的主目录,一般在/home下。根用户登录系统后的默认的登录目录是/root。
- 登录Shell:用户以文本方式(非图形界面)登录系统后需要启动一个Shell进程。在Linux中支持多种Shell,而通常是bash。如果看到该文件中某一行以#开始,说明该用户账号被停用,即暂时不想让某个用户登录系统时可以在该用户信息所在行前加上#。
/etc/shadow详解
/etc/shadow 文件存储用户密码及其相关属性。如下。
username:password:lastchg:min:max:warm:inactive:expire:reserved |
- username:用户名,是用户在系统中的标识,通常长度不超过8个字符,合法字符包括字母、数字、下划线和句点。
- password:加密密码,存放加密存储的密码。
- lastchg:上次密码更改日期,计算自 Unix 纪元(1970-01-01)。
- min:密码最短使用期限(天)。
- max:密码最长使用期限(天)。
- warn:密码到期前的警告天数。
- inactive:密码过期后账户失效前的天数。
- expire:账户失效日期。
更新密码有效期策略,有两种方式:1)使用 chage 命令;2)直接编辑 /etc/shadow 文件。
chage 命令提供了一个安全方式来更改用户密码的过期信息。
- 查看当前密码策略:sudo chage -l username
- 设置新的密码过期时间:sudo chage -M <天数> username
- 移除密码过期限制:sudo chage -M -1 username
直接编辑 /etc/shadow 文件可以修改密码策略,但需要对文件格式和安全风险有充分理解。
以 root 权限打开 /etc/shadow,找到并编辑相关用户的条目。修改 max 字段来设定新的密码过期时间,或设置为 -1 来移除过期限制。
注意事项
1)修改 /etc/shadow 需要 root 权限。
2)直接编辑 /etc/shadow 存在风险,应谨慎操作。
3)修改前建议备份 /etc/shadow 文件。
密码操作
- 创建一般用户以 root 权限执行:adduser ***
- 删除用户:以 root 权限执行:deluser ***
- 修改用户密码:以 root 权限执行:passwd ***
*** 即用户名,修改后可以在/etc/passwd 和 /etc/shadow中查看到;
常见问题实例
问题1:创建用户后,ssh连接不上
现象1 | WARNING: Your password has expired. You must change your password now and login again! passwd: must be suid to work properly |
现象2 | # cat /etc/passwd root:x:0:0:root:/root:/bin/sh daemon:x:1:1:daemon:/usr/sbin:/bin/false bin:x:2:2:bin:/bin:/bin/false sys:x:3:3:sys:/dev:/bin/false sync:x:4:100:sync:/bin:/bin/sync mail:x:8:8:mail:/var/spool/mail:/bin/false www-data:x:33:33:www-data:/var/www:/bin/false operator:x:37:37:Operator:/var:/bin/false ftp:x:83:83:ftp:/home/ftp:/bin/false nobody:x:99:99:nobody:/home:/bin/false sshd:x:1001:1001:SSH drop priv user:/:/bin/false tel:x:1002:1002:Linux User,,,:/home/xeltel:/bin/sh ssh:x:1003:1003:Linux User,,,:/home/xelssh:/bin/sh |
现象3 | # cat /etc/shadow root:R7KE28xB3Y4Nc:10957:0:99999:7::: bin:*:10933:0:99999:7::: daemon:*:10933:0:99999:7::: sync:*:10933:0:99999:7::: halt:*:10933:0:99999:7::: uucp:*:10933:0:99999:7::: operator:*:10933:0:99999:7::: ftp:*:10933:0:99999:7::: nobody:*:10933:0:99999:7::: sshd:*::::::: tel:d53LbSKA7ZkaA:0:0:99999:7::: ssh:GVFl4IcTNQXuU:0:0:99999:7::: |
原因分析 | 1、通过查看passwd,确认账户:ssh是存在的 2、查看shadow,确认密码有效期过期,需要进行修改 |
解决方案 | 将ssh:GVFl4IcTNQXuU:0:0:99999:7::: 改为ssh:GVFl4IcTNQXuU:15695:5:99999:7:5:20000: |
问题2:一般用户,进不来特权模式
现象1 | $ su root su: must be suid to work properly |
原因分析 | 1、一般用户无法执行su命令 |
解决方案 | 需要在root用户下,对su进行设置为一般用户可执行 chmod u+s /bin/su //确保su命令具有适当的suid权限 |
问题3:无法使用root账户登录ssh
现象1 | 基于root账户登录ssh,一直报密码错误 |
现象2 | 创建一般用户,反而可以基于一般用户称号登录ssh |
原因分析 | 1、大概率是文件系统默认禁止使用root用户通过ssh远程登录linux 2、查看/etc/ssh/sshd_config 确认PermitRootLogin 是否打开?如果打开后面着是什么,如果没有打开,或者打开但后面的值为no / prohibit-password,就可以确认是系统禁止; |
解决方案 | 1、确认当前是否需要基于root用户登录,如果没必要,则创建一般用户账户,基于一般用户账户进行登录使用; 2、如何确认需要需要基于root用户登录,则修改/etc/ssh/sshd_config中的PermitRootLogin打开,并将后面的状态改为yes |
问题4:sshd执行报错
现象1 | # sshd sshd re-exec requires execution with an absolute path # |
原因分析 | |
解决方案 | 使用绝对路径启动 # /usr/sbin/sshd # |
问题5:无法使用sshd进行连接主机
现象1 | 使用PS查看,确定是没有启用 sshd 服务导致的问题 |
现象2 | # sshd sshd re-exec requires execution with an absolute path # |
现象3 | 指定路径,执行/usr/sbin/sshd,也没有成功 # /usr/sbin/sshd Missing privilege separation directory: /var/empty |
原因分析 | 没有/var/empty目录 |
解决方案 | 1、创建/var/empty文件夹:mkdir /var/empty/,重新执行/usr/sbin/sshd,执行成功,进行ssh连接正常; 2、在手动创建后,复位板子,创建的文件夹就消失了,需要重复创建,可以在自启动文件 /etc/init.d/S50sshd 中添加 mkdir /var/empty |
问题6:root账户密码被无意修改
现象1 | root账户密码被无意修改,无法正常进入到OS的界面 |
原因分析 | 密码不对,无法进行OS,进行使用; |
解决方案 | 1、将启动OS的参数中init的信息改为/bin/bash;此举可以让OS启动后,mount文件系统后赞同,不执行相关初始流程,直接进入OS的bash界面(无需输用户名+密码); 2、在bash界面下输入以下命令: 1)mount –o remount,rw / 2)passwd root //修改新密码 3)touch /.autorelable 4)exec /sbin/init //使用新的密码进入OS; |