4-用户和组的管理

用户,用户组

 Linux是一个多用户多任务的系统,一个系统上可能会有多个用户。而每个用户都属于一个或多个用户组(至少要属于一个组)。

用户管理

查询信息

  • 某个用户的信息

    1
    2
    3
    4
    5
    id [User]

    # 例
    zuo@zuo-VirtualBox:~$ id zuo
    uid=1000(zuo) gid=1000(zuo) 组 =1000(zuo),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)

    • uid: 用户id号
    • gid: 所在组的组id号
    • 组:所在组的名称
  • finger

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    finger [-s] username
    选项与参数:
    -s :仅列出用户的账号、全名、终端机代号与登陆时间等等;
    -m :列出与后面接的账号相同者,而不是利用部分比对 (包括全名部分)

    # 例
    zuo@zuo-VirtualBox:/home$ finger zuo
    Login: zuo Name: Zuo YiPing
    Directory: /home/zuo Shell: /bin/bash
    On since Mon Jul 16 13:06 (CST) on :0 from :0 (messages off)
    No mail.
    No Plan.

  • 查询当前用户

    1
    2
    3
    4
    5
    6
    # 查询当前用户
    whoami

    # 例
    zuo@zuo-VirtualBox:/home$ whoami
    zuo

  • 列出所有用户

    1
    cat /etc/passwd |cut -f 1 -d:

添加用户

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
zuo@zuo-VirtualBox:~/桌面$ useradd --help
用法:useradd [OPTION] name
useradd -D
useradd -D [OPTION]

选项:
-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 到的目录
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
--extrausers Use the extra users database

 不过需要注意一点,而在Ubuntu下直接使用useradd user创建用户不会在/home下自动创建与用户名同名的用户目录,而且不会自动选择shell版本,也没有设置密码,那么这个用户是不能登录的,需要使用passwd命令修改密码 , 可以使用adduser user来替代。

 个人更喜欢使用adduser:

1
2
3
4
5
6
7
8
9
10
# 添加普通用户
adduser [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--firstuid ID] [--lastuid ID] [--gecos GECOS] [--ingroup GROUP | --gid ID]
[--disabled-password] [--disabled-login] [--add_extra_groups]
[--encrypt-home] USER

# 添加系统用户
adduser --system [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--gecos GECOS] [--group | --ingroup GROUP | --gid ID] [--disabled-password]
[--disabled-login] [--add_extra_groups] USER

删除用户

1
2
3
4
# 删除用户,保留家目录
userdel [用户名]
# 删除用户和家目录
userdel -r [用户名]

 事实上实际工作中,我们都会保留家目录。

用户信息修改

  • 修改密码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    用法:passwd [选项] [账户]
    选项(部分):
    -a, --all 报告所有帐户的密码状态
    -d, --delete 删除指定帐户的密码
    -e, --expire 强制使指定帐户的密码过期

    # 默认不带任何选项是指修改账户的密码,如果连账户也不带是修改自身的密码
    zuo@zuo-VirtualBox:~$ passwd
    更改 zuo 的密码。
    (当前)UNIX 密码:
    passwd:认证令牌操作错误
    passwd:密码未更改
    zuo@zuo-VirtualBox:~$ sudo passwd AUser
    输入新的 UNIX 密码:
    重新输入新的 UNIX 密码:
    passwd:认证令牌操作错误
    passwd:密码未更改
    zuo@zuo-VirtualBox:~$
  • 用户修改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    用法:usermod [选项] UserName

    选项:
    -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 中提到的附加组中,
    并不从其它组中删除此用户
    # 一般 -a 和 -G 放在一起用
    -l, --login LOGIN 新的登录名称
    -L, --lock 锁定用户帐号
    -m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
    -o, --non-unique 允许使用重复的(非唯一的) UID
    -p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
    -R, --root CHROOT_DIR chroot 到的目录
    -s, --shell SHELL 该用户帐号的新登录 shell
    -u, --uid UID 用户帐号的新 UID
    -U, --unlock 解锁用户帐号

切换用户

 登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误,可以利用普通用户登录,登录后再用切换成系统管理员身份,切换方式如下:

  • su [username]

    切换成username用户,默认是root。但不改变工作环境。

  • su - [username]

    切换成username用户,默认是root。改变工作环境。

 二者的区别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 可以看到并没有更改环境
