首页 > > > Linux 权限管理
计算机出现之初,它的作用就是帮助我们完成重复而枯燥的任务,因为它太擅长干这样的事情了,而且看起来似乎是任劳任怨的。真的是这样的吗?在早期,计算机罢工大多数时候是因为硬件或者软件出问题了,是真的没办法继续工作了。而现在,计算机罢工又多了一个很重要的因素,那就是由于计算机安全上的因素造成的,如果你的系统权限不严谨,系统或者软件有漏洞就可能会被黑客利用,然后你的计算机就可能人为的罢工了。
今天我们就一起来系统的学学 Linux 系统上一些和权限相关的知识,通过这些知识的学习,我们平时在使用 Linux 系统的时候就可以规范我们的操作,尽量避免系统处在危险之中。今天主要学习的内容如下:
我们在使用一些命令的时候,shell 可能会提示我们没有权限访问。从使用 Linux 系统到现在,你一定遇到过下图中类似的提示。

其实这些提示的意思就是作为一个普通用户,没有权限来读取这些文件。那权限到底是个什么东西呢?先别急,听我慢慢道来。
一个用户可以拥有文件和目录。当一个用户拥有一个文件或目录时, 用户对这个文件或目录就有访问权限和控制权限。用户又会属于一个由一个或多个用户组成的用户组,用户组成员对这些文件和目录的权限由文件和目录的所有者授予。除了对一个用户组授予权限之外,文件所有者可能会给其他用户或者用户组成员一些权限。

上图展示了 id 命令的使用和输出结果,从输出结果中,我们能获取到一些重要的信息。
chaojun (当然,也是可以在系统安装好后另外新建的其他用户,这里我登录的用户是 chaojun,所以我输入 id 命令后得到的结果中 uid 这个字段的名字就是 chaojun),这里的 uid 就像身份证号码和身份证号码对应人一样,它代表着一种对应关系,其中,身份证号码是:1000,名字是 chaojun在这里用户是 chaojun,用户数组是 chaojun,其他就很多了,有 adm、cdrom、sudo 等等。
对于文件和目录的访问权力是根据读访问、写访问和执行访问来定义的。我们来看看 ls -l test.txt 这个命令的执行结果(注意:test.txt 是我自己创建的一个文件,你可以把它换成你自己的文件)。
-rwx------ 1 chaojun chaojun 6375 11月 27 10:57 test.txt
这行内容的前十个字符是文件的属性。这十个字符的第一个字符表明文件类型。下表是经常看到的文件类型(还有其它的,不常见类型):
-:普通文件d:目录l:符号链接。注意对于符号链接文件,剩余的文件属性总是 "rwxrwxrwx",而且都是虚拟值。真正的文件属性是指符号链接所指向的文件的属性c:字符设备文件。这种文件类型是指按照字节流来处理数据的设备。 比如说终端机或者调制解调器b:块设备文件。这种文件类型是指按照数据块来处理数据的设备,例如一个硬盘或者 CD-ROM 盘剩下的九个字符叫做文件模式,代表着文件所有者、文件组所有者和其他人的读、写和执行权限。
当设置文件模式后,r、w和x 模式属性对文件和目录会产生以下影响:
cd directory 下面是权限属性的一些例子:
-rwx------:一个普通文件,对文件所有者来说可读、可写、可执行。其他人无法访问-rw-------:一个普通文件,对文件所有者来说可读可写。其他人无法访问-rw-r--r--:一个普通文件,对文件所有者来说可读可写,文件所有者的组成员可以读该文件,其他所有人都可以读该文件-rwxr-xr-x:一个普通文件,对文件所有者来说可读、可写、可执行。也可以被其他的所有人读取和执行-rw-rw----:一个普通文件,对文件所有者以及文件所有者的组成员来说可读可写lrwxrwxrwx:一个符号链接,符号链接的权限都是虚拟的,真实的权限应该以符号链接指向的文件为准drwxrwx---:一个目录,文件所有者以及文件所有者的组成员可以访问该目录,并且可以在该目录下新建、重命名、删除文件drwxr-x---:一个目录,文件所有者可以访问该目录,并且可以在该目录下新建、重命名、删除文件,文件所有者的组成员可以访问该目录,但是不能新建、重命名、删除文件更改文件的权限有两种表示方法,一种是用数字表示权限,另一种是用 rwx 表示权限。为了说明怎么用数字表示权限,我们得先来了解一下八进制。
八进制(以 8 为基数)及其亲戚十六进制(以 16 为基数)都是数字系统,通常被用来表示计算机中的数字。我们人类,因为(或者至少大多数人)天生有 十个手指的事实,利用以 10 为基数的数字系统来计数。计算机,从另一方面讲,生来只有一个 手指,因此它以二进制(以 2 为基数)来计数。它们的数字系统只有两个数值,0 和 1。 因此在二进制中,计数看起来像这样:
0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011…
在八进制中,逢八进一,用数字 0 到 7 来计数,像这样:
0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21…
十六进制中,使用数字 0 到 9,加上大写字母”A”到”F”来计数,逢 16 进一:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13…
虽然我们能知道二进制的意义(因为计算机只有一个手指),但是八进制和十六进制对什么好处呢? 答案是为了人类的便利。许多时候,在计算机中,一小部分数据以二进制的形式表示。 以 RGB 颜色为例来说明。大多数的计算机显示器,每个像素由三种颜色组成:8 位红色,8 位绿色, 8 位蓝色。这样,一种可爱的中蓝色就由 24 位数字来表示:
010000110110111111001101
我不认为你每天都喜欢读写这类数字。另一种数字系统对我们更有帮助。每个十六进制 数字代表四个二进制。在八进制中,每个数字代表三个二进制数字。那么代表中蓝色的 24 位二进制能够压缩成 6 位十六进制数:
436FCD
因为十六进制中的两个数字对应二进制的 8 位数字,我们可以看到 "43" 代表红色,"6F" 代表绿色,"CD" 代表蓝色。
现在,十六进制表示法(经常叫做“hex”)比八进制更普遍,但是我们很快会看到,用八进制 来表示 3 个二进制数非常有用处…
通过八进制表示法,我们使用八进制数字来设置所期望的权限模式。因为每个八进制数字代表了 3 个二进制数字,这种对应关系,正好映射到用来存储文件模式所使用的方案上。下图展示我们所要表达的意思:

现在我们要改变某个文件或者目录的权限,只需要输入:chmod + 三位二进制 + 文件或者目录名 即可。
chmod 命令支持一种符号表示法,来指定文件模式。符号表示法分为三部分:更改会影响谁, 要执行哪个操作,要设置哪种权限。通过字符 “u”、“g”、“o”和 “a” 的组合来指定 要影响的对象,如下所示:
如果没有指定字符,则假定使用 "all"。执行的操作可能是一个“+”字符,表示加上一个权限, 一个“-”,表示删掉一个权限,或者是一个“=”,表示只有指定的权限可用,其它所有的权限被删除。
权限由 “r”、“w”和 “x” 来指定的实例:
u+x:为文件所有者添加可执行权限u-x:删除文件所有者的可执行权限+x:为文件所有者,用户组,和其他所有人添加可执行权限。 等价于 a+xo-rw:删除其他人的读权限和写权限go=rw:给文件所属的组和文件所属者/组以外的人读写权限。如果文件所属组或其他人已经拥有执行的权限,执行权限将被移除u+x,go=rw:给文件拥有者执行权限并给组和其他人读和写的权限。多种设定可以用逗号分开当创建一个文件时,umask 命令控制着文件的默认权限。umask 命令使用八进制表示法来表达从文件模式属性中删除一个位掩码。我们可以在终端输入 umask 命令来查看默认值:
chaojun@ubuntu:~$ umask
0022
chaojun@ubuntu:~$
可以看到,Ubuntu 18.04 默认的 umask 是 0022,这个值代表的意思就是我们在创建文件和目录的时候,默认的权限要去掉掩码为 1 的位,0022 表示成二进制是:000 000 010 010,去掉为 1 的位上的权限,这里先忽略前面的三个 0,这涉及到特殊的权限,我下篇文章介绍。当我们创建文件或者目录的时候,如果没有掩码,也就是 umask = 0000 的时候,文件或者目录的权限是:-rw-rw-rw-,这个可以通过先执行 umask 0000 命令,然后再新建一个文件来验证。
-rw-rw-rw- 这个权限被称为原始权限,现在我们执行:umask 0022 将掩码恢复默认,然后在新建一个文件,这时在原始权限的基础上去掉掩码为 1 的位上的权限,也就是 -rw-rw-rw- 所对用的二进制数:110 110 110,去掉后就变成了:110 100 100。所以 Ubuntu 18.04 上,默认我们创建的文件或者目录的权限就是:-rw-r--r--。
你可能会在表示权限的字符中除了 r、w、x,还会看到一些特殊的字符:s、t。这个我下篇文章再介绍了,不然篇幅太长了,大家看着也累。
有的时候,我们需要具有另一个用户的身份。比如我们想要得到超级用户特权,来执行一些管理任务,有时也需要变成另一个普通用户,比如说测试一个帐号。 有三种方式,可以拥有多重身份:
su + 用户名 这个命令,需要输入要切换成为的那个用户的用户密码,切换过去完成了相应的任务想要退出那个用户重新回到之前的用户可以使用 exit 命令退出sudo + 命令,比如:sudo apt update 就是使用 root 用户的权限来更新软件索引,这里值得注意的是,使用 sudo 的时候需要输入的密码不是 root 用户的密码,而是当前用户的密码。这两个命令参考前面的文章:
Eglinux:Linux 文件权限介绍
我们可以使用 passwd 命令,来设置或更改用户密码。命令语法:passwd [user]。只要输入 passwd 命令,就能更改当前用户的密码。shell 会提示你输入你的旧密码和你的新密码。大家可以试试,按照提示修改自己的用户密码。
以上这两个个命令的使用可以阅读:Linux 用户管理
欢迎关注知乎专栏:Linux 漫游之旅,欢迎关注微信公众号:Linux 漫游之旅,免费提供 CSDN 下载服务。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/758/viewspace-3148329/ ,如需转载,请注明出处,否则将追究法律责任。