Post

linux(CentOS7) 用户和组

用户和组

Linux 用户管理

登录时发生了什么

不管是终端还是图像界面登录系统校验

  1. 检查这个用户是否 /etc/passwd
  2. 再校验 /etc/shadow 密码是否正确
  3. 密码输入次数大于默认值 3 次重新输入用户名再输入密码

用户类型

  1. 超级用户:超级用户 USER ID 为 0 root:x:0:0:root:/root:/bin/bash

  2. 系统用户
  3. 普通用户

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.