Linux 系统的用户和组

本文介绍了Linux系统中用户和用户组的基本概念、相关文件及其作用,涵盖了如何查询、添加、修改和删除用户与组的方法。此外,还列举了Arch Linux系统中具体的用户及组信息。

 
目录
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 请参阅定位。
  3. lp /dev/lp[0-9]*, /dev/parport[0-9]* 访问并行端口设备(打印机和其他)。
  4. mail /usr/bin/mail
  5. proc /proc/pid/ 被授权学习proc文件系统的hidepid= mount选项禁止的进程信息的组。必须使用mount选项显式设置该组。 gid=
  6. root /* 完整的系统管理和控制(root,admin)。
  7. tty /dev/tty,/dev/vcc,/dev/vc,/dev/ptmx
  8. utmp /run/utmp,/var/log/btmp,/var/log/wtmp
  9. dbus 由dbus内部使用
  10. nobody 无私群体。
  11. smmsp sendmail组。

预系统组,
在将arch迁移到systemd之前,必须手动将用户添加到这些组中才能访问相应的设备。
这种方式已被弃用,取而代之的udev的标记用的设备uaccess 标签和logind动态经由分配的权限的用户的ACL根据哪个会话当前处于活动状态。
请注意,不能断开会话以使其正常工作(请参阅常规故障排除#会话权限以进行检查)。
有一些值得注意的例外情况需要将用户添加到其中一些组中:例如,如果您希望允许用户访问设备,即使他们未登录也是如此。
但是,请注意,向组添加用户甚至可能会导致某些功能打破(例如,该audio组将打破快速用户切换并允许应用程序阻止软件混合)。
组 受影响的文件 目的

  1. audio /dev/audio,/dev/snd/*,/dev/rtc0 可以直接访问所有会话的声音硬件。仍然需要使ALSA和OSS在远程会话中工作,请参阅ALSA#用户权限。在JACK中也用于为用户提供实时处理权限。
  2. disk /dev/sd[a-z][1-9] 访问块设备不受其它基团如optical,floppy,和storage。
  3. floppy /dev/fd[0-9] 访问软盘驱动器。
  4. input /dev/input/event[0-9]*, /dev/input/mouse[0-9]* 访问输入设备。在systemd 215中引入[2]。
  5. kvm /dev/kvm 使用KVM访问虚拟机。
  6. optical /dev/sr[0-9], /dev/sg[0-9] 访问光盘设备,如CD和DVD驱动器。
  7. scanner /var/lock/sane 访问扫描仪硬件。
  8. video /dev/fb/0, /dev/misc/agpgart 访问视频捕获设备,2D / 3D硬件加速,帧缓冲(可以使用X 而不属于该组)。
  9. storage存储 访问可移动驱动器,如USB硬盘驱动器,闪存/跳转驱动器,MP3播放器; 使用户能够安装存储设备。

未使用的群体,以下组目前不用于任何目的:
组 受影响的文件 目的

  1. 箱子 没有 历史的
  2. daemon 守护进程
  3. lock 用于锁文件访问。例如gnokii要求。
  4. mem
  5. network 默认情况下未使用。可用于例如授予对NetworkManager的访问权限(请参阅NetworkManager#设置PolicyKit权限)。
  6. power
  7. 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 密码最近修改日期保护天数密码失效天数警告天数失效日期保留 组名口令GIDuser 组密码组管理者组内用户列表
rootx00 /root/bin/bash $6$.17980      rootx0root   root
binx11 //sbin/nologin !!17977      binx1daemon !! daemon
daemonx22 //sbin/nologin !!17977      daemonx2bin !! bin
                sysx3bin !! bin
                ttyx5  !!  
                memx8  !!  
ftpx1411 /srv/ftp/sbin/nologin !!17977      ftpx11  !!  
mailx812 /var/spool/mail/sbin/nologin !!17977      mailx12  !!  
                logx19  !!  
                smmspx25  !!  
                procx26polkitd !! polkitd
httpx3333 /srv/http/sbin/nologin !!17977      httpx33  !!  
                gamesx50  !!  
                lockx54  !!  
clamavx6464Clam AntiVirus//sbin/nologin !!17982      clamavx64  !!  
uuiddx6868 //sbin/nologin !!17977      uuiddx68  !!  
dbusx8181System Message Bus//sbin/nologin !!17977      dbusx81  !!  
ntpx8787Network Time Protocol/var/lib/ntp/bin/false !!17977      ntpx87  !!  
                networkx90  !!  
                floppyx94  !!  
                scannerx96  !!  
                powerx98  !!  
polkitdx102102PolicyKit daemon//sbin/nologin !!17977      polkitdx102  !!  
                vboxusersx108  !!  
rtkitx133133RealtimeKit/proc/sbin/nologin !!17978      rtkitx133  !!  
netdatax134134 /var/cache/netdata/sbin/nologin !!17980      netdatax134  !!  
usbmuxx140140usbmux user//sbin/nologin !!17977      usbmuxx140  !!  
muninx619619Munin system monitor/var/lib/munin/bin/false !17982      muninx619  !  
lightdmx620620Light Display Manager/var/lib/lightdm/sbin/nologin !!17978      lightdmx620  !!  
gitx972972git daemon user//usr/bin/git-shell !!17983      gitx972  !!  
                dockerx973  !!  
postgresx974974PostgreSQL user/var/lib/postgres/bin/bash !!17980      postgresx974  !!  
amulex975975aMule Client/var/lib/amule/sbin/nologin !!17978      amulex975  !!  
colordx976976Color management daemon/var/lib/colord/sbin/nologin !!17977      colordx976  !!  
avahix977977Avahi mDNS/DNS-SD daemon//sbin/nologin !!17977      avahix977  !!  
systemd-coredumpx978978systemd Core Dumper//sbin/nologin !!17977      systemd-coredumpx978  !!  
systemd-timesyncx979979systemd Time Synchronization//sbin/nologin !!17977      systemd-timesyncx979  !!  
systemd-resolvex980980systemd Resolver//sbin/nologin !!17977      systemd-resolvex980  !!  
systemd-networkx981981systemd Network Management//sbin/nologin !!17977      systemd-networkx981  !!  
systemd-journal-remotex982982systemd Journal Remote//sbin/nologin !!17977      systemd-journal-remotex982  !!  
                rfkillx983  !!  
                systemd-journalx984  !!  
tomax1001985 /home/toma/bin/bash $6$.179770999997   usersx985  !!  
                videox986  !!  
                uucpx987  !!  
                storagex988  !!  
                renderx989  !!  
                opticalx990  !!  
                lpx991  !!  
                kvmx992  !!  
                inputx993  !!  
                diskx994  !!  
                audiox995  !!  
                utmpx996  !!  
                kmemx997  !!  
                wheelx998  !!  
                admx999daemon !! daemon
nobodyx6553465534Nobody//sbin/nologin !!17977      nobodyx65534  !!  

log20190425:添加不需要使用的:3.1 专有编辑命令(仅限高级用户);添加目录 

转载于:https://www.cnblogs.com/sztom/p/10649293.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值