Linux 用户管理知识与应用实践(四:修改密码及查询和切换用户)
Linux 用户管理知识与应用实践本章将深入讲解用户管理的知识并带领小伙伴们实践 Linux 运维中有关用户管理的工作。十、修改用户密码有效期命令 chage1、chage 命令语法和常用参数chage 命令用于查看或修改用户密码的有效期。chage [option] [login] chage [选项] [用户名]表 14-14 chage 命令的参数选项及说明2、chage 命令使用范例范例14-18创建新用户 range要求该用户在 7 天之内不能更改密码60 天以后必须修改密码过期前 10 天通知用户过期 30 天之后 禁止用户登录。[rootshy ~]# useradd range # 添加新用户 range [rootshy ~]# chage -m 7 -M 60 -W 10 -I 30 range [rootshy ~]# chage -l range # 参数 -l 用于查看用户信息 最近一次密码修改时间 7月 07, 2026 密码过期时间 9月 05, 2026 # 对应参数 -M过期时间为 60 天。 密码失效时间 10月 05, 2026 # 对应参数 -I密码停权时间为 30 天。 帐户过期时间 从不 两次改变密码之间相距的最小天数 7 # 对应参数 -m 两次改变密码之间相距的最大天数 60 # 对应参数 -M 在密码过期之前警告的天数 10 # 对应参数 -W下面来测试 -E 参数的使用[rootshy ~]# chage -E 2026-12-31 range [rootshy ~]# chage -l range 最近一次密码修改时间 7月 07, 2026 密码过期时间 9月 05, 2026 密码失效时间 10月 05, 2026 帐户过期时间 12月 31, 2026 # 用户的账户有效期被设定为指定日期。 两次改变密码之间相距的最小天数 7 两次改变密码之间相距的最大天数 60 在密码过期之前警告的天数 10 [rootshy ~]# usermod -e 2027/12/31 range [rootshy ~]# chage -l range 最近一次密码修改时间 7月 07, 2026 密码过期时间 9月 05, 2026 密码失效时间 10月 05, 2026 帐户过期时间 12月 31, 2027 # 用户的账户有效期被更改为指定日期。 两次改变密码之间相距的最小天数 7 两次改变密码之间相距的最大天数 60 在密码过期之前警告的天数 10十一、用户查询相关命令主要介绍在用户管理中查询用户的几种常见工具 id、 finger、users、w、who、last、lastlog、groups 的用法。1、id 命令id 命令通常用来查询用户和组信息以及对应的 UID、GID 等信息。[rootshy ~]# id oldboy # 查看 oldboy 的用户及组相关的信息。 uid996(oldboy) gid1004(incahome) 组1004(incahome),1003(sa) [rootshy ~]# id -u oldboy # 查看用户的 UID 996 [rootshy ~]# id -g oldboy # 查看用户的 GID 1004 [rootshy ~]# id -un oldboy # 常看用户名 oldboy [rootshy ~]# id -gn oldboy # 查看用户组名 incahome2、whoami、who、w、last、lastlog 命令whoami 命令可用于查看当前登录的用户w 命令的作用是显示已经登录的用户并且展示他都做了什么的信息。而 last、lastlog 命令可以查看用户更详细的登录信息。[rootshy ~]# whoami # 查看当前登录的用户 root [rootshy ~]# w # 显示已经登录的用户并且展示他都做了什么的信息 09:06:38 up 4 days, 7:08, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN IDLE JCPU PCPU WHAT root tty1 四21 4days 0.04s 0.04s -bash root pts/0 192.168.21.1 日21 6.00s 0.18s 0.03s w对于 w 命令的输出信息的说明上面第 1 行的输出依次显示了当前的系统时间、系统从启动到现在已经运行的时间、登录到系统中的用户数和系统平均负载。平均负载是指在 1 分钟、5 分钟、15 分钟之内系统的负载状况。USER表示登陆系统的用户。TTY表示用户使用的 TTY 名称。FROM表示用户从哪里登录进来一般是显示远程登录主机的 IP 地址或者主机名。LOGIN用户登录的日期和时间。IDLE显示终端空闲时间。JCPU表示该终端上的所有进程及子进程使用系统的总时间。PCPU当前活动进程使用的系统时间。WHAT当前用户执行的进程名称和选项。[rootshy ~]# who # 显示哪些用户正在登录登录的终端及登录时间来源主机显示的信息比w少不常用。 root tty1 2026-07-02 21:46 root pts/0 2026-07-05 21:18 (192.168.21.1)对于 who 命令的输出格式及说明名称 [状态] 线路 时间 [活动] [进程标识] 主机名名称用户的登录名。状态表明线路对用户是否都是可写的。线路类似于 pts/0、pts/1 等此线路标识在 /dev 目录中可以找到。时间用户登录系统的时间。活动某个用户在自己的线路上最后一次活动发生以来到现在的时间。如果此项是个 “.”就表示一分钟内的线路活动如果线路保持静止已经超过 24 小时或者自从系统启动以来还没有被使用过那么此项标记为 “old”。进程标识用户登录 Shell 的进程 id。主机名登录到 Linux 系统上的客户端机器标识。[rootshy ~]# last # 显示已登录的用户列表及登录时间等查看的信息与 /var/log/wtmp及 /var/log/btmp 两个文件有关。 root pts/0 192.168.21.1 Sun Jul 5 21:18 still logged in root pts/0 192.168.21.1 Thu Jul 2 21:46 - 05:46 (07:59) root tty1 Thu Jul 2 21:46 still logged in reboot system boot 3.10.0-1160.119. Thu Jul 2 21:42 - 09:20 (411:37) root pts/0 192.168.21.1 Sun Jun 14 09:30 - 05:49 (20:19) root tty1 Sun Jun 14 09:30 - 13:14 (103:44) reboot system boot 3.10.0-1160.119. Sun Jun 14 09:29 - 09:20 (2223:50) ... ... ...[rootshy ~]# lastlog # 报告最近的所有系统用户的登录信息查看的信息与/var/log/lastlog日志有关。 用户名 端口 来自 最后登陆时间 root pts/0 192.168.21.1 日 7月 5 21:18:32 0800 2026 bin **从未登录过** daemon **从未登录过** adm **从未登录过** lp **从未登录过** sync **从未登录过** shutdown **从未登录过** halt **从未登录过** ... ... ...十二、用户身份切换命令 su在 Linux 系统中超级用户 root 拥有最高权限如果管理不好 就会带来严重的系统安全隐患。因此在工作场景中只在必要时才使用超级用户权限。一般临时性工作处理都是以普通用户的身份完成的那么当普通用户需要超级用户的权限时需要用到两个重要的用户身份切换命令 su 和 sudo。1、su 命令介绍简单地说su 命令就是切换用户身份的命令。比如以普通用户 oldboy 登录到系统之后当在系统中执行 useradd 添加用户时会发现 oldboy 用户没有这个权限这个权限只能由 root 权限来执行。解决办法之一就是退出 oldboy 用户重新以 root 用户的身份登录。方法二是直接在 oldboy 用户下使用 su 命令来切换到 root 用户下进行用户添加的工作等工作完成后再退出 root 用户。上面这两个方法比较起来通过 su 命令切换是一种比较好的办法。su 命令可以在用户之间进行切换超级权限用户 root 向普通用户切换不需要密码验证其他普通用户之间或者从普通用户切换到 root都需要切换用户的密码验证。2、su 命令用法su [option] [user] su [选项] [用户名]注意若命令后面的用户名省略了则默认切换为 root 用户。从 root 用户切换到普通用户时不需要任何密码从普通用户切换到 root 用户时则需要输入 root 密码。表 14-15 su 命令的参数选项3、su 命令的使用范例范例14-19由普通用户 oldboy 切换到 root 用户。[oldgirlshy ~]$ whoami # 当前登录的用户为普通用户 oldgirl。 oldgirl [oldgirlshy ~]$ su root # 切换用户若切换的用户为 root则可以省略 root。 密码 # 输入 root 用户的密码。 [rootshy oldgirl]# env # 查看当前登录用户 root 的环境变量。 USERoldgirl ... ... ... MAIL/var/spool/mail/oldgirl PWD/home/oldgirl # 这里的家目录未发生改变。 LANGen_US.UTF-8 HISTCONTROLignoredups PYENV_SHELLbash HOME/root SHLVL2 LOGNAMEoldgirl ... ... ...注意如果使用 su 而不加上 “-” 这个参数 那么切换前的用户的环境信息还会存在这会引起很多麻烦甚至还会出现意想不到的结果。因此切换用户时最好是 “su - 用户名”。这是生产场景中标准的切换用户的操作方法。退出到普通用户重新测试[rootshy oldgirl]# exit exit [oldgirlshy ~]$ su - root 密码 上一次登录二 7月 7 09:50:08 CST 2026pts/0 上 [rootshy ~]# env|egrep USER|MAIL|PWD|LOGNAME # 再次查看环境变量。 USERroot MAIL/var/spool/mail/root PWD/root LOGNAMEroot这回环境变量的内容都已经切换到 root 下了。从上面的范例可以得出如下结论“su 用户名” 虽然能够切换到对应用户但是登录后的环境变量信息有些还是切换前用户的环境变量信息。“su - 用户名” 不但能切换到相应的用户还能将登录后的环境变量一并切换这是标准规范的操作方法。范例14-20oldgirl 用户使用 root 身份执行命令。[oldgirlshy ~]$ ls -l /root # 直接在普通用户 oldgirl 下执行命令是不允许的。 ls: 无法打开目录/root: 权限不够 [oldgirlshy ~]$ su - -c ls -l /root # 切换到 root 用户并且改变到 root 环境然后列出root家目录的文件最后退出 root 用户。 密码 # 需要输入 root 密码 总用量 308 -rw-r--r-- 1 root root 24 8月 15 2014 \ -rw-r--r-- 1 inca root 0 5月 22 19:40 alex.txt -rw-------. 1 root root 1489 2月 27 23:53 anaconda-ks.cfg -rw-r--r-- 1 root root 52 5月 26 16:07 cron.sh drwxr-xr-x. 3 root root 18 5月 25 23:41 data drwxr-xr-x. 5 root root 64 3月 9 17:34 data1 ... ... ...通过普通用户运行服务是一个很好的提升系统安全性的办法在生产环境中大多数服务都可以通过普通用户启动不使用特权端口而不用 root 用户启动。这样就可以使系统的安全性又提高一个等级同时使用普通户管理就可以了管理者不需要具有 root 权限。4、su 命令优缺点切换用户身份的 su 命令为系统管理员管理 Linux 系统带来了很多方便将用户身份切换到 root 下可以完成各种系统管理工 作。任何一个普通用户只要知道了 root 用户的密码就都能以普通用户的身份切换到 root 来完成本来无法完成的系统管理的工作。但是这样通过 su 命令切换到 root 的操作也带来了很大的安全管理问题比如系统有 8 个普通用户都可以切换到 root 身份进行系统管 理甚至还可以改掉 root 的密码让其他的普通用户无法再实现系统管理还有这么多用户中有任何一人对系统操作存在重大失误都可能导致整个系统崩溃或数据损失。这样的非集权式管理 在一定程度上对系统的安全性造成了较大的威胁。在工作中几乎有一半的问题是来自于内部。所以使用 su 命令切换身份对于多个系统管理员共同管理的场合 并不是最好的选择如果是一般的中小公司不超过 3 个管理员那么为了管理方便使用 su 来共同管理还是可以接受的。