zoukankan      html  css  js  c++  java
  • 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   密码 最近修改日期 保护天数 密码失效天数 警告天数 失效日期 保留   组名 口令 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 专有编辑命令(仅限高级用户);添加目录 

  • 相关阅读:
    jquery Table基础操作
    window.opener
    CSS基础
    CSS样式
    CSS框架
    常用正则表达式
    HTML字体对应word字体
    SQL获取所有数据库名、表名、储存过程以及参数列表
    SQL集合运算:差集、交集、并集
    sql数据分页
  • 原文地址:https://www.cnblogs.com/sztom/p/10649293.html
Copyright © 2011-2022 走看看