Linux用户管理

一. 用户配置文件

用户配置文件主要包括

  • /etc/passwd 用户信息文件
  • /etc/shadow 用户密码文件
  • /etc/group 用户组信息文件
  • /etc/gshadow 用户组密码文件

1. 用户信息文件

用户信息配置文件为/etc/passwd, 查看如下:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
test:x:502:505::/home/test:/bin/bash
tony:x:503:506::/home/tony:/bin/bash
tom:x:504:507::/home/tom:/bin/bash
lw:x:505:509::/home/lw:/bin/bash
uar:x:506:510::/home/uar:/bin/bash

各字段含义:

  • 名称
  • 密码占位符x(配置文件在/etc/shadow)
  • UID(用户id, 系统主要通过UID识别用户, 系统用户0-500, 其他用户>500, 将UID手动改成0, 该用户会变成超级管理员)
  • GID(用户组id, 系统通过GID识别该用户初始组)
  • 用户描述
  • 用户家目录
  • 用户登录shell, /sbin/nologin, 不允许登陆

2. 密码配置文件(影子文件)

用户密码配置文件为/etc/shadow, 权限为000, 只有root能对其进行修改

root:$6$AZ76b/wn$jw8/5ZnecagBeRrt3j3hLGK5aLlBuoHHH/PRBViVNwG8rvYENmdTMEXpCcEiG8/MlmkGh1ART2S/xnkrzhpbC0:17230:0:99999:7:::
bin:*:15980:0:99999:7:::
.....
uar:$6$ALNMp7A9$EMdZzzClqH0bS4M1z3KpcWNuQvY9Q1Mxivu3DF3S68il0pkxvPqEsiHZnvyV235Eetd6LY3ob9PFCYV1V9kEv.:17525:10:20:7:5::

各字段含义:

  • 用户名
  • 加密后的密码, 如果密码为是*或者!!, 表示没有密码, 不能登录
  • 添加的时间戳, 单位天, 以1970-01-01为起始时间, 到添加用户时所间隔的天数
  • 两次密码修改的间隔时间, 和第三个字段相比较, 0表示没有间隔, 设置为10, 表示10天之内不能改密码, 10天之后才能改
  • 密码有效期, 和第三个字段相比, 99999天约等于200多年, 可以理解为无限制, 如过设置为20, 大于20天没有修改密码, 就不让其登陆(和第六, 第七字段相关)
  • 密码修改时间到期前的提示天数, 如uar用户, 提前七天给提示, 让其修改密码
  • 密码过期后的宽限天数, 0和不设表示密码过期后, 立即失效, -1永久生效, 如uar用户, 延后五天给提示, 让其修改密码
  • 账号失效时间, 时间戳表示
  • 保留字段

3. 用户组配置文件

用户组配置文件为/etc/group

root:x:0:
bin:x:1:bin,daemon
..
uar:x:510:

各字段含义

  • 组名
  • 组密码(x占位符, 对应组密码文件/etc/gshadow)
  • 组id
  • 组附加用户(扩展组)

4. 用户管理相关文件

  • 用户家目录(700, 添加用户自动生成)
# 添加用户生成, 生成文件模板目录为/etc/skel
-rw-------  1 uar  uar    78 12月 26 23:10 .bash_history
-rw-r--r--  1 uar  uar    18 7月  18 2013 .bash_logout
-rw-r--r--  1 uar  uar   176 7月  18 2013 .bash_profile
-rw-r--r--  1 uar  uar   124 7月  18 2013 .bashrc
  • 用户家目录模板目录(/etc/skel), 添加用户时, 默认在用户家目录创建一下文件
.  ..  .bash_logout  .bash_profile  .bashrc  .gnome2
  • 添加用户时会在/etc//var/spool/mail创建一个同户名同名的邮箱文件

二. 用户管理命令

1. 用户添加命令useradd

  • useradd命令格式 useradd [选项] 用户名
    • -u UID: 指定用户UID
    • -d 家目录: 指定用户家目录
    • -c 用户说明
    • -g 组名: 指定用户初始组(不建议更改)
    • -G 组名: 指定用户扩展组(多个用逗号分隔)
    • -s shell: 手工指定登陆shell

执行useradd -u 666 -d /hello -c "helloworld" -G root,uar -s /bin/bash hello

