目录
1. 用户及组相关文件 
2. 用户相关查询  
2.1 直接通过cat文件查看用户及组文件内容 
2.2 使用下面查询命令查看 
3. 使用操作命令修改用户及组相关文件 
3.1 专有编辑命令(仅限高级用户): 
3.2 用户及组的操作 
4. 参考信息: 
5. 以下是Arch的用户组相关描述 
5.1用户组,系统组等摘录子arch的wiki页面: 
5.2 以下是本机的用户及组信息(Arch Linux) 

1.用户及组相关文件

Linux系统,一切皆文件。Linux上的用户及用户组信息保存在如下文件里。
Arch Linux的用户及组和密码管理工具来自shadow包,它是基本组的一部分。

  • /etc/passwd 用户信息,冒号分隔的7个字段。用户名:密码:UID:GID:说明信息:目录:shell
  • /etc/shadow 用户密码,冒号分隔的9个字段。用户名:密码:最近修改日期:密码保护天数:密码失效天数:警告期限:宽限时间:失效日期:保留
  • /etc/group 用户所属的组,组名,密码,GID,用户名
  • /etc/gshadow 组帐户安全信息,组名,密码,组管理者,组内用户列表

用户信息/etc/passwd文件中的每个用户都有一个对应的记录行,记录着这个用户的基本属性。该文件对所有用户可读。
密码信息/etc/shadow文件正如他的名字一样,是passwd文件的影子,/etc/shadow文件中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。
关于2个密码字段:passwd文件里的密码字段是历史遗迹,不必理会,实际密码保存在shadow里。

  • 如果为空表示没有口令,登录时不需要口令(慎用);
  • 星号或叹号代表帐号被锁定;
  • 双叹号表示账户未提供过密码,在系统管理员给出初始密码前,默认是锁定的;
  • $1$ 用MD5加密;
  • $2$ 用Blowfish加密;
  • $5$ 用SHA-256加密;
  • $6$ 用SHA-512加密(目前基本使用这种方式加密);

其他字段说明:

  • 字段3. 最近修改密码日期:从1970-1-1到更动密码时的天数。
  • 字段4. 密码保护天数:密码不可被更动的天数,0表示密码随时可以更动。如果设定为20天的话,密码生效的20天之内都无法修改。
  • 字段5. 密码失效天数:必须在此之前修改密码,否则密码会失效,帐号被锁定。
  • 字段6. 失效警告期限:失效前多少天的警告。
  • 字段7. 过期宽限时间:
  • 字段8. 帐号失效日期:
  • 字段9. 保留:

关于用户组/etc/group(组名,密码,GID,用户名);/etc/gshadow(组名,密码,组管理者,组内用户列表)
这里也有2个密码,同样在group里的密码字段只是个历史遗迹,实际密码加密后放在gshadow文件里。普通用户较少会用到组密码。
组内用户列表(多个用户使用逗号分割),本字段可以为空;如果字段为空表示用户组为GID的用户名;
=========================

2. 用户相关查询 

2.1 直接通过cat文件查看用户及组文件内容

$ sudo cat /etc/passwd
$ sudo cat /etc/passwd/etc/shadow
$ sudo cat /etc/passwd/etc/group
$ sudo cat /etc/passwd/etc/gshadow
包含有
超级用户:超级用户的UID和GID固定为0.
普通用户:你现在使用的帐号。
特殊用户,伪用户:无法登录的用户,系统可以使用他们来运行一些进程。如守护进程用户没有登录权限。
  nobody用户的权限最小,一些进程在nobody的用户名下运行,因为它没有任何写入权限。

2.2 使用下面查询命令查看

