Linux 用户管理

作者: 错过了过去 | 来源:发表于2019-06-16 20:00 被阅读19次

    今天是周日了,美美的睡了一个午觉,感觉一周的劳累全部释放掉了。前面我和大家分享文件权限 的时候有讲过要单独写文章介绍 Linux 系统的用户管理,今天我们就一起来看看吧。

    对于我们自用的系统,默认有一个超级用户 root,还有一个普通用户,就是我们在安装操作系统 的时候自己设置的那个用户名,比如我的叫做 elliot。其实有这两个用户就可以了,我们也不必去管怎么增加用户,删除用户等。但是考虑到我们可能想改一下用户名,改一下用户密码等,我还是决定介绍一些这些内容,不感兴趣的朋友可以不必看,不影响你对 Linux 系统的正常使用。

    还有一点,Linux 系统还有服务器版本的,一般同一个服务器会有很多人使用,所以都会给每个使用的人都创建一个普通用户。好了那我们一起来看看是怎么操作的吧。

    1. useradd 命令

    我们创建新的用户使用的是 useradd 命令,在终端输入:useradd -h 或者 useradd --help 可以看到如下页面,是 useradd 命令的说明文档。下面我们来看几个重要的参数。

    20190317172741022_681778810.png
    • -d 账号主目录(复制于 /etc/skel)
    • -m 同时创建主目录(默认首次创建用户的时候才生效)
    • -c 全名(描述)
    • -e 账号过期 YYYY_MM_DD
    • -N 不创建同名组账号
    • -g 指定主组(必须存在)
    • -G 额外组

    看上面的描述肯定会有人云里雾里的,看不懂,接着来看一个创建新用户的例子吧:

    • sudo useradd -d /home/chaojun -m chaojun:这条命令执行后,我们就创建了一个新用户 chaojun,同时创建了 chaojun 用户的家目录 /home/chaojun

    这里需要注意, 账号最长 32 个字符,用户的家目录下的文件拷贝自 /etc/skel。执行 ll /etc/skel 就可以看到其中包含的文件,如下图:

    20190317173725852_516822355.png

    2. 管理用户

    既然添加了新的用户,那我们的系统就存在多个用户,操作系统是怎么管理我们的多个用户的呢?其实在 Linux 系统下,有一个账号数据库文件:/etc/passwd,我们一起来看看它里面的内容是怎么样的吧:在终端输入:cat /etc/passwd 便能看到。

    elliot@ubunut:~$ cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/usr/sbin/nologin
    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
    lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
    mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
    uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
    proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
    www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
    backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
    list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
    irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
    gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
    nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
    systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
    systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
    syslog:x:102:106::/home/syslog:/usr/sbin/nologin
    messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
    _apt:x:104:65534::/nonexistent:/usr/sbin/nologin
    uuidd:x:105:111::/run/uuidd:/usr/sbin/nologin
    avahi-autoipd:x:106:112:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin
    usbmux:x:107:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
    dnsmasq:x:108:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
    rtkit:x:109:114:RealtimeKit,,,:/proc:/usr/sbin/nologin
    cups-pk-helper:x:110:116:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
    speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
    whoopsie:x:112:117::/nonexistent:/bin/false
    kernoops:x:113:65534:Kernel Oops Tracking Daemon,,,:/:/usr/sbin/nologin
    saned:x:114:119::/var/lib/saned:/usr/sbin/nologin
    pulse:x:115:120:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
    avahi:x:116:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
    colord:x:117:123:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
    hplip:x:118:7:HPLIP system user,,,:/var/run/hplip:/bin/false
    geoclue:x:119:124::/var/lib/geoclue:/usr/sbin/nologin
    gnome-initial-setup:x:120:65534::/run/gnome-initial-setup/:/bin/false
    gdm:x:121:125:Gnome Display Manager:/var/lib/gdm3:/bin/false
    elliot:x:1000:1000:elliot,,,:/home/elliot:/bin/bash
    vboxadd:x:999:1::/var/run/vboxadd:/bin/false
    chaojun:x:1001:1001::/home/chaojun:/bin/sh
    elliot@ubunut:~$ 
    

    其中每一行代表一个用户,每个用户的描述是用冒号分隔开的 7 个字段,他们代表的含义不一样,为了简单,我举个例子来解释每个字段的含义,当然真实含义并不全是这样的。

    用户名 房间号 公司电话 住宅电话 other 主目录 shell
    chaojun x 1001 1001 /home/chaojun /bin/sh
    elliot x 1000 1000 elliot,,, /home/elliot /bin/bash

    有人可能会问,不是只用 root、elliot、chaojun 三个用户吗?我怎么看到不止三行内容。其实是因为 Linux 的一些服务运行需要不同的权限,为了安全,在服务安装的时候会自动给不同的服务创建用户来获得不同的权限。

    还有一个用户数据库文件是 /etc/shadow,我们在终端输入命令:sudo cat /etc/shadow 即可看到其中的内容。

    elliot@ubunut:~$ sudo cat /etc/shadow
    [sudo] password for elliot: 
    root:!:17960:0:99999:7:::
    daemon:*:17937:0:99999:7:::
    bin:*:17937:0:99999:7:::
    sys:*:17937:0:99999:7:::
    sync:*:17937:0:99999:7:::
    games:*:17937:0:99999:7:::
    man:*:17937:0:99999:7:::
    lp:*:17937:0:99999:7:::
    mail:*:17937:0:99999:7:::
    news:*:17937:0:99999:7:::
    uucp:*:17937:0:99999:7:::
    proxy:*:17937:0:99999:7:::
    www-data:*:17937:0:99999:7:::
    backup:*:17937:0:99999:7:::
    list:*:17937:0:99999:7:::
    irc:*:17937:0:99999:7:::
    gnats:*:17937:0:99999:7:::
    nobody:*:17937:0:99999:7:::
    systemd-network:*:17937:0:99999:7:::
    systemd-resolve:*:17937:0:99999:7:::
    syslog:*:17937:0:99999:7:::
    messagebus:*:17937:0:99999:7:::
    _apt:*:17937:0:99999:7:::
    uuidd:*:17937:0:99999:7:::
    avahi-autoipd:*:17937:0:99999:7:::
    usbmux:*:17937:0:99999:7:::
    dnsmasq:*:17937:0:99999:7:::
    rtkit:*:17937:0:99999:7:::
    cups-pk-helper:*:17937:0:99999:7:::
    speech-dispatcher:!:17937:0:99999:7:::
    whoopsie:*:17937:0:99999:7:::
    kernoops:*:17937:0:99999:7:::
    saned:*:17937:0:99999:7:::
    pulse:*:17937:0:99999:7:::
    avahi:*:17937:0:99999:7:::
    colord:*:17937:0:99999:7:::
    hplip:*:17937:0:99999:7:::
    geoclue:*:17937:0:99999:7:::
    gnome-initial-setup:*:17937:0:99999:7:::
    gdm:*:17937:0:99999:7:::
    elliot:$6$LaBA0Snx$otlymeUGos/2uKD1Ke8IaEonwXIvcVCAuHMd4MxVVYp7eAevi5YSDUv0AWX0iPpi5.4nK6.6vgt.NSrc6ykB./:17960:0:99999:7:::
    vboxadd:!:17962::::::
    chaojun:!:17972:0:99999:7:::
    elliot@ubunut:~$ 
    

    我们还是来举例说明其中的含义,例子:elliot:$6$LaBA0Snx$otlymeUGos/2uKD1Ke8IaEonwXIvcVCAuHMd4MxVVYp7eAevi5YSDUv0AWX0iPpi5.4nK6.6vgt.NSrc6ykB./:17960:0:99999:7:::

    可以看到,每一行代表一个用户,每个用户的描述用 8 个 冒号隔开,也就是 9 个字段描述。下面详细说明每个字段的含义:

    • 1-2 用户名:密码
      • 密码为 "!"、"*" 的账号不能直接登录系统(其他账号登录后可切换为)
      • !:密码锁定
    • 3 上次修改日期
      • 自 1970-01-01 起的天数
      • 0 表示用户下次登录时需要修改密码,空表示关闭密码过期功能
    • 4-5 密码最小使用期:密码最长使用期
      • 后值小于前值时用户无法修改密码
    • 6 密码过期前几天提醒
    • 7 密码过期几天后账号会被锁定
      • 账号过期用户不能登录,密码过期看此设置
    • 8 账号过期日期(距 1970-01-01 的天数)
    • 9 保留

    3. 设置账号密码

    • passwd chaojun
      • -l 锁定账号密码!
      • -u 解锁账号
      • -d 删除密码(账号无密码可登录)
      • -n/-x 密码最小/最大使用期
      • -w 密码过期前几天发出警告
      • -i 密码过期几天后锁定账号
      • -e 密码立刻过期(下次登录必须修改密码)
      • -S 查看账号的密码状态(L锁定、P活动、N没密码)

    4. 添加账号

    • adduser chaojun
      • 基于 useradd 的 Perl 脚本
      • 并非所有的Linux发行版本都包含
      • 向导式运行(不需要记忆命令)
      • /usr/sbin/adduser
    • 批量添加账号
      • sudo newusers users.txt
        • user1:passwd1:::user1:/home/user1:/bin/bash
        • user2:passwd2:::user2:/home/user2:/bin/bash

    5. 删除账号

    • userdel chaojun
      • 未同时删除用户主目录
      • 进行文件备份
    • rm -rf /home/chaojun 删除用户主目录
    • userdel -r chaojun 删除账号的同时删除其主目录

    6. 切换账号

    su                      需要输入root密码(默认失败)
    sudo su                 输入当前账号密码(当前账号属于sudo组)
    sudo -i                 同上
    sudo -s                 同上
    su chaojun              切换到其他账号(输入目标账号密码)
    sudo su chaojun         切换到其他账号(输入当前账号密码)
    

    今天的分享就到这里了,有什么不懂的可以给我留言或者私信我哦!

    相关文章

      网友评论

        本文标题:Linux 用户管理

        本文链接:https://www.haomeiwen.com/subject/rwtnfctx.html