文章目录

  • 一、Linux 多用户
    • 1. 理解Linux系统可以有多个用户
    • 2. 用户管理
  • 二、用户分类
    • 1. 用户类别
    • 2. 用户组
    • 3. id 命令
    • 4. uid、gid
  • 三、用户主目录
    • 1. Linux中,用户主目录(家目录)为:`~`
    • 2. 不同用户的主目录相互独立
      • (1)工作目录
      • (2)用户主目录
  • 参考链接

一、Linux 多用户

1. 理解Linux系统可以有多个用户

Linux 允许使用者在 Linux 系统上通过规划不同类型、不同层级的用户,并公平地分配系统资源与工作环境。而与 Windows 系统最大的不同,在于 Linux 允许不同的用户同时登录主机,同时使用主机的资源,因此 Linux 被称为是多用户系统。

Linux是一个真实的、完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响,例如某台linux服务器上有4个用户,分别是root、www、ftp和mysql,在同一时间内,root用户可能在查看系统日志,管理维护系统,www用户可能在修改自己的网页程序,ftp用户可能在上传软件到服务器,mysql用户可能在执行自己的SQL查询,每个用户互不干扰,有条不紊的进行着自己的工作,而每个用户之间不能越权访问,比如www用户不能执行mysql用户的SQL查询操作,ftp用户也不能修改www用户的网页程序,因此可知,不同用户具有不同的权限,每个用户是在权限允许的范围内完成不同的任务,linux正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。

任何一个要使用系统资源的用户,都必须首先向系统管理员(root)申请一个账号,然后以这个账号的身份进入系统。

  1. 每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和 自己的主目录

  2. 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;

  3. 另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

2. 用户管理

linux 是多用户系统,root 用户具有最高权限,只有 root 用户才能创建和删除用户(useradd and userdel),其他用户无此权限。

实现用户账号的管理,要完成的工作主要有如下几个方面:

  • 用户账号的添加、删除与修改。
  • 用户口令的管理。
  • 用户组的管理。

用户管理的具体操作参考:Linux 用户和用户组管理或Linux用户和用户组管理详解

用户之间可以使用 su 命令进行切换。需要输入想切换到的用户的登陆密码。


二、用户分类

1. 用户类别

在linux下用户是根据角色定义的,具体分为三种角色:

  1. 超级用户:拥有对系统的最高管理权限,默认是root用户。
  2. 普通用户:只能对自己目录下的文件进行访问和修改,具有登录系统的权限,例如上面提到的www用户、ftp用户等。
  3. 虚拟用户:也叫“伪”用户,这类用户最大的特点是不能登录系统,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如系统默认的bin、adm、nobody用户等,一般运行的web服务,默认就是使用的nobody用户,但是nobody用户是不能登录系统的。

还有一种说法:

Linux系统上的用户分为两类:管理员用户(root)和普通用户。
其中,普通用户又分为两类:登录用户和系统用户。

不同的用户有不同的身份 / 权限:

  • 管理员用户:拥有对系统的最高管理权限
  • 登录用户:系统资源的正常使用者。
  • 系统用户:仅运行服务程序。

2. 用户组

相应地,Linux用户组分两类:管理员组和普通组。
其中,普通组又分为两类:系统组和登录组。

系统会把每个用户组用数字来标识,不同系统上数字标识可能不同。

组ID的范围:
管理员组:0
系统组:1-499、1-999
登录组:1000+

3. id 命令

id命令:可以查看当前登录用户所在的用户组。

可以通过执行命令id查看自己的组号:

wsl@xd:~$ id
uid=1006(wsl) gid=1006(wsl) groups=1006(wsl)

可以看到,我的uid是1006,gid是1006。
所以我是登陆组,属于登录用户。

查看其他人的id:

id 用户名

例:

首先,系统中都有谁可以通过/home目录查看:

wsl@xd:~$ cd ..         //从主目录/home/wsl退到/home
wsl@xd:/home$ cd ..     //从目录/home退到/
wsl@xd:/$ pwd
/
wsl@xd:/$ ls
bin   cdrom  etc   lib    lib64   lost+found  mnt  proc  run   snap  swapfile  tmp  var
boot  dev    home  lib32  libx32  media       opt  root  sbin  srv   sys       usr
wsl@xd:/$ cd home
wsl@xd:/home$ ls
chy  edward  hjt  jh  wqj  wsl  xd

