目录
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工作站/桌面用户通常需要添加到以下某些组中,以允许访问硬件外围设备并方便系统管理:
组
受影响的文件 目的
-
ftp
/srv/ftp/ 访问FTP服务器提供的文件。
-
games
/var/games 访问一些游戏软件。
-
http
/srv/http/ 访问HTTP服务器提供的文件。
-
rfkill
/dev/rfkill 控制无线设备电源状态的权利(由rfkill使用)。
-
systemd-journal
/var/log/journal/* 可用于提供只读到systemd日志的访问,作为替代adm和wheel
[1] 。否则,仅显示用户生成的消息。
-
uucp
/dev/ttyS[0-9]+,/dev/tts/[0-9]+,/dev/ttyUSB[0-9]+,/dev/ttyACM[0-9]+,/dev/rfcomm[0-9]+
RS-232串行端口和连接到它们的设备。
-
users
标准用户组。
-
log
访问syslog-ng/var/log/创建的日志文件。
-
sys
在CUPS中管理打印机的权利。
-
adm
管理组,通常用于对受保护日志(包括日志文件)进行读取访问。
-
wheel
管理组,通常用于授予执行管理操作的权限。可用于提供对sudo和su实用程序的访问(默认情况下不使用它,可配置在/etc/pam.d/su和中/etc/pam.d/su-l)。它还具有对日志文件的完全读取权限。
系统组,以下组用于系统目的,只有出于专用目的才需要分配给用户:
组
受影响的文件 目的
-
kmem
/dev/port,/dev/mem,/dev/kmem
-
locate
/usr/bin/locate,/var/lib/locate,/var/lib/mlocate,/var/lib/slocate
请参阅定位。
-
lp
/dev/lp[0-9]*,
/dev/parport[0-9]*
访问并行端口设备(打印机和其他)。
-
mail
/usr/bin/mail
-
proc
/proc/pid/ 被授权学习proc文件系统的hidepid=
mount选项禁止的进程信息的组。必须使用mount选项显式设置该组。
gid=
-
root
/* 完整的系统管理和控制(root,admin)。
-
tty
/dev/tty,/dev/vcc,/dev/vc,/dev/ptmx
-
utmp
/run/utmp,/var/log/btmp,/var/log/wtmp
-
dbus
由dbus内部使用
-
nobody
无私群体。
-
smmsp
sendmail组。
预系统组,
在将arch迁移到systemd之前,必须手动将用户添加到这些组中才能访问相应的设备。
这种方式已被弃用,取而代之的udev的标记用的设备uaccess
标签和logind动态经由分配的权限的用户的ACL根据哪个会话当前处于活动状态。
请注意,不能断开会话以使其正常工作(请参阅常规故障排除#会话权限以进行检查)。
有一些值得注意的例外情况需要将用户添加到其中一些组中:例如,如果您希望允许用户访问设备,即使他们未登录也是如此。
但是,请注意,向组添加用户甚至可能会导致某些功能打破(例如,该audio组将打破快速用户切换并允许应用程序阻止软件混合)。
组
受影响的文件 目的
-
audio
/dev/audio,/dev/snd/*,/dev/rtc0
可以直接访问所有会话的声音硬件。仍然需要使ALSA和OSS在远程会话中工作,请参阅ALSA#用户权限。在JACK中也用于为用户提供实时处理权限。
-
disk
/dev/sd[a-z][1-9] 访问块设备不受其它基团如optical,floppy,和storage。
-
floppy
/dev/fd[0-9] 访问软盘驱动器。
-
input
/dev/input/event[0-9]*,
/dev/input/mouse[0-9]*
访问输入设备。在systemd
215中引入[2]。
-
kvm
/dev/kvm 使用KVM访问虚拟机。
-
optical
/dev/sr[0-9],
/dev/sg[0-9]
访问光盘设备,如CD和DVD驱动器。
-
scanner
/var/lock/sane 访问扫描仪硬件。
-
video
/dev/fb/0,
/dev/misc/agpgart
访问视频捕获设备,2D
/ 3D硬件加速,帧缓冲(可以使用X
而不属于该组)。
-
storage存储
访问可移动驱动器,如USB硬盘驱动器,闪存/跳转驱动器,MP3播放器;
使用户能够安装存储设备。
未使用的群体,以下组目前不用于任何目的:
组
受影响的文件 目的
-
箱子
没有 历史的
-
daemon
守护进程
-
lock
用于锁文件访问。例如gnokii要求。
-
mem
-
network
默认情况下未使用。可用于例如授予对NetworkManager的访问权限(请参阅NetworkManager#设置PolicyKit权限)。
-
power
-
uuidd
5.2 以下是本机的用户及组信息(Arch Linux)
$
cat passwd
$
sudo cat shadow
$
cat group
$ sudo cat gshadow
$ cat /etc/passwd | $ Sudo cat /etc/shadow | $ cat /etc/group | $ Sudo cat /etc/gshadow | ||||||||||||||||||||
帐号 | 密 | UID | 组ID | 注释性描述 | 主目录 | 登录Shell | 密码 | 最近修改日期 | 保护天数 | 密码失效天数 | 警告天数 | 失效日期 | 保留 | 组名 | 口令 | GID | user | 组密码 | 组管理者 | 组内用户列表 | |||
root | x | 0 | 0 | /root | /bin/bash | $6$. | 17980 | root | x | 0 | root | root | |||||||||||
bin | x | 1 | 1 | / | /sbin/nologin | !! | 17977 | bin | x | 1 | daemon | !! | daemon | ||||||||||
daemon | x | 2 | 2 | / | /sbin/nologin | !! | 17977 | daemon | x | 2 | bin | !! | bin | ||||||||||
sys | x | 3 | bin | !! | bin | ||||||||||||||||||
tty | x | 5 | !! | ||||||||||||||||||||
mem | x | 8 | !! | ||||||||||||||||||||
ftp | x | 14 | 11 | /srv/ftp | /sbin/nologin | !! | 17977 | ftp | x | 11 | !! | ||||||||||||
x | 8 | 12 | /var/spool/mail | /sbin/nologin | !! | 17977 | x | 12 | !! | ||||||||||||||
log | x | 19 | !! | ||||||||||||||||||||
smmsp | x | 25 | !! | ||||||||||||||||||||
proc | x | 26 | polkitd | !! | polkitd | ||||||||||||||||||
http | x | 33 | 33 | /srv/http | /sbin/nologin | !! | 17977 | http | x | 33 | !! | ||||||||||||
games | x | 50 | !! | ||||||||||||||||||||
lock | x | 54 | !! | ||||||||||||||||||||
clamav | x | 64 | 64 | Clam AntiVirus | / | /sbin/nologin | !! | 17982 | clamav | x | 64 | !! | |||||||||||
uuidd | x | 68 | 68 | / | /sbin/nologin | !! | 17977 | uuidd | x | 68 | !! | ||||||||||||
dbus | x | 81 | 81 | System Message Bus | / | /sbin/nologin | !! | 17977 | dbus | x | 81 | !! | |||||||||||
ntp | x | 87 | 87 | Network Time Protocol | /var/lib/ntp | /bin/false | !! | 17977 | ntp | x | 87 | !! | |||||||||||
network | x | 90 | !! | ||||||||||||||||||||
floppy | x | 94 | !! | ||||||||||||||||||||
scanner | x | 96 | !! | ||||||||||||||||||||
power | x | 98 | !! | ||||||||||||||||||||
polkitd | x | 102 | 102 | PolicyKit daemon | / | /sbin/nologin | !! | 17977 | polkitd | x | 102 | !! | |||||||||||
vboxusers | x | 108 | !! | ||||||||||||||||||||
rtkit | x | 133 | 133 | RealtimeKit | /proc | /sbin/nologin | !! | 17978 | rtkit | x | 133 | !! | |||||||||||
netdata | x | 134 | 134 | /var/cache/netdata | /sbin/nologin | !! | 17980 | netdata | x | 134 | !! | ||||||||||||
usbmux | x | 140 | 140 | usbmux user | / | /sbin/nologin | !! | 17977 | usbmux | x | 140 | !! | |||||||||||
munin | x | 619 | 619 | Munin system monitor | /var/lib/munin | /bin/false | ! | 17982 | munin | x | 619 | ! | |||||||||||
lightdm | x | 620 | 620 | Light Display Manager | /var/lib/lightdm | /sbin/nologin | !! | 17978 | lightdm | x | 620 | !! | |||||||||||
git | x | 972 | 972 | git daemon user | / | /usr/bin/git-shell | !! | 17983 | git | x | 972 | !! | |||||||||||
docker | x | 973 | !! | ||||||||||||||||||||
postgres | x | 974 | 974 | PostgreSQL user | /var/lib/postgres | /bin/bash | !! | 17980 | postgres | x | 974 | !! | |||||||||||
amule | x | 975 | 975 | aMule Client | /var/lib/amule | /sbin/nologin | !! | 17978 | amule | x | 975 | !! | |||||||||||
colord | x | 976 | 976 | Color management daemon | /var/lib/colord | /sbin/nologin | !! | 17977 | colord | x | 976 | !! | |||||||||||
avahi | x | 977 | 977 | Avahi mDNS/DNS-SD daemon | / | /sbin/nologin | !! | 17977 | avahi | x | 977 | !! | |||||||||||
systemd-coredump | x | 978 | 978 | systemd Core Dumper | / | /sbin/nologin | !! | 17977 | systemd-coredump | x | 978 | !! | |||||||||||
systemd-timesync | x | 979 | 979 | systemd Time Synchronization | / | /sbin/nologin | !! | 17977 | systemd-timesync | x | 979 | !! | |||||||||||
systemd-resolve | x | 980 | 980 | systemd Resolver | / | /sbin/nologin | !! | 17977 | systemd-resolve | x | 980 | !! | |||||||||||
systemd-network | x | 981 | 981 | systemd Network Management | / | /sbin/nologin | !! | 17977 | systemd-network | x | 981 | !! | |||||||||||
systemd-journal-remote | x | 982 | 982 | systemd Journal Remote | / | /sbin/nologin | !! | 17977 | systemd-journal-remote | x | 982 | !! | |||||||||||
rfkill | x | 983 | !! | ||||||||||||||||||||
systemd-journal | x | 984 | !! | ||||||||||||||||||||
toma | x | 1001 | 985 | /home/toma | /bin/bash | $6$. | 17977 | 0 | 99999 | 7 | users | x | 985 | !! | |||||||||
video | x | 986 | !! | ||||||||||||||||||||
uucp | x | 987 | !! | ||||||||||||||||||||
storage | x | 988 | !! | ||||||||||||||||||||
render | x | 989 | !! | ||||||||||||||||||||
optical | x | 990 | !! | ||||||||||||||||||||
lp | x | 991 | !! | ||||||||||||||||||||
kvm | x | 992 | !! | ||||||||||||||||||||
input | x | 993 | !! | ||||||||||||||||||||
disk | x | 994 | !! | ||||||||||||||||||||
audio | x | 995 | !! | ||||||||||||||||||||
utmp | x | 996 | !! | ||||||||||||||||||||
kmem | x | 997 | !! | ||||||||||||||||||||
wheel | x | 998 | !! | ||||||||||||||||||||
adm | x | 999 | daemon | !! | daemon | ||||||||||||||||||
nobody | x | 65534 | 65534 | Nobody | / | /sbin/nologin | !! | 17977 | nobody | x | 65534 | !! |
log20190425:添加不需要使用的:3.1 专有编辑命令(仅限高级用户);添加目录