快一周没有写博客了。今天终于有时间再翻出鸟哥的书看,接着上次的来看,我们这一次学习一下linux的权限管理。
1.几个概念
文件所有者(owner):linux是多用户系统,不同的用户对同一文件具有不同的读写权限。这里的文件所有者并不一定是指文件的创建者(PS:因为文件创建者可能修改文件的权限,使文件实际上归属其他用户。这里说起来比较抽象,一会我们用实际例子来看。)
用户组(group):这个概念就像不同的家庭都有一定的家庭成员,文件就相当于家中的公用物品,这个家中的家庭成员对这些文件具有一定的读写权限。而其他家庭的成员(其他用户组)可能对这些文件没有读写权限。在同一用户组中,假如A用户有一个文件,B用户可能只具有读权限,或者不具有访问权限。(PS:这就好像在你的房间里有一本情书,你肯定不会让你的爸妈进你的房间去看这本情书)。
**同一用户可以属于多个用户组。**(PS:这就很像你很好的朋友经常回去你家里玩,对你家里的有些东西能看到。同样,你也能进入他的家里看到他家里很多东西。从linux的角度来看,你们俩就同时属于两个用户组。)
其他(other):其他人不具有本组文件的访问权限。这就像你不会让一个对于你家里人来说都是陌生人的人进入家中查看一样,除了警察意外。(这里的警察就是linux中的root用户,具有系统的一切权限。后面我们会经常使用)
2.用户身份及组的记录文件
默认情况下,linux所有账号和一般用户以及root用户的相关信息都记录在/etc/password这个文件内。个人密码信息都记录在/etc/shadow(影子文件)中。所有组名信息都放在/etc/group这个文件中。
以上三个文件十分重要,删除或缺失都会造成无法登陆系统等问题。写入以上文件需要root权限。
3.文件权限
在linux中你读写文件时是否会遇到Permission deny的情况。例如上面的/etc/shadow文件,我用普通用户读取时会出现如下结果:
这在linux中是司空见惯的事。下面我们随意用ls命令来看一下home目录下的文件:
注意上图的第一列,看起来好头大,什么drwx-,这些符号代表什么含义?之后的第二列第三列第四列又是什么意思?
首先看后几列吧。从第五列开始,从字面上来猜测,是文件大小(单位默认为B)、日期(鸟哥书上写的是修改日期)、和文件名,这些比较容易理解。
再看第一列。第一列代表了文件的类型与权限。仔细看第一列的内容,包含了10个字符,下面一一解释这是个字符的取值与含义。
第一个字符表示文件或目录或链接文件:
如果为d则是目录文件,如果是 - 则为普通文件,如果为 l 则为连接文件,如果为 b 则为设备里文件里可供存储的接口设备,如果为 c 则为设备文件里的串口端口设备,如键盘、鼠标等。
接下来的九个字符分为三组,第一组代表文件所有者的权限,第二组代表同用户组权限,第三组代表其他非本组用户的权限。在每一组中,第一个字符如果为r,代表有读权限,为 - 则无读权限;第二个字符如果为 w,代表有写权限,为 - 则无写权限;第三个字符如果为 x,代表有执行权限,为 - 则无执行权限。
第二列表示有多少文件名连接到此节点(i-node)。每个文件都会把它的权限与属性记录到文件系统的i-node中,目录树是使用文件名来记录的,每个文件名都会连接到一个i-node。关于i-node可以参考这篇博客:点击打开链接
第三列表示这个文件的所属用户。
第四列表示这个文件的所属用户组。
说了这么多,linux把文件权限搞得这么复杂,到底有什么含义呢?
先说一个简单的例子。做程序员的人都知道,一个项目一般情况下需要多个人参加,有时一个文件可能需要能被多个人方访问或修改。如果在linux下,A、B、C同时参加一个项目,现在文件d由A创建,而B需要访问这个文件,C不需要访问这个文件。那么要如何实现这样的需求呢?这时文件权限的作用就表现出来了。当然,文件权限的作用远不止是这些。鸟哥书上归结为两点:
- 系统保护功能。比如重要的系统文件(/etc/shadow等)一般用户不具有读写权限,只有root用户才有读写权限。
- 团队开发软件或数据共享功能,以上的例子就很好的说明了这个功能。
4.文件权限的修改
权限设置不当可能会造成系统运行异常等问题,在软件开发过程中也可能会造成不必要的麻烦。
文件权限的修改主要有以下三个命令:
- chgrp:改变文件所属用户组
- chown:改变文件所有者
- chmod:改变文件的权限