$ groups toma //显示用户的组名:
users
如果user省略,则显示当前用户的组名。
$ id 提供了其他详细信息,例如用户的UID和关联的GID:
uid=1001(toma) gid=985(users) groups=985(users)
$ who -Ha //查询登录用户信息
NAME LINE TIME IDLE PID COMMENT EXIT
system boot 2019-03-28 23:12
toma + tty7 2019-03-28 23:13 old 519 (:0)
常用选项有
-a,显示全部用户
-H,显示标题
字段说明
TIME,登录时间,
IDLE,最近使用状态:(.)1分种内有活动;(00:15)已空闲15分钟;(old)很久无活动,超过24小时;
PID 是用户shell程序的进程ID号
$ whoami //显示你的用户名
toma
$ w //显示谁登录以及他们正在做什么。
11:11:01 up 5 days, 11:58, 1 user, load average: 1.33, 1.42, 1.61
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
toma tty7 Thu23 5days 6:10m 0.01s /bin/sh /etc/xdg/xfce4/xinitrc
$ last //Display a listing of the most recently logged-in users.
toma tty7 :0 Thu Mar 28 23:13 still logged in
reboot system boot 5.0.4-arch1-1-AR Thu Mar 28 23:12 still running
toma tty7 :0 Mon Mar 25 17:38 - 23:11 (3+05:32)
reboot system boot 5.0.4-arch1-1-AR Mon Mar 25 17:38 - 23:11 (3+05:33)
使用ps来计算运行进程的任何用户
$ ps -eaho user
root
toma
toma
排序,合并重复项
$ ps -eaho user | sort -u
root
toma
显示合计数量
$ ps -eaho user | sort -u | wc -l
2
$ ps -eaho user | wc -l
9

3. 使用操作命令修改用户及组相关文件

/etc/passwd等文件有严格的语法规则,不允许注释和空行。
虽然只是单纯的文本文件,但不建议直接通过root权限编辑,而是使用下面的专用编辑命令或者用户及组的操作命令。

3.1 专有编辑命令(仅限高级用户):

再次强调:虽然有专用编辑软件,也不建议使用。更不要使用普通编辑软件直接编辑!要使用操作命令变更其内容。
专用的编辑命令,会在编辑时备份和锁定文件,会检查格式。
密码内容是加密的,不能直接编辑。要配合加密程序。最好的方式是直接使用下面的操作命令。
vipw (Edit the password or group file)
vigr (Edit the password or group file)
visudo (Edit the sudoers file)

  • /etc/passwd 用户信息,vipw
  • /etc/shadow 用户密码,vipw
  • /etc/group 用户所属的组,vigr
  • /etc/gshadow 组帐户安全信息,vigr -s

3.2 用户及组的操作

添加用户:添加一个名为的新用户archie,创建其主目录-m,否则使用组,文件夹名称,使用的shell和各种其他参数方面的所有默认值:
#useradd -m archie
上面的useradd命令还将自动创建一个archie使用与用户的UID相同的GID 调用的组,archie并使其成为archie登录时的默认组。
使每个用户拥有自己的组(组名与用户名相同,GID与UID相同)是添加用户的首选方式。
选项:
-m/--create-home //创建用户主目录为。/home/username
-G/--groups //补充组列表。每个组通过逗号与下一个组隔开,没有中间空格。默认值是用户仅属于初始组。
-s/--shell //默认登录shell的路径和文件名。
-U //参数以创建与用户同名的组,并将用户添加到该组
-u/ --uid和-g/ --gid //如果系统用户需要特定的用户和组ID,请在创建用户时使用-u/ --uid和-g/ --gid选项指定它们:
设置密码使用suid-root程序: passwd
#passwd archie
修改用户shell:chsh 
如果临时需要更改GID,您还可以使用newgrp命令在运行时将用户的默认GID更改为另一个GID。
例如,执行用户创建的文件后,将与GID 关联,无需重新登录。
要更改回默认GID,请执行不带组名的newgrp。 newgrp groupname groupname
更改用户的主目录:
#usermod -d /my/new/home -m username
该-m move,自动创建新目录并在其中移动内容。
提示:您可以创建从用户以前的主目录到新主目录的链接。这样做将允许程序查找具有硬编码路径的文件。
#ln -s /my/new/home/ /my/old/home
确保有没有尾随/上/my/old/home。
要更改用户的登录名:
#usermod -l newname oldname
警告:确保您没有以要更改其名称的用户身份登录。
打开一个新的tty(Ctrl+Alt+F1)并以root用户身份或以其他用户身份登录,然后以su身份登录到root用户。
usermod应该阻止你误操作。
要将用户添加到其他组,
#usermod -aG additional_groups 用户名
警告:如果上面-a的usermod命令中省略了该选项,则会从未列出的所有组中删除additional_groups该用户
(即,该用户将仅是该列出的组的成员additional_groups)。
使用userdel命令删除用户帐户:
#userdel -r username
该-r选项指定还应删除用户的主目录和邮件
更改用户的登录shell:
#usermod -s /bin/bash username 
要输入GECOS注释的用户信息(例如完整的用户名),请键入:
#chfn 用户名 
使用pwck命令可以被用来验证用户数据库的完整性。它可以同时按GID对用户列表进行排序,这有助于比较:
#pwck -s 
使用visudo 
sudo的配置文件是/etc/sudoers。应始终使用visudo(8)命令进行编辑。
visudo锁定sudoers文件,将编辑保存到临时文件,并在复制之前检查该文件的语法/etc/sudoers。
使用以下groupadd命令创建新组:
#groupadd group 
使用该gpasswd命令将用户添加到组
#gpasswd -a 用户 组 
修改现有组groupmod; 例如,在保留gid的同时将old_group组重命名为new_group
#groupmod -n new_group old_group 
删除现有组:
#groupdel group 
要从组中删除用户:
#gpasswd -d 用户 组 

