Linux用户管理


UID和GID

Linux系统采用一个32位的整数记录和区分不同的用户,这意味着系统可以记录多达40亿个不同的用户。这个用来区分不同用户的数字被称为User ID,简称UID。系统会自动记录“用户名”和UID的对应关系。Linux系统中的用户分为3类,即普通用户、根用户、系统用户。

  • 普通用户是指所有使用Linux系统的真实用户,这类用户可以使用用户名及密码登录系统。
  • 根用户也就是root用户,它的ID是0,也被称为超级用户,root账户拥有对系统的完全控制权:可以修改、删除任何文件,运行任何命令。
  • 系统用户是指系统运行时必须有的用户,但并不是指真实的使用者。

ls-l查看文件时,第三列和第四列显示的是这个文件的所有者是用户root,所有组是root组,如果加上了-n参数,第三列和第四列则是用UID和GID来显示的。

ronie@ronie-virtual-machine:~/Desktop$ touch t1
ronie@ronie-virtual-machine:~/Desktop$ sudo su
root@ronie-virtual-machine:/home/ronie/Desktop# touch t2
root@ronie-virtual-machine:/home/ronie/Desktop# exit
exit
ronie@ronie-virtual-machine:~/Desktop$ ls -al
total 16
drwxr-xr-x  3 ronie ronie 4096 10月 10 13:09 .
drwxr-x--- 14 ronie ronie 4096 10月  9 17:20 ..
drwxrwxr-x  2 ronie ronie 4096 10月  7 23:00 docker
-rw-rw-r--  1 ronie ronie  368 10月  7 18:38 docker-compose.yml
-rw-rw-r--  1 ronie ronie    0 10月 10 13:08 t1
-rw-r--r--  1 root  root     0 10月 10 13:09 t2
ronie@ronie-virtual-machine:~/Desktop$ ls -anl
total 16
drwxr-xr-x  3 1000 1000 4096 10月 10 13:09 .
drwxr-x--- 14 1000 1000 4096 10月  9 17:20 ..
drwxrwxr-x  2 1000 1000 4096 10月  7 23:00 docker
-rw-rw-r--  1 1000 1000  368 10月  7 18:38 docker-compose.yml
-rw-rw-r--  1 1000 1000    0 10月 10 13:08 t1
-rw-r--r--  1    0    0    0 10月 10 13:09 t2

要确认自己的UID,可以使用id命令来获得

ronie@ronie-virtual-machine:~/Desktop$ id
uid=1000(ronie) gid=1000(ronie) groups=1000(ronie),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),134(lxd),135(sambashare)
ronie@ronie-virtual-machine:~/Desktop$ sudo su
[sudo] password for ronie: 
root@ronie-virtual-machine:/home/ronie/Desktop# id
uid=0(root) gid=0(root) groups=0(root)

要确认自己所属的用户组,可以使用groups命令来获得

ronie@ronie-virtual-machine:~/Desktop$ groups
ronie adm cdrom sudo dip plugdev lpadmin lxd sambashare
ronie@ronie-virtual-machine:~/Desktop$ sudo su
[sudo] password for ronie: 
root@ronie-virtual-machine:/home/ronie/Desktop# groups
root
root@ronie-virtual-machine:/home/ronie/Desktop# exit
exit
ronie@ronie-virtual-machine:~/Desktop$ 

/etc/passwd和/etc/shadow:记录用户名、密码最重要的两个文件/etc/passwd和/etc/shadow。

  • /etc/passwd

    ronie@ronie-virtual-machine:~/Desktop$ cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    ronie:x:1000:1000:ronie,,,:/home/ronie:/bin/bash
    mysql:x:128:136:MySQL Server,,,:/nonexistent:/bin/false

    每行都是使用6个分隔号“:”隔开的7列字符串。

    • 用户名:UID字符串标记方式,方便阅读
    • 密码:在旧的Unix系统中,此字段放置加密后的密码,现在密码放在/etc/shadow中,现在此处用x代替。
    • UID:区分不同用户的整数。
    • GID:区分不同用户组的整数。
    • 说明栏:相当于注释,现在不再使用。
    • 家目录:用户登录后所处的目录。
    • shell:用户登录后,所使用的shell。
  • /etc/shadow

    root@ronie-virtual-machine:/home/ronie/Desktop# cat /etc/shadow
    root:!:19272:0:99999:7:::
    ronie:$y$j9T$Pgcst9EyqxRRk.jN8INhk.$pEH0ZZqZdDZvJ8Nbcm.bKUhTM1VzVVF4M8edw1kZzP3:19272:0:99999:7:::
    • 用户名:UID字符串标记方式。
    • 密码:加密后的密码。
    • 密码最近的修改日:从1970年1月1日至密码修改日的天数。
    • 密码不可修改的天数:密码修改后,几天不能修改密码。
    • 密码重新修改的天数:设置修改时间,到时间后提醒用户修改。
    • 密码失效前的警告天数:密码到期前几天提醒用户修改密码。
    • 密码失效的宽限天数:密码到期,过几天会失效。
    • 账号失效日期。
    • 保留字段。

