linux(CentOS7) 用户和组
用户和组
Linux 用户管理
登录时发生了什么
不管是终端还是图像界面登录系统校验
- 检查这个用户是否
/etc/passwd
中 - 再校验
/etc/shadow
密码是否正确 - 密码输入次数大于默认值 3 次重新输入用户名再输入密码
用户类型
-
超级用户:超级用户 USER ID 为 0
root:x:0:0:root:/root:/bin/bash
- 系统用户
- 普通用户
root
用户可以更改任何用户密码
用户管理机制
- 用户账号文件【
/etc/passwd
】 - 密码文件【
/etc/shadow
】 - 用户组文件【
/etc/group
】
/etc/passwd
文件中
*
表示该用户已被禁止,无法登录
1
2
`用户名:密码:USER ID:GROUP ID :相关注释:主目录:使用shell`
`root:x:0:0:root:/root:/bin/bash`
- USER ID :最多为 65535,UID 相同可人为同一用户,也具有相同权限如果该更改某些用户权限可以使用这方法
- GROUP ID: 用户可以是用多个组,组可以有多个权限,和
windows
差不多
/etc/shadow
1
2
`用户名:密码:上次修改时间:两次修改密码间隔最少天数:两次修改密码间隔最多天数:提前多少天警告用户密码过期:在密码多少天过期后禁用用户:用户过期时间:保留字段`
`root:$6DQIY.H35tynh7gf2xB5jzrs8zYu.:18205:0:99999:7:::`
- 密码:
x
表示用户禁止使用,不能登录 - 上次修改密码时间:单位天
- 两次修改间隔最少天数:
0
表示此功能被禁用,反则 - 两次修改间隔最多天数:
99999
表示基本不需要修改
/etc/group
1
2
用户组名:用户组密码:用户组标识号:组内用户列表
root:x:0:
- 组内用户列表:不同用户之间用逗号分隔,不能有空格
用户管理命令
添加用户【useradd
】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@Cc ~]# useradd --help
用法:useradd [选项] 登录
useradd -D
useradd -D [选项]
选项:
-b, --base-dir BASE_DIR 新账户的主目录的基目录
-c, --comment COMMENT 新账户的 GECOS 字段
-d, --home-dir HOME_DIR 新账户的主目录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表
-h, --help 显示此帮助信息并推出
-k, --skel SKEL_DIR 使用此目录作为骨架目录
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
-m, --create-home 创建用户的主目录
-M, --no-create-home 不创建用户的主目录
-N, --no-user-group 不创建同名的组
-o, --non-unique 允许使用重复的 UID 创建用户
-p, --password PASSWORD 加密后的新账户密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
[root@Cc ~]#
更改用户[usermod
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@Cc ~]# usermod --help
用法:usermod [选项] 登录
选项:
-c, --comment 注释 GECOS 字段的新值
-d, --home HOME_DIR 用户的新主目录
-e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
-f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
-g, --gid GROUP 强制使用 GROUP 为新主组
-G, --groups GROUPS 新的附加组列表 GROUPS
-a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,
并不从其它组中删除此用户
-h, --help 显示此帮助信息并推出
-l, --login LOGIN 新的登录名称
-L, --lock 锁定用户帐号
-m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
-o, --non-unique 允许使用重复的(非唯一的) UID
-p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-s, --shell SHELL 该用户帐号的新登录 shell
-u, --uid UID 用户帐号的新 UID
-U, --unlock 解锁用户帐号
-v, --add-subuids FIRST-LAST add range of subordinate uids
-V, --del-subuids FIRST-LAST remove range of subordinate uids
-w, --add-subgids FIRST-LAST add range of subordinate gids
-W, --del-subgids FIRST-LAST remove range of subordinate gids
-Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射
[root@Cc ~]#
删除用户[userdel
]
1
2
3
4
5
6
7
8
9
10
11
12
[root@Cc ~]# userdel --help
用法:userdel [选项] 登录
选项:
-f, --force force some actions that would fail otherwise
e.g. removal of user still logged in
or files, even if not owned by the user
-h, --help 显示此帮助信息并推出
-r, --remove 删除主目录和邮件池
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-Z, --selinux-user 为用户删除所有的 SELinux 用户映射
[root@Cc ~]#
更改或者设置用户密码 [passwd
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@Cc ~]# passwd --help
用法: passwd [选项...] <帐号名称>
-k, --keep-tokens 保持身份验证令牌不过期
-d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作)
-l, --lock 锁定指名帐户的密码(仅限 root 用户)
-u, --unlock 解锁指名账户的密码(仅限 root 用户)
-e, --expire 终止指名帐户的密码(仅限 root 用户)
-f, --force 强制执行操作
-x, --maximum=DAYS 密码的最长有效时限(只有根用户才能进行此操作)
-n, --minimum=DAYS 密码的最短有效时限(只有根用户才能进行此操作)
-w, --warning=DAYS 在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)
-i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)
-S, --status 报告已命名帐号的密码状态(只有根用户才能进行此操作)
--stdin 从标准输入读取令牌(只有根用户才能进行此操作)
Help options:
-?, --help Show this help message
--usage Display brief usage message
[root@Cc ~]#
切换用户[su
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@Cc ~]# su --help
用法:su [选项] [-] [USER [参数]...]
将有效用户 id 和组 id 更改为 USER 的 id。
单个 - 视为 -l。如果未指定 USER,将假定为 root。
选项:
-m, -p, --preserve-environment 不重置环境变量
-g, --group <组> 指定主组
-G, --supp-group <组> 指定一个辅助组
-, -l, --login 使 shell 成为登录 shell
-c, --command <命令> 使用 -c 向 shell 传递一条命令
--session-command <命令> 使用 -c 向 shell 传递一条命令
而不创建新会话
-f, --fast 向shell 传递 -f 选项(csh 或 tcsh)
-s, --shell <shell> 若 /etc/shells 允许,则运行 shell
-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出
[root@Cc ~]#
普通用户获取超级权限[sudo
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@Cc ~]# sudo --help;
sudo - 以其他用户身份执行一条命令
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
选项:
-A, --askpass 使用助手程序进行密码提示
-b, --background 在后台运行命令
-C, --close-from=num 关闭所有 >= num 的文件描述符
-E, --preserve-env 在执行命令时保留用户环境
--preserve-env=list 保留特定的环境变量
-e, --edit 编辑文件而非执行命令
-g, --group=group 以指定的用户组或 ID 执行命令
-H, --set-home 将 HOME 变量设为目标用户的主目录。
-h, --help 显示帮助消息并退出
-h, --host=host 在主机上运行命令(如果插件支持)
-i, --login 以目标用户身份运行一个登录 shell;可同时指定一条命令
-K, --remove-timestamp 完全移除时间戳文件
-k, --reset-timestamp 无效的时间戳文件
-l, --list 列出用户权限或检查某个特定命令;对于长格式,使用两次
-n, --non-interactive 非交互模式,不提示
-P, --preserve-groups 保留组向量,而非设置为目标的组向量
-p, --prompt=prompt 使用指定的密码提示
-r, --role=role 以指定的角色创建 SELinux 安全环境
-S, --stdin 从标准输入读取密码
-s, --shell 以目标用户运行 shell;可同时指定一条命令
-t, --type=type 以指定的类型创建 SELinux 安全环境
-T, --command-timeout=timeout 在达到指定时间限制后终止命令
-U, --other-user=user 在列表模式中显示用户的权限
-u, --user=user 以指定用户或 ID 运行命令(或编辑文件)
-V, --version 显示版本信息并退出
-v, --validate 更新用户的时间戳而不执行命令
-- 停止处理命令行参数
[root@Cc ~]#
用户管理示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@Cc ~]# useradd testUser
[root@Cc ~]# useradd testUserName
[root@Cc ~]# cat /etc/passwd
# 只复制了最后几行
yf:x:1001:1001::/home/yf:/bin/bash
lcc:x:1002:1002::/home/lcc:/bin/bash
lccs:x:1003:1003::/home/ch:/bin/bash
testUser:x:1004:1004::/home/testUser:/bin/bash
testUserName:x:1005:1005::/home/testUserName:/bin/bash
[root@Cc ~]# userdel yf
[root@Cc ~]# userdel lcc
[root@Cc ~]# userdel lccs
[root@Cc ~]# cat /etc/passwd
# 只复制了最后几行
admin:x:1000:1000::/home/admin:/bin/bash
nginx:x:996:994:nginx user:/var/cache/nginx:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
redis:x:995:993:Redis Database Server:/var/lib/redis:/sbin/nologin
dockerroot:x:994:991:Docker User:/var/lib/docker:/sbin/nologin
testUser:x:1004:1004::/home/testUser:/bin/bash
testUserName:x:1005:1005::/home/testUserName:/bin/bash
[root@Cc ~]# passwd testUser
更改用户 testUser 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@Cc ~]# su testUser
[testUser@Cc root]$ su root
密码:
[root@Cc ~]# su testUser
[testUser@Cc root]$ ll
ls: 无法打开目录.: 权限不够
[testUser@Cc root]$ sudo ll
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] testUser 的密码:
testUser 不在 sudoers 文件中。此事将被报告。
[testUser@Cc ~]$ pwd
/home/testUser
[testUser@Cc ~]$
用户组管理命令
添加用户组【groupadd
】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[testUser@Cc ~]$ groupadd --help
用法:groupadd [选项] 组
选项:
-f, --force 如果组已经存在则成功退出
并且如果 GID 已经存在则取消 -g
-g, --gid GID 为新组使用 GID
-h, --help 显示此帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复 GID 的组
-p, --password PASSWORD 为新组使用此加密过的密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR directory prefix
[testUser@Cc ~]$
删除用户组【groupdel
】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[testUser@Cc ~]$ groupadd --help
用法:groupadd [选项] 组
选项:
-f, --force 如果组已经存在则成功退出
并且如果 GID 已经存在则取消 -g
-g, --gid GID 为新组使用 GID
-h, --help 显示此帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复 GID 的组
-p, --password PASSWORD 为新组使用此加密过的密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR directory prefix
[testUser@Cc ~]$ groupdel --help
用法:groupdel [选项] 组
选项:
-h, --help 显示此帮助信息并推出
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-f, --force delete group even if it is the primary group of a user
[testUser@Cc ~]$
修改用户组【groupmod
】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[testUser@Cc ~]$ groupdel --help
用法:groupdel [选项] 组
选项:
-h, --help 显示此帮助信息并推出
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-f, --force delete group even if it is the primary group of a user
[testUser@Cc ~]$ groupmod --help
用法:groupmod [选项] 组
选项:
-g, --gid GID 将组 ID 改为 GID
-h, --help 显示此帮助信息并推出
-n, --new-name NEW_GROUP 改名为 NEW_GROUP
-o, --non-unique 允许使用重复的 GID
-p, --password PASSWORD 将密码更改为(加密过的) PASSWORD
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
[testUser@Cc ~]$
查看用户所在用户组【id 与 grep 组合
】
1
2
3
4
5
6
7
8
9
10
[root@Cc testUser]# id testUser
uid=1004(testUser) gid=1004(testUser) 组=1004(testUser)
[root@Cc testUser]# id root
uid=0(root) gid=0(root) 组=0(root)
[root@Cc testUser]# grep testUser /etc/passwd
testUser:x:1004:1004::/home/testUser:/bin/bash
testUserName:x:1005:1005::/home/testUserName:/bin/bash
[root@Cc testUser]# grep 1004 /etc/group
testUser:x:1004:
[root@Cc testUser]#
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@Cc testUser]# groupadd testUserGroup
[root@Cc testUser]# cat /etc/group |grep test
testUser:x:1004:
testUserGroup:x:1005:
[root@Cc testUser]# useradd -g testUserGroup testUserInGroup
[root@Cc testUser]# groupdel testUserGroup
groupdel:不能移除用户“testUserInGroup”的主组
[root@Cc testUser]# userdel -r testUserInGroup
[root@Cc testUser]# groupdel testUserGroup
[root@Cc testUser]# groupdel testUserGroup
[root@Cc testUser]# cat /etc/group |grep test
testUser:x:1004:
[root@Cc testUser]# groupmod -g 10002 testUser
testUser:x:10002:
[root@Cc testUser]# groupmod -n lccGroup testUser
[root@Cc testUser]# cat /etc/group |grep lcc
lccGroup:x:10002:
[root@Cc testUser]#
批量添加用户并设置密码
1
预留
应用程序管理
This post is licensed under
CC BY 4.0
by the author.