文章目录
一、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)申请一个账号,然后以这个账号的身份进入系统。
-
每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和 自己的主目录 。
-
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;
-
另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
2. 用户管理
linux 是多用户系统,root 用户具有最高权限,只有 root 用户才能创建和删除用户(useradd and userdel),其他用户无此权限。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改。
- 用户口令的管理。
- 用户组的管理。
用户管理的具体操作参考:Linux 用户和用户组管理或Linux用户和用户组管理详解
用户之间可以使用 su
命令进行切换。需要输入想切换到的用户的登陆密码。
二、用户分类
1. 用户类别
在linux下用户是根据角色定义的,具体分为三种角色:
- 超级用户:拥有对系统的最高管理权限,默认是root用户。
- 普通用户:只能对自己目录下的文件进行访问和修改,具有登录系统的权限,例如上面提到的www用户、ftp用户等。
- 虚拟用户:也叫“伪”用户,这类用户最大的特点是不能登录系统,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如系统默认的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
如果要查看~的真实面貌(绝对路径),有两种方法:
-
可以先进入~目录,然后用pwd -P命令查看~的绝对路径:
cd ~ pwd -P
-
或者,用户的家目录可以在 /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文件
-
前面说过,/etc/passwd 文件的第二列是口令。
但是我们从上述查看到的 /etc/passwd 内容里,观察到第二列都是x。这是为什么呢?解释:
虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中, 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。 -
第七列:登录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 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。 -
系统中有一类用户称为 伪用户(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