4. 参考信息:

https://wiki.archlinux.org/index.php/users_and_groups
https://wiki.archlinux.org/index.php/File_permissions_and_attributes
https://wiki.archlinux.org/index.php/Access_Control_Lists
https://wiki.archlinux.org/index.php/PAM
https://wiki.archlinux.org/index.php/Umask
https://www.linux.com/learn/understanding-Linux-file-permissions
https://jlk.fjfi.cvut.cz/arch/manpages/man/umask.2
https://blogs.gentoo.org/mgorny/2011/10/18/027-umask-a-compromise-between-security-and-simplicity/
https://wiki.archlinux.org/index.php/Su
https://wiki.archlinux.org/index.php/Sudo
https://www.computerhope.com/unix/uwho.htm

5. 以下是Arch的用户组相关描述

5.1用户组,系统组等摘录子arch的wiki页面:

https://wiki.archlinux.org/index.php/users_and_groups
非root工作站/桌面用户通常需要添加到以下某些组中,以允许访问硬件外围设备并方便系统管理:
组 受影响的文件 目的

  1. ftp /srv/ftp/ 访问FTP服务器提供的文件。
  2. games /var/games 访问一些游戏软件。
  3. http /srv/http/ 访问HTTP服务器提供的文件。
  4. rfkill /dev/rfkill 控制无线设备电源状态的权利(由rfkill使用)。
  5. systemd-journal /var/log/journal/* 可用于提供只读到systemd日志的访问,作为替代adm和wheel [1] 。否则,仅显示用户生成的消息。
  6. uucp /dev/ttyS[0-9]+,/dev/tts/[0-9]+,/dev/ttyUSB[0-9]+,/dev/ttyACM[0-9]+,/dev/rfcomm[0-9]+ RS-232串行端口和连接到它们的设备。
  7. users 标准用户组。
  8. log 访问syslog-ng/var/log/创建的日志文件。
  9. sys 在CUPS中管理打印机的权利。
  10. adm 管理组,通常用于对受保护日志(包括日志文件)进行读取访问。
  11. wheel 管理组,通常用于授予执行管理操作的权限。可用于提供对sudo和su实用程序的访问(默认情况下不使用它,可配置在/etc/pam.d/su和中/etc/pam.d/su-l)。它还具有对日志文件的完全读取权限。

系统组,以下组用于系统目的,只有出于专用目的才需要分配给用户:
组 受影响的文件 目的

  1. kmem /dev/port,/dev/mem,/dev/kmem
  2. locate /usr/bin/locate,/var/lib/locate,/var/lib/mlocate,/var/lib/slocate 请参阅定位。