一. 用户配置文件
用户配置文件主要包括
-
/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
家目录删掉
- vi
- 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: