树莓派与Linux——Linux用户

  1. 树莓派与Linux——Linux用户
    1. 1、我是谁
    2. 2、root和用户创建
    3. 3、用户信息文件
    4. 4、文件权限
    5. 5、文件权限管理

树莓派与Linux——Linux用户

本文大部分内容参考自《树莓派开始,玩转Linux》第十八章,作者: vamei & 周昕梓,下文中出现的全部的回显都是本人实际操作后的返回结果。

Linux是一个多用户系统。多个用户可以同时登录同一台Linux电脑,同时使用,互不干扰。因此,我们必须考虑到用户隐私和用户权限的问题。Linux从UNIX继承来一套用户系统,这套用户系统通过用户权限的设置,可以有效地保护用户隐私,并防止用户进行越权操作。

本文主要介绍了Linux的用户和权限系统。Linux以用户身份和组身份来管理用户。对于一个文件来说,它给自己的拥有者、拥有组和其他人规定了不同的读、写、执行权限。通过这一机制,Linux可以实现复杂的文件授权。

1、我是谁

Linux用户登录时,输入了自己的用户名和密码。用户名是一串可读的文本,比如“pi”。作为惯例,用户名第一位是一个英文字母,后面可以跟随一串英文字母、数字或符号“-”。

如果用户登录通过,那么操作系统就确认了用户的身份。此后用户都以该身份在系统内活动。你可以通过下面的命令找出自己的身份:

pi@raspberrypi:~ $ who am i
pi       pts/0        2020-04-25 16:25 (192.168.3.166)

从这个命令的返回中,可以看到自己的用户名和最近一次登录时间。

命令who可以返回所有的登录用户,如果用户pi和用户lvor都已经登录系统,那么命令将返回:

pi@raspberrypi:~ $ who
pi       tty1         2020-04-19 22:26
pi       pts/0        2020-04-25 16:25 (192.168.3.166)
lvor     pts/1        2020-04-25 16:32 (192.168.3.166)

在返回的结果中,pts说明了用户登录的终端号。如果用户是用SSH之类的方式远程登录,那么括号中的IP地址说明了用户是从哪个IP地址远程登录的。

在Linux中,我们可以用文本形式的用户名来指代一个用户。比如,命令write可以用来给同一Linux下的其他用户发信息。用户pi发信息给用户lvor:

pi@raspberrypi:~ $ echo "Who are you?" | write lvor

命令echo后面的文本用双引号包裹起来,这是为了提醒echo整个双引号内的文本是一个完整的文本,把它作为单一的参数,以防命令错误地根据空格分割为多个参数。

用户lovr会显示接收到的信息:

lvor@raspberrypi:~ $
Message from pi@raspberrypi on pts/0 at 16:35 ...
Who are you?
EOF

用户不仅是一个单一个体,同时还是一个用户组 (Group)的成员。组是多个用户的集合,组内的用户享有某些共同的权限。一个用户至少属于一个用户组,可以用groups命令来查找用户所属的组,如下所示将返回自己所属的组:

pi@raspberrypi:~ $ groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi

如下所示将返回用户pi和用户lvor所属的组:

pi@raspberrypi:~ $ groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio
pi@raspberrypi:~ $ groups lvor
lvor : lvor

用户可以通过文本形式的用户名记住每个用户。不过,在机器底层,会用一个数字代表用户身份。一个用户首先是一个唯一个体。在操作系统眼中,用户个体可以用一个数字,即用户 ID(User ID,UID)来表示。组同样可以用一个数字组 ID(Group ID,GID)来表示。我们可以用id命令来找到用户的UID和GID,如下所示将返回用户pi和用户lvor的UID和GID:

pi@raspberrypi:~ $ id pi
uid=1000(pi) gid=1000(pi) 组=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),999(spi),998(i2c),997(gpio)
pi@raspberrypi:~ $ id lvor
uid=1001(lvor) gid=1001(lvor) 组=1001(lvor)

2、root和用户创建

除了之前一直在登录使用的pi用户,我们还可以创建其他用户。创建用户的操作需要root权限。在Linux系统中,有一个特殊的root用户,是系统中的神级用户,拥有非常高的权限。root就是上帝,如下图所示。

通常来说,root账户是由系统管理员掌握的。如果知道root用户的密码,那么可以使用su命令来切换用户:

su - 用户名

树莓派Raspbian系统默认登录用户名为pi,该账户默认密码是raspberry(可在raspi-config中修改)。树莓派的Raspbian系统root用户默认是禁用状态,且没有密码,所以要先设置个密码,然后开启才能正常使用。

使用pi账户进行登陆命令行,执行命令:sudo passwd root设置root用户密码,然后在执行sudo passwd --unlock root开启root账户,在使用su - root测试是否生效!重新锁定root账户可执行命令:sudo passwd --lock root

pi@raspberrypi:~ $ sudo passwd root
新的 密码:
重新输入新的 密码:
passwd:已成功更新密码
pi@raspberrypi:~ $ sudo passwd --unlock root
passwd:密码过期信息已更改。
pi@raspberrypi:~ $ su - root
密码:
root@raspberrypi:~# exit
注销
pi@raspberrypi:~ $ sudo passwd --lock root
passwd:密码过期信息已更改。
pi@raspberrypi:~ $ 

用户root可以做很多普通用户做不到的事,比如监听1024以下的端口、改变文件的拥有者等。由于root权限很高,用户应该避免直接使用root账户进行操作。直接以root权限执行命令式,很容易产生不可挽回的误操作,比如删除根目录:

lvor@raspberrypi:~ $ rm -r /
rm: 在'/' 进行递归操作十分危险
rm: 使用 --no-preserve-root 选项跳过安全模式

普通用户无权执行该命令,但root用户有权直接执行这一操作,把根目录删除。为了避免类似的灾难,Linux系统引入了sudo。如果普通用户有权执行sudo,那么他可以使用sudo来以root身份执行命令。由于sudo是临时性地扩张用户权限,误操作的概率会大为减小。我们以用户pi为例:

pi@raspberrypi:~ $ cat /etc/shadow
cat: /etc/shadow: 权限不够
pi@raspberrypi:~ $ sudo cat /etc/shadow
root:!$6$m/JIhD9Z4g7/gcVs$mDVMIoBLxOSPHKbq.9e2uiqO3hVzq6qbPtmFtLciSYgTSANFkfmb8TOW9BMAcuQ/fYPLnJlFfRR3fm/AqIGEA.:18377:0:99999:7:::
daemon:*:18165:0:99999:7:::
//此处省略回显

直接执行cat /etc/shadow命令,Shell会提示禁止查看,如果以sudo运行相同的命令,因为pi有权进行sudo,所以cat命令会以root的身份执行,上面的命令将打印 /etc/shadow 的内容。

现在,我们可以创建新用户:

pi@raspberrypi:~ $ sudo adduser tommy
正在添加用户"tommy"...
正在添加新组"tommy" (1002)...
正在添加新用户"tommy" (1002) 到组"tommy"...
创建主目录"/home/tommy"...
正在从"/etc/skel"复制文件...
新的 密码:
重新输入新的 密码:
passwd:已成功更新密码
正在改变 tommy 的用户信息
请输入新值,或直接敲回车键以使用默认值
    全名 []: 
    房间号码 []: 
    工作电话 []: 
    家庭电话 []: 
    其它 []: 
这些信息是否正确? [Y/n] y
pi@raspberrypi:~ $ 

删除用户时,可以使用:

pi@raspberrypi:~ $ sudo deluser --remove-home tommy
正在寻找要备份或删除的文件...
正在删除文件...
正在删除用户 'tommy'...
警告:组"tommy"没有其他成员了。
完成。
pi@raspberrypi:~ $ 

也可以用命令来创建用户组:

pi@raspberrypi:~ $ sudo groupadd genius

删除用户组:

pi@raspberrypi:~ $ sudo groupadd genius

3、用户信息文件

Linux的用户信息保存在文件 /etc/passwd 中。通过这个文件,你可以对操作系统中的用户和组进行总览。我们之前对用户的操作,本质上也是在修改 /etc/passwd 文件。

在文件 /etc/passwd 中,每一行代表一个用户。每一行用冒号分为7个部分:

用户名:密码:UID:GID:描述:用户目录:登录Shell

以用户pi的记录为例:

pi@raspberrypi:~ $ cat /etc/passwd
pi:x:1000:1000:,,,:/home/pi:/bin/bash
//此处省略其余用户信息

在这条记录中描述部分空缺,密码部分用“x”表示。这个符号的含义是,密码以密文的形式保存在文件 /etc/shadow 中。当然,密码也可以以明文的形式写在 /ect/passwd 的记录中,但这样系统的安全性会大打折扣。

大多数情况下,用户会有一个属于自己的用户目录,用于存放自己的文件。登录时,bash的当前工作目录,通常会设置成该用户目录。用户root的用户目录在 /root 下,而普通用户的目录都位于 /home 下,例如用户pi的用户目录在 /home/pi下。根据 /ect/passwd 的记录,用户pi的用户目录是 /home/pi

最后的 /bin/bash 说明了登录之后默认使用的Shell, /bin/bash 是bash的程序文件。我们看到有些行的记录使用的Shell是nologin或者false。命令nologin会拒绝登录,而命令false则什么都不做。因此,这些用户没法像普通用户一样,通过Shell来操纵操作系统,因此被称作伪用户。为了系统管理的方便,操作系统创建了这些用户。很多程序会以伪用户的身份运行,以便享有对应的权限。以用户mail为例:

mail:x:8:8:mail:/var/mail:/usr/sbin/nologin

当操作系统调用电子邮件相关程序时,就会用到该伪用户。

同样的,用户组的信息也都保存在 /etc/group 文件中。这个文件的每一行代表了一个组。每一行用冒号分割成了4段信息。

组名:组密码:GID:用户列表

以用户pi的记录为例:

pi@raspberrypi:~ $ cat /etc/group
pi:x:1000:
//此处省略其余用户信息

我们已经了解了组名和GID。组密码并不常用,通常设置成“x”。用户列表用逗号分开,包括了属于该组的全部用户。

4、文件权限

Linux系统中的数据保存为文件,因此文件的权限分配就显得异常重要。用户希望自己的某些数据内容能获得隐私保护,用户yutian当然不希望用户anna看到自己存在电脑上的情书。关系到操作系统运行的配置文件不能随意更改,如果每个人都可以写入 ect/passwd 这个文件,那么谁都可以随意地创建或删除用户,这将导致整个操作系统十分混乱。因此,操作系统有必要根据用户身份,控制其读、写、执行文件的权限。

在Linux系统中,文件的附加信息包含了权限信息。用ls命令查询文件详情:

pi@raspberrypi:~ $ ls -l file.txt 
-rw-r--r-- 1 pi pi 13 4月  25 17:27 file.txt

返回结果可以分为5个部分:

  • 第1部分:-rw-r--r--:文件的类型和权限。

  • 第2部分:1:文件的链接数。

  • 第3部分:pi:文件的拥有者和拥有组。

  • 第4部分:13:文件的大小,单位是字节。因此,该文件为13字节。

  • 第5部分:4月 25 17:27:上一次修改文件的时间。

文件的权限由第1部分和第3部分控制。第1部分包含了10个字符,第一个字符表示文件类型,“-”表示为文本文件,“d”表示为目录文件,和file命令查询结果一致。表示文件权限的是“rw-r–r–”。9个字符分为三组,“rw-”“r–”“r–”,分别对应拥有者 (Owner)、拥有组 (Owner Group)和其他人 (Other)。这是系统用户的3个分类。无论是哪一种分类,都规定了该类是否有读、写、执行的权限。