[root@localhost ~]# ll -d /hello/
drwx------ 3 hello hello 4096 1月   6 10:18 /hello/

[root@localhost ~]# grep hello /etc/passwd
hello:x:666:666:helloworld:/hello:/bin/bash

[root@localhost ~]# grep hello /etc/group
root:x:0:hello #hello用户的扩展组
uar:x:510:hello
hello:x:666:

[root@localhost ~]# grep hello /etc/shadow
hello:!!:17537:0:99999:7:::
  • 用户默认配置文件/etc/default/useradd

    • GROUP=100 : 不生效
    • HOME=/home : 家目录
    • INACTIVE=-1 : 密码过期宽限天数(shadow第七字段)
    • EXPIRE= : 密码失效时间(shadow第八字段)
    • SHELL=/bin/bash : 初始登陆shell
    • SKEL=/etc/skel: 默认模板目录
    • CREATE_MAIL_SPOOL=yes: 是否建立邮箱
  • /etc/login.defs

    • PASS_MAX_DAYS 99999 密码有效时间(第5字段)
    • PASS_MIN_DAYS 0 密码修改间隔(第4字段)
    • PASS_MIN_LEN 5 密码最小5位(不生效)
    • PASS_WARN_AGE 密码到期警告(第6字段)
    • UID_MIN 500 最小UID范围
    • UID_MAX 60000
    • UID_MIN 500
    • GID_MAX 60000
    • ENCRYPT_METHOD SHA512 加密算法

2. 设定密码passwd

格式 passwd [选项] [用户名]

  • 用户名
    • 不加用户名, 是给当前登录用户设定密码
    • 加用户名, 给指定用户设定密码, 超级管理员可用
  • 选项
    -S: 查询用户密码状态
    -l: 暂时锁定用户
    -u: 解锁用户
    --stdin: 通过管道符给用户设定密码(shell脚本批量给用户初始化密码)

示例:

[root@localhost ~]# passwd -S hello
hello PS 2018-01-06 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)

[root@localhost ~]# passwd -l hello
锁定用户 hello 的密码 。
passwd: 操作成功

#锁定密码, 其实就是在密码前加入 '!!'
[root@localhost ~]# grep hello /etc/shadow
hello:!!$6$hYvSf3tE$66xZYlCTuTLdGa7RtFXZUVfx1GOgseUSwbmb1sTa3uzgPa.a5Iv6RhJCM0zkUlqE3PwvBoeYoFVv5Q4Ln4JA61:17537:0:99999:7:::

#解锁用户, 就是移除密码前的'!!'
[root@localhost ~]# passwd -u hello
解锁用户 hello 的密码 。
passwd: 操作成功

[root@localhost ~]# grep hello /etc/shadow
hello:$6$hYvSf3tE$66xZYlCTuTLdGa7RtFXZUVfx1GOgseUSwbmb1sTa3uzgPa.a5Iv6RhJCM0zkUlqE3PwvBoeYoFVv5Q4Ln4JA61:17537:0:99999:7:::

# 使用--stdin设定密码
[root@localhost ~]# echo 1234 | passwd --stdin hello
更改用户 hello 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
[root@localhost ~]# grep hello /etc/shadow
hello:$6$WqbpYyC8$Er8ytu9jGFvXplyBfim32SRMb.e8EspoBJKRdiH5sl8VhsuEBjt8ZmQGtIsupU.5hh42SNdbNvssUCv.Z75A00:17537:0:99999:7:::

3. 修改用户信息 usermod

useradd是添加新用户, usermod是修改已经存在的用户

格式 usermod [选项] 用户名

  • 选项
    • -u UID: 修改用户的UID
    • -c 用户说明: 修改用户的说明信息
    • -G 组名: 修改用的附加组
    • -L 锁定用户
    • -U 解锁用户锁定

4. 修改用户密码状态 chage

格式 chage [选项] 用户名

  • 选项:
    • -l 列出用户的详细密码状态
    • -d 天数, 修改密码最后一次更改日期(shadow3字段)
    • -m 天数: 两次密码修改间隔(4字段)
    • -M 天数: 密码有效期(5字段)
    • -W 天数: 密码过期前警告天数(6字段)
    • -I 天数: 密码过期后宽限天数(7字段)
    • -E 天数: 账号失效时间(8字段)