新增和删除用户

  1. 新增用户:useradd,useradd命令用于添加新的用户。在执行的过程中:系统将用户信息记录在/etc/passwd中,一般会在/etc/passwd和/etc/shadow末尾追加一条记录,同时会分配给该用户一个UID。然后为该用户自动创建家目录,家目录以创建的用户名为目录名,创建的路径在/home目录中,再然后,复制/etc/skel下所有的文件至/home/kelly。

    root@ronie-virtual-machine:/home/ronie/Desktop# useradd kelly
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 3 /etc/passwd
    ronie:x:1000:1000:ronie,,,:/home/ronie:/bin/bash
    mysql:x:128:136:MySQL Server,,,:/nonexistent:/bin/false
    kelly:x:1001:1001::/home/kelly:/bin/sh
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 3 /etc/shadow
    ronie:$y$j9T$Pgcst9EyqxRRk.jN8INhk.$pEH0ZZqZdDZvJ8Nbcm.bKUhTM1VzVVF4M8edw1kZzP3:19272:0:99999:7:::
    mysql:!:19272:0:99999:7:::
    kelly:!:19275:0:99999:7:::
    root@ronie-virtual-machine:/home/ronie/Desktop# 
    

    使用-g参数指定该用户的用户组,-d参数指定该用户的家目录

    root@ronie-virtual-machine:/home/ronie/Desktop# useradd jack -g ronie -d /home/jack_home
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 3 /etc/passwd
    mysql:x:128:136:MySQL Server,,,:/nonexistent:/bin/false
    kelly:x:1001:1001::/home/kelly:/bin/sh
    jack:x:1002:1000::/home/jack_home:/bin/sh
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 3 /etc/shadow
    mysql:!:19272:0:99999:7:::
    kelly:!:19275:0:99999:7:::
    jack:!:19275:0:99999:7:::
    root@ronie-virtual-machine:/home/ronie/Desktop# 
    
  2. 修改密码:passwd,创建用户后,用户还没有登录系统的权限,在不设置密码的情况下,在/etc/shadow中该用户记录中以冒号分隔的第二列将显示为两个感叹号“!!”,这说明不允许该用户登录系统。因此,需要同时设置用户的密码,设置命令的方式是passwd后接用户名。

    root@ronie-virtual-machine:/home/ronie/Desktop# passwd kelly
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: password updated successfully
    

    如果不输入密码而是直接按回车键两次,密码会设置失败,如果输入了太过简单的密码,系统将会显示“BAD PASSWORD: it is too simplistic/systematic”或“BAD PASSWORD: The password is shorter than 8 characters”。虽然系统会提示密码太过简单,但还是会接受其作为该用户的密码。普通用户也可以使用passwd来修改自己的密码,但是需要提供当前用户的密码,并且密码不能太过简单,因为系统会拒绝普通用户设置过于简单的密码。

    ronie@ronie-virtual-machine:~/Desktop$ passwd
    Changing password for ronie.
    Current password: 
    New password: 
    BAD PASSWORD: The password is the same as the old one
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    New password: 
    BAD PASSWORD: The password contains the user name in some form
    passwd: Have exhausted maximum number of retries for service
    passwd: password unchanged
    ronie@ronie-virtual-machine:~/Desktop$ 
  3. 修改用户:usermod,-d:创建新的家目录,-m:如果指定用户的家目录存在,就自动创建新目录,-L:冻结账户,-U:解锁账户。

    root@ronie-virtual-machine:/home/ronie/Desktop# usermod -L kelly
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 2 /etc/shadow
    kelly:!$y$j9T$6s1kd14hmnpd53Suu9DTK1$Gk.1cARug8136IiB2GdYfHLkCVDIFpp6XVjVWLg5dG4:19275:0:99999:7:::
    jack:!:19275:0:99999:7:::
    root@ronie-virtual-machine:/home/ronie/Desktop# usermod -U kelly
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 2 /etc/shadow
    kelly:$y$j9T$6s1kd14hmnpd53Suu9DTK1$Gk.1cARug8136IiB2GdYfHLkCVDIFpp6XVjVWLg5dG4:19275:0:99999:7:::
    jack:!:19275:0:99999:7:::
    
  4. 删除用户:userdel,命令会将用户在/etc/passwd和/etc/shadow中的记录。

    root@ronie-virtual-machine:/home/ronie/Desktop# userdel kelly
    root@ronie-virtual-machine:/home/ronie/Desktop# userdel jack
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 2 /etc/shadow
    ronie:$y$j9T$Pgcst9EyqxRRk.jN8INhk.$pEH0ZZqZdDZvJ8Nbcm.bKUhTM1VzVVF4M8edw1kZzP3:19272:0:99999:7:::
    mysql:!:19272:0:99999:7:::
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 2 /etc/passwd
    ronie:x:1000:1000:ronie,,,:/home/ronie:/bin/bash
    mysql:x:128:136:MySQL Server,,,:/nonexistent:/bin/false
    root@ronie-virtual-machine:/home/ronie/Desktop# 
    
  5. 增加用户组:groupadd,删除用户组:groupdel

    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 2 /etc/group
    docker:x:999:
    mysql:x:136:
    root@ronie-virtual-machine:/home/ronie/Desktop# addgroup mygroup
    Adding group `mygroup' (GID 1001) ...
    Done.
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 2 /etc/group
    mysql:x:136:
    mygroup:x:1001:
    root@ronie-virtual-machine:/home/ronie/Desktop# delgroup mygroup
    Removing group `mygroup' ...
    Done.
    root@ronie-virtual-machine:/home/ronie/Desktop# tail -n 2 /etc/group
    docker:x:999:
    mysql:x:136:
    root@ronie-virtual-machine:/home/ronie/Desktop# 
    

