目录
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   密码 最近修改日期 保护天数 密码失效天数 警告天数 失效日期 保留   组名 口令 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     !!    
mail x 8 12   /var/spool/mail /sbin/nologin   !! 17977             mail 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 专有编辑命令(仅限高级用户);添加目录

Linux 系统的用户和组的更多相关文章

  1. Linux系统下用户与组的管理

    Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户: ...

  2. Linux 系统的用户和组详解_【all】

    1.Linux 用户和用户组详解 2.Linux 文件特殊权限详解 3.Linux 文件的读写执行权限的说明 4.Linux 架构之简述企业网站 5.Linux 环境变量设置详解 6.企业生产环境用户 ...

  3. Linux学习--4.用户和组的管理

    用户和组的管理 前言 本篇文章主要讲Linux系统下用户和组的概念,还有添加用户和组,修改用户和组的基本操作,会涉及不少与之相关的配置文件与命令的介绍,几乎所有 正文 首先,简单提下概念,用户是操作系 ...

  4. 管理Linux服务器的用户和组

    管理Linux服务器的用户和组 Linux操作系统是一个多用户多任务的操作系统,允许多个用户同时登录到系统,使用系统资源. 为了使所有用户的工作顺利进行,保护每个用户的文件和进程,规范每个用户的权限, ...

  5. Linux文件属性之用户和组基础知识介绍

    一.Linux多用户多任务介绍 Linux/Unix 是一个多用户.多任务的操作系统:在讲Linux账号及账号组管理之前,我们先简单了解多用户.多任务操作系统的基本概念. 1.1Linux单用户多任务 ...

  6. Linux 系统中用户切换

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  7. Linux 系统中用户切换(su user与 su - user 的区别)

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  8. Linux系统root用户忘记密码解决方法

    一:在linux系统启动时(如下图),按e键 二:进入到设置页面,定位到如下行: 三:按e键,进入输入界面 四:在编辑行最后面,空格,输入single,回车后回到第二步界面,只是后面多了single ...

  9. 破解Linux系统root用户密码

    linux系统的启动过程  在介绍破解Linux系统root密码之前先了解一下linux系统的启动过程 开机自检(POST),初始化部分硬件 搜素可用于引导的启动设备(如磁盘的MBR) 读取并将控制权 ...

随机推荐

  1. 记-统计svn与git的log日志中的代码行变更

    任务要求 统计指定时间内,指定git地址与svn地址上的所有人员的代码行变更情况. 解决方案 最初为根据数据库中存储的所有git与svn地址来统计所有人员的提交代码行.之后由于库中存储的地址不全,改为 ...

  2. mybatis调用存储过程,获取返回的游标

    将调用存储过程参数放入map中,由于返回的游标中包含很多参数,所以再写一个resultmap与之对应,类型为hashmap.设置返回的jdbcType=CURSOR,resultMap设置为id对应的 ...

  3. 导航菜单点击图片切换--jquery

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. cdh日常维护常见问题及解决方案

    为数据节点添加新硬盘 - 挂载硬盘到指定文件夹.如`/dfs_diskb`: - 打开cloudera manager -> hdfs -> 配置 -> DataNode -> ...

  5. form表单提交到Servlet后,弹出对话框,然后在跳转页面

    在Servlet中添加一下代码即可 out.print("<script>alert('添加成功!');window.location='index.jsp';</scri ...

  6. SQL-50 将employees表中的所有员工的last_name和first_name通过(')连接起来

    题目描述 将employees表中的所有员工的last_name和first_name通过(')连接起来.CREATE TABLE `employees` (`emp_no` int(11) NOT ...

  7. 几个常用内核函数(《Windows内核情景分析》)

    参考:<Windows内核情景分析> 0x01  ObReferenceObjectByHandle 这个函数从句柄得到对应的内核对象,并递增其引用计数. NTSTATUS ObRefer ...

  8. k8s的flannel的pod运行一段时间init error

    问题现象 使用Kubeadm部署的flannel网络运行一段时间后,提示init:Error错误,查看具体的信息如下: [root@node1 ~]# kubectl describe pod kub ...

  9. Python实现12306自动查票程序

    这是在网上扒拉过来的,原文链接: http://blog.csdn.net/An_Feng_z/article/details/78631290 目前时间2018/01/04 文中各种接口均为可用,亲 ...

  10. 两种语言实现设计模式(C++和Java)(二:单例模式)

    本篇介绍单例模式,可以说是使用场景最频繁的设计模式了.可以根据实例的生成时间,分为饿汉模式和懒汉模式 懒汉模式:饿了肯定要饥不择食.所以在单例类定义的时候就进行实例化. 饿汉模式:故名思义,不到万不得 ...