查看其中一个用户 hjt 的 id :

wsl@xd:~$ id hjt
uid=1004(hjt) gid=1004(hjt) groups=1004(hjt),113(ssl-cert)

4. uid、gid

登陆 Linux 系统时,你虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名,它只认识与用户名对应的 ID 号(也就是一串数字)。Linux 系统将所有用户名与 ID 的对应关系都存储在 /etc/passwd 文件中。

一般情况下,当登录Linux操作系统时,会先寻找/etc/passwd是否有输入账号,如果没有,则跳出,如果有,则读取对应的UID与GID,随后进入/etc/shadow核对密码,一切完成后,则进入shell管控。进入Linux系统之后,不认用户名,只认UID与GID。

Linux 系统中,每个用户的 ID 细分为 2 种,分别是用户 ID(User ID,简称UID)和组 ID(Group ID,简称GID),这与 文件拥有者拥有群组 两种属性相对应:

从上图可以看到,文件属性中显示的并不是uid和gid(数字),而是用户名和组名(root)。

在Linux系统中,每个文件都有自己的拥有者 ID 和群组 ID,当用户需要显示文件属性时,Linux系统会根据 /etc/passwd 和 /etc/group 文件中的内容,分别找到 UID 和 GID 所对应的用户名和群组名,然后显示出来。

在 /etc/passwd 文件中,利用 UID 可以找到对应的用户名;在 /etc/group 文件中,利用 GID 可以找到对应的群组名。

由此可见,UID与GID在日常的账户管理中,发挥着非常重要的作用,因为一不小心就可能访问不了自己的文件,所以温馨提示大家,不要随便改动自己的/etc/passwd与/etc/group文件。(使用root账号登录并执行命令vim /etc/passwd是可以更改文件内容的)

这两个文件的内容可以通过 cat 命令查看:(这两个文件对所有用户都是可读的)

cat /etc/passwd
cat /etc/group

只查看 /etc/passwd 文件中关于自己的内容:

cat /etc/passwd | grep 你的用户名

例子:

先查看/etc/passwd文件:

wsl@xd:~$ cat /etc/passwd | grep wsl
wsl:x:1006:1006::/home/wsl:/bin/bash
(用户名:口令:uid:gid:注释性描述:主目录:登录Shell)

其中,第一项是我的用户名(wsl),第三项(1006)和第四项(1006)分别是 我的 uid 和 gid 。

再查看/etc/group文件:

wsl@xd:~$ cat /etc/group | grep wsl
wsl:x:1006:
(组名:口令:gid:组内用户列表)

通过gid(1006),可知我的组名是wsl。


三、用户主目录

实际上,当你登录 linux 系统之后,就位于自己的主目录中。

1. Linux中,用户主目录(家目录)为:

对一般用户,~为/home/用户名
对于root用户,~为/root