zuo@zuo-VirtualBox:~/桌面$ su
密码:
root@zuo-VirtualBox:/home/zuo/桌面# ls
1k.txt Duplicate.py
root@zuo-VirtualBox:/home/zuo/桌面# exit
exit
# 可以看到环境更改了
zuo@zuo-VirtualBox:~/桌面$ su -
密码:
root@zuo-VirtualBox:~# pwd
/root
root@zuo-VirtualBox:~# ls
root@zuo-VirtualBox:~# exit
注销
zuo@zuo-VirtualBox:~/桌面$

 要退出的话可以输入exit或者Ctrl+D

退出/注销

  • logout

    logout注销指令在图形运行级别无效,在运行级别3下有效

  • exit

  • Ctrl+D

添加一个组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
用法: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 到的目录
--extrausers Use the extra users database

# 例
# 新建一个组ShuGuo
root@zuo-VirtualBox:~# groupadd ShuGuo
# 将刘备加入蜀国组
root@zuo-VirtualBox:~# usermod -a -G ShuGuo LiuBei
root@zuo-VirtualBox:~# id LiuBei
uid=1002(LiuBei) gid=1002(LiuBei) 组=1002(LiuBei),1003(ShuGuo)

删除组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
用法:groupdel [选项] 组

选项:
-h, --help 显示此帮助信息并推出
-R, --root CHROOT_DIR chroot 到的目录
-f, --force delete group even if it is the primary group of a user

# 例
root@zuo-VirtualBox:/home# groupadd SunLiuUnion
root@zuo-VirtualBox:/home# usermod -a -G SunLiuUnion LiuBei
# 删除孙刘联盟组
root@zuo-VirtualBox:/home# groupdel SunLiuUnion
root@zuo-VirtualBox:/home# id LiuBei
uid=1002(LiuBei) gid=1002(LiuBei) 组=1002(LiuBei),1003(ShuGuo)

组的管理

  • 组本身的信息管理:groupmod

    跟 usermod 类似的,这个命令仅是在进行 group 相关参数的修改而已。

    1
    2
    3
    4
    5
    用法:groupmod [选项] 组

    选项(部分):
    -g, --gid GID 将组 ID 改为 GID
    -n, --new-name NEW_GROUP 改名为 NEW_GROUP
  • 组员管理(群组管理员功能):gpasswd

    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
    用法:gpasswd [选项] 组

    选项:
    -a, --add USER 向组 GROUP 中添加用户 USER
    -d, --delete USER 从组 GROUP 中添加或删除用户
    -Q, --root CHROOT_DIR 要 chroot 进的目录
    -r, --remove-password 移除组 GROUP 的密码
    -R, --restrict 向其成员限制访问组 GROUP
    -M, --members USER,... 设置组 GROUP 的成员列表
    -A, --administrators ADMIN,... 设置组的管理员列表

    # 例
    # 将刘备从蜀国中删除
    root@zuo-VirtualBox:/home# gpasswd -d LiuBei ShuGuo
    正在将用户“LiuBei”从“ShuGuo”组中删除
    root@zuo-VirtualBox:/home# 注销
    # 普通用户zuo没有权限
    zuo@zuo-VirtualBox:/home$ gpasswd -a LiuBei ShuGuo
    gpasswd:没有权限。
    zuo@zuo-VirtualBox:/home$ su -
    密码:
    # 赋予用户zuo组管理员权限
    root@zuo-VirtualBox:~# gpasswd -A zuo ShuGuo
    root@zuo-VirtualBox:~# 注销
    # 用户zuo有权限管理了
    zuo@zuo-VirtualBox:/home$ gpasswd -a LiuBei ShuGuo
    正在将用户“LiuBei”加入到“ShuGuo”组中

文件存储

 不论是用户还是组,其信息都放在文件中保存,注意以下的示例中的x意味着被加密,无法看见。 - 保存用户的文件: /etc/passwd

用户(user)的配置文件,记录用户的各种信息

每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

sshd:x:122:65534::/run/sshd:/usr/sbin/nologin LiuBei:x:1002:1002:,,,:/home/LiuBei:/bin/bash

  • 保存口令/密码的文件: /etc/shadow

    口令的配置文件

    每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

  • 保存组的文件: /etc/group 组(group)的配置文件,记录Linux包含的组的信息
    每行含义:组名:口令:组标识号:组内用户列表 > vboxsf:x:999: > LiuBei:x:1002: > ShuGuo:x:1003:LiuBei