检查用户信息

  1. 查看用户:users,who,w

    root@ronie-virtual-machine:/home/ronie/Desktop# users
    ronie ronie ronie
    root@ronie-virtual-machine:/home/ronie/Desktop# who
    ronie    tty2         2022-10-10 10:24 (tty2)
    ronie    pts/1        2022-10-10 15:18
    ronie    pts/3        2022-10-10 10:59
    root@ronie-virtual-machine:/home/ronie/Desktop# w
     15:43:15 up  5:18,  3 users,  load average: 0.01, 0.06, 0.01
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    ronie    tty2     tty2             10:24    5:18m  0.08s  0.07s /usr/libexec/gnome-session-binary --session=ubuntu
    ronie    pts/1    -                15:18    1.00s  0.04s  0.14s sudo su
    ronie    pts/3    -                10:59    4:42m  0.01s  0.06s sudo mysql
    root@ronie-virtual-machine:/home/ronie/Desktop# 
    

    users命令可以查看当前系统有哪些用户。
    who命令可以看出用户是通过哪个终端登录到系统中的。
    w命令显示详细信息,w命令的第一行会显示当前时间,系统运行时间,已登录的用户数量和系统负载。
    下面显示的信息分为8列

    • 第一列:登录用户的用户名。
    • 第二列:用户登录终端。
    • 第三列:如果用户从网络登录,则显示远程主机的主机名或IP地址。
    • 第四列:用户登录时间。
    • 第五列:用户闲置时间。
    • 第六列:与终端相关的当前所有运行进程消耗的CPU时间总量。
    • 第七列:当前WHAT列所对应的进程所消耗的CPU时间总量。
    • 第八列:用户当前运行的进程。
  2. 调查用户:finger
    finger命令在不加任何参数的情况下,会显示系统的登录用户,如果在finger后跟上某个用户名,则显示该用户更详细的信息。

    root@ronie-virtual-machine:/home/ronie/Desktop# finger
    Login     Name       Tty      Idle  Login Time   Office     Office Phone
    ronie     ronie      tty2     5:33  Oct 10 10:24 (tty2)
    ronie     ronie      pts/1          Oct 10 15:18
    ronie     ronie      pts/3    4:57  Oct 10 10:59
    root@ronie-virtual-machine:/home/ronie/Desktop# finger ronie
    Login: ronie                      Name: ronie
    Directory: /home/ronie                  Shell: /bin/bash
    On since Mon Oct 10 10:24 (CST) on tty2 from tty2
     5 hours 33 minutes idle
    On since Mon Oct 10 15:18 (CST) on pts/1   5 seconds idle
    On since Mon Oct 10 10:59 (CST) on pts/3   4 hours 57 minutes idle
    No mail.
    No Plan.
    root@ronie-virtual-machine:/home/ronie/Desktop# 
    

切换用户

切换成其他用户,su命令

ronie@ronie-virtual-machine:~/Desktop$ sudo su
[sudo] password for ronie: 
root@ronie-virtual-machine:/home/ronie/Desktop# useradd kelly
root@ronie-virtual-machine:/home/ronie/Desktop# passwd kelly 
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: password updated successfully
root@ronie-virtual-machine:/home/ronie/Desktop# su kelly
$ ls
docker    docker-compose.yml
$ pwd
/home/ronie/Desktop
$ exit
root@ronie-virtual-machine:/home/ronie/Desktop# exit
exit
ronie@ronie-virtual-machine:~/Desktop$ 

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Linux用户管理


我的朋友,理论是灰色的,而生活之树是常青的!