如果要查看~的真实面貌(绝对路径),有两种方法:

  1. 可以先进入~目录,然后用pwd -P命令查看~的绝对路径:

    cd ~
    pwd -P
    
  2. 或者,用户的家目录可以在 /etc/passwd 中的第6项找到。
    /etc/passwd 文件的一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:

    用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
    

    查看我的/etc/passwd文件:

    wsl@xd:~$ 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:/usr/sbin/nologin
    systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
    systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
    messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
    syslog:x:104:110::/home/syslog:/usr/sbin/nologin
    _apt:x:105:65534::/nonexistent:/usr/sbin/nologin
    tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
    uuidd:x:107:114::/run/uuidd:/usr/sbin/nologin
    tcpdump:x:108:115::/nonexistent:/usr/sbin/nologin
    avahi-autoipd:x:109:116:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin
    usbmux:x:110:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
    rtkit:x:111:117:RealtimeKit,,,:/proc:/usr/sbin/nologin
    dnsmasq:x:112:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
    cups-pk-helper:x:113:120:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
    speech-dispatcher:x:114:29:Speech Dispatcher,,,:/run/speech-dispatcher:/bin/false
    avahi:x:115:121:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
    kernoops:x:116:65534:Kernel Oops Tracking Daemon,,,:/:/usr/sbin/nologin
    saned:x:117:123::/var/lib/saned:/usr/sbin/nologin
    nm-openvpn:x:118:124:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
    hplip:x:119:7:HPLIP system user,,,:/run/hplip:/bin/false
    whoopsie:x:120:125::/nonexistent:/bin/false
    colord:x:121:126:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
    geoclue:x:122:127::/var/lib/geoclue:/usr/sbin/nologin
    pulse:x:123:128:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
    gnome-initial-setup:x:124:65534::/run/gnome-initial-setup/:/bin/false
    gdm:x:125:130:Gnome Display Manager:/var/lib/gdm3:/bin/false
    sssd:x:126:131:SSSD system user,,,:/var/lib/sss:/usr/sbin/nologin
    xd:x:1000:1000:xd,,,:/home/xd:/bin/bash
    systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
    lightdm:x:127:134:Light Display Manager:/var/lib/lightdm:/bin/false
    sshd:x:128:65534::/run/sshd:/usr/sbin/nologin
    chy:x:1001:1001::/home/chy:/usr/bin/fish
    edward:x:1002:1002::/home/edward:/usr/bin/fish
    glances:x:129:136::/var/lib/glances:/usr/sbin/nologin
    wqj:x:1003:1003::/home/wqj:/bin/sh
    hjt:x:1004:1004::/home/hjt:/bin/bash
    xrdp:x:130:137::/run/xrdp:/usr/sbin/nologin
    jh:x:1005:1005::/home/jh:/bin/bash
    nvidia-persistenced:x:131:138:NVIDIA Persistence Daemon,,,:/nonexistent:/usr/sbin/nologin
    wsl:x:1006:1006::/home/wsl:/bin/bash
    

    以上面为例,第一行, root 的家目录在 /root ,所以当 root 登陆之后,就会立刻跑到 /root 目录里头啦!
    我在最后一行,用户wsl,我的家目录是/home/wsl,所以我登陆系统之后,就位于自己的家目录中。
    例:
    我一进系统,就位于:wsl@xd:~$ ,其中的~说明我位于自己的主目录,可以通过pwd查看自己绝对路径:

    wsl@xd:~$ pwd
    /home/wsl
    

    我的主目录是/home/wsl

多一嘴:关于/etc/passwd文件

  1. 前面说过,/etc/passwd 文件的第二列是口令。
    但是我们从上述查看到的 /etc/passwd 内容里,观察到第二列都是x。这是为什么呢?

    解释:
    虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中, 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。

  2. 第七列:登录Shell

    Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

    用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。

    Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。

    系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。

    我的(最后一行wsl)该字段的值为 /bin/bash,说明我的Shell是bash。

    用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。
    利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。

  3. 系统中有一类用户称为 伪用户(pseudo users)。
    这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。

    常见的伪用户如下所示:
    bin:拥有可执行的用户命令文件
    sys:拥有系统文件
    adm:拥有帐户文件
    uucp:UUCP使用
    lp:lp或lpd子系统使用
    nobody:NFS使用

    除了上面列出的伪用户外,还有许多标准的伪用户,例如:audit, cron, mail, usenet等,它们也都各自为相关的进程和文件所需要。

    这些伪用户的登录 Shell 都是 nologin(好像还有false)。

2. 不同用户的主目录相互独立

(1)工作目录

从逻辑上讲,用户在登录到 Linux 系统中之后,每时每刻都处在某个目录之中,此目录被称做工作目录或当前目录(Working Directory)。工作目录是可以随时改变的。

用户初始登录到系统中时,其主目录(Home Directory)就成为其工作目录。

工作目录用“.”表示,其父目录用“..”表示。

(2)用户主目录

用户主目录是系统管理员增加用户时创建起来的(以后也可以改变),每个用户都有自己的主目录,不同用户的主目录一般互不相同。

用户刚登录到系统中时,其所在的工作目录便是该用户主目录,通常与用户的登录名相同。

用户可以通过一个~字符来引用自己的主目录。
例如,进入到主目录:

wsl@xd:~$ cd ~
wsl@xd:~$ pwd
/home/wsl

参考链接

  1. Linux系统用户和权限管理
  2. Linux 用户和用户组管理
  3. Linux UID和GID(用户ID和组ID)
  4. linux中用户的主目录~
  5. 操作系统-多用户如何理解(Linux)