第一组表示,如果我是该文件的拥有者,那么我就可以对该文件有读取(r),写入(w)该文件的权限,但不拥有执行(-),如果拥有执行权限,则为(x)该文件的权限。第二组表示,如果我的名片上的组身份证明我所在的组是该文件的拥有组的一员,那么我有从该文件读入的权限。第三组表示,如果我的名片显示我既不是拥有者,也不是拥有组的一员,那么我只有读入的权限。当我想要进行一个读取操作时,Linux会先看我是否是拥有者下文会进一步解释拥有者和拥有组。

尽管9位的权限可以任意设置,但通常来说,拥有者享有最多权限,拥有组次之,其他用户的权限最少。如图下图所示,通过这样一个三级权限系统,每个文件可以有一个联系最密切的用户,即文件的“拥有者”,拥有者对文件享有最高权力。此外,还有一个组的用户区别于系统中的其他用户,对文件拥有特权。由于每个文件都可以把整个系统的用户分成三类,而每一类都可以有不同的权限,所以Linux系统可以非常灵活地设置文件的权限。

5、文件权限管理

了解了文件权限,我们就可以对文件权限进行设置。你可以从两个方面来控制用户操作文件的权利。一方面,你可以修改文件的拥有者或拥有组,从而重新给用户分类。另一方面,你也可以更改文件的权限标志,赋予每一类用户新的权限。

我们可以用chown命令来改变文件的拥有者和用户组:

pi@raspberrypi:~ $ sudo chown lvor:lvor file.txt 
pi@raspberrypi:~ $ ls -l file.txt 
-rw-r--r-- 1 lvor lvor 13 4月  25 17:27 file.txt

该命令把文件 file.txt 的拥有者改为用户lvor,把文件的拥有组改为lvor组。

chmod命令来改变文件的权限标志,你必须是文件 file.txt 的拥有者或者以root用户的身份才能运行该命令:

lvor@raspberrypi:/home/pi $ chmod 755 file.txt

pi@raspberrypi:~ $ sudo chmod 755 file.txt

更改之后,文件权限变为“-rwxr-xr-x”:

pi@raspberrypi:~ $ ls -l file.txt 
-rwxr-xr-x 1 lvor lvor 13 4月  25 17:27 file.txt

在命令chmod中,我们用3个数字,如444来对应三类用户的权限。第一个数字代表拥有者权限,第二个数字代表拥有组权限,第三个数字代表其他用户权限。Linux规定,4为读取权,2为写入权,1为执行权。由于第一位7是4、2、1的和,所以拥有者有读、写、执行三项权利。第二位和第三位的5是4、1的和,因此后面两类用户都有读和执行的权利。可以尝试一下用444、744和554,看看文件的权限有什么变化。

pi@raspberrypi:~ $ sudo chmod 444 file.txt 
pi@raspberrypi:~ $ ls -l file.txt 
-r--r--r-- 1 lvor lvor 13 4月  25 17:27 file.txt
pi@raspberrypi:~ $ sudo chmod 744 file.txt 
pi@raspberrypi:~ $ ls -l file.txt 
-rwxr--r-- 1 lvor lvor 13 4月  25 17:27 file.txt
pi@raspberrypi:~ $ sudo chmod 554 file.txt 
pi@raspberrypi:~ $ ls -l file.txt 
-r-xr-xr-- 1 lvor lvor 13 4月  25 17:27 file.txt
pi@raspberrypi:~ $ sudo chmod 744 file.txt 

我们之前提到过,目录也是一个文件,而删除文件这样的操作,实际上是通过写入上级目录文件来实现的。理论上说,控制目录的读写权,也可以控制用户在该目录中增加和删除文件的权利。需要注意是,由于路径的解析需要对沿途的目录有执行权限,因此一个用户只有对目录文件享有执行权,才能在该目录中增删文件。此外,用户想用cd命令切换工作目录,同样要对该目录有执行权。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 xumeng32@126.com

文章标题:树莓派与Linux——Linux用户

文章字数:4.1k

本文作者:F_numen

发布时间:2020-04-25, 16:22:00

最后更新:2020-04-25, 18:10:32

原始链接:https://netheroone.cn/archives/e3125945.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
/*baidu统计*/