示例:
chage -d 0 hello
这个命令时把密码日期归0为(shadow第三字段), 用户已登录, 就要提示其修改密码, 在shell脚本中, 可以给很多用户设定一个初始密码, 然后将其密码修改日期归档为0, 用户登陆后, 必须修改密码

[root@localhost ~]# chage -d 0 hello

# 将其第三字段改为0
[root@localhost ~]# grep hello /etc/shadow
hello:$6$WqbpYyC8$Er8ytu9jGFvXplyBfim32SRMb.e8EspoBJKRdiH5sl8VhsuEBjt8ZmQGtIsupU.5hh42SNdbNvssUCv.Z75A00:0:0:99999:7:::
[root@localhost ~]# su - uar

[uar@localhost ~]$ su - hello
密码:
您需要立即更改密码(root 强制)
为 hello 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:

5 删除用户

userdel [选项] 用户名

  • 选项
    -r : 删除用户的同时, 将用户家目录也删除掉
  • 手动删除用户, 需要做如下操作:
    • vi /etc/passwd, 将用户删掉
    • vi /etc/shadow, 将密码删除, wq!强制保存退出
    • vi /etc/group, 将用户组删掉
    • vi /etc/gshadow, 将用户组密码删掉
    • rm -rf /var/spool/mail/hello删掉
    • rm -rf /home/hello家目录删掉
  • id , 查看当前用户信息
[hello@localhost ~]$ id
uid=666(hello) gid=666(hello) 组=666(hello),0(root),510(uar)

6 切换用户身份

格式: su [选项] 用户名

  • 选项
    • -: 选项'-'代表用户切换时连带用户的环境变量一起切换, 推荐加su - hello, 不要直接su hello, 如果直接su hello, 自己还会停留在hello目录里, 在退出hello家目录, 就进不来了, 此处有疑问
    • -c: 仅执行一次命令, 而不切换用户身份su - root -c "useradd usertest"
    • su root, 切换到root, 查看env, 发现用户环境变量并没有发生改变, 不要这样写, 应该写成su - root

三. 用户组管理

1.添加用户组

groupadd [选项] 组名

  • 选项
    • -g GID: 执行组ID

2. 修改用户组

groupmod [选项] 组名

  • 选项
    • -g GID 修改组GID
    • -n 新组名 原始组名: 修改组名
    • `groupmod -n newgrp oldgrp

3. 删除组

groupdel 组名

  • 如果组里有初始用户, 就不能删除
  • 如果组没有初始用户, 仅仅是附加用户, 则不受影响, 直接删除
[root@localhost ~]# groupadd gtest
[root@localhost ~]# grep gtest /etc/group
gtest:x:511:

[root@localhost ~]# useradd -g gtest anny
[root@localhost ~]# grep anny /etc/passwd
anny:x:507:511::/home/anny:/bin/bash

[root@localhost ~]# useradd -G gtest jack
[root@localhost ~]# grep gtest /etc/group
# 会将jack放在gtest附加组里
gtest:x:511:jack

# 如果有初始用户, 则不能删除
[root@localhost ~]# groupdel gtest
groupdel: cannot remove the primary group of user 'anny'

[root@localhost ~]# userdel jack
[root@localhost ~]# grep gtest /etc/group
gtest:x:511:
[root@localhost ~]# userdel anny

# 删除anny用户后, 再删除gtest组, 和jack是否存在没关系
[root@localhost ~]# groupdel gtest

4. 把用户添加入组或者从组中删除

gpasswd 选项 组名

  • 选项:
    • -a 用户名: 把用户加入组
    • -d 用户名: 把用户从组中删除
  • 示例:
[root@localhost ~]# gpasswd -a lw,uar gtest
gpasswd: user 'lw,uar' does not exist

[root@localhost ~]# gpasswd -a lw gtest
Adding user lw to group gtest

[root@localhost ~]# gpasswd -a uar gtest
Adding user uar to group gtest

[root@localhost ~]# grep gtest /etc/group
gtest:x:511:lw,uar

[root@localhost ~]# gpasswd -d lw gtest
Removing user lw from group gtest

[root@localhost ~]# gpasswd -d uar gtest
Removing user uar from group gtest

[root@localhost ~]# grep gtest /etc/group
gtest:x:511:

你可能感兴趣的:(Linux用户管理)