【Linux】多用户原理 - 用户分类、用户组、uid、gid、主目录相关推荐

  1. 用户和用户组-UID和GID

    用户和用户组-UID和GID Linux用户和用户组 用户UID 用户组GID /etc/passwd 文件结构 /etc/shadow 文件结构 Linux用户和用户组 Linux采用一个32位的整 ...

  2. 管理Linux 系统的用户与用户组

    任务五 管理Linux系统的用户与用户组 [任务说明] Linux操作系统是多用户多任务操作系统. 用户可分为普通用户和超级用户,除了用户以外还有用户组.所谓用户组就是用户的集合,CentOS组中有两 ...

  3. Linux 下的用户、用户组、文件权限设置

    给用户增加执行权限 chmod u+x a.txt 给用户所属组增加写权限,其他用户删除读权限 chmod g+w,o-r a.txt 给用户所属组增加读写执行权限 chmod g=rwx a.txt ...

  4. Linux云计算架构-用户及用户组管理

    文章目录 Linux云计算架构-用户及用户组管理 1. 用户管理命令 1. 查看用户信息 2. 添加用户 3. 添加组 4. 修改用户信息 5. 修改组信息 6. 删除用户 7. 删除组 8. 用户密 ...

  5. Linux 什么是用户和用户组;创建用户、组和组成员资格;创建文件或目录并设置权限

    一.Linux中的用户和用户组: 1)用户的类型: 1.Linux中用户的类型 Linux系统是一个多用户多任务的操作系统,每个用户都有一个独立的身份号码,这个就是用户ID(UID).在Linux中用 ...

  6. 【已阅】Linux下的用户分类与su/sudo 命令,Linux下的文件类型/用户文件权限身份/文件权限属性/权限与文件权限/ls-l文件属性详解

    Tips 下载就是把我们的文件拷贝到系统的某个特定路径之下,普通用户是不允许你往系统里面去拷的. Linux下的用户分类 root用户,管理员级别的用户身份,他的话基本上不受权限的约束. 普通用户,普 ...

  7. Linux添加/删除用户和用户组

    本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数. 1.建用户: adduser phpq                             //新建phpq用户 passwd ...

  8. Linux学习笔记之Linux添加/删除用户和用户组

    本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数. 1.建用户: adduser phpq //新建phpq用户 passwd phpq //给phpq用户设置密码 2.建工作组 g ...

  9. Linux添加/删除用户和用户组(linux中,添加cvs用户,实质就是添加linux用户。)

    来源:http://www.cnblogs.com/xd502djj/archive/2011/11/23/2260094.html 本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数 ...

最新文章

  1. CCF推荐系统项目代码解读!
  2. NR 5G NAS非接入层
  3. malloc和free函数详解
  4. python最短回文串_LeetCode-Python-214. 最短回文串
  5. Oracle【IT实验室】数据库备份与恢复之二:SQL*Loader
  6. 小米答题题库_拼多多果园答题题库74(每日更新)
  7. 小小智慧树机器人_国网营业厅“AI新势力”,科沃斯商用机器人解锁智慧服务新模式!...
  8. dell t40 固态系统盘_天元戴尔(DELL)T40配置教程
  9. 嵌入式Linux系统编程学习之三十线程的同步
  10. Qt学习之路3---Qt中的坐标系统
  11. forward/redirect跳转页面的区别
  12. Nik Collection 3.3.0中文版 (摄影师必备ps滤镜插件套装)支持big surv
  13. Scrapy豆瓣电影top250(excel保存和图片下载)
  14. python label背景透明_如何使tkinter标签的背景透明,以便只看到文本?
  15. .mat转.tif 用于arcgis裁剪遥感图像
  16. win7显示隐藏文件夹的方法
  17. spring-cloud(十一)GateWay强大的路由谓词(断言)功能
  18. 华为nova6se怎么升级鸿蒙,华为EMUI11支持哪些手机
  19. java简单人物介绍
  20. Graham-Scan算法计算凸包的Python代码实现

热门文章

  1. Android 资源
  2. EFI Network…
  3. Linux Kernel支持NMI的三种方式
  4. 来自于微信小程序的一封简讯
  5. CSS隐藏滚动条样式 ::-webkit-scrollbar
  6. ios应用提交上架被appstore拒绝的十大理由
  7. “注定不凡”!汇众教育发布会正式推出V10.0产品
  8. 麒麟系统编译OSG、OSGEarth记
  9. B150主板安装win10
  10. matlab的三条线如何区分,电线三根线颜色如何区分