鸟哥的Linux私房菜读书笔记:文件权限与目录配置

Linux最优秀的地方之一就在于它的多用户多任务环境.

为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变得很重要了.

Linux一般将文件可存取的身份分为三个类别,分别是:owner/group/others.

且三种身份各有read/write/execute等权限.若管理不当,你的Linux会变得很别扭

另外,如果首次接触Linux的话,那么再Linux下面的这么多目录/文件,到底哪个目录/我呢见代表什么意义呢?

使用者与群组

每个文件都有属性个权限,其中最重要的可能就是文件的拥有者这个概念了.

所以,再开始文件相关信息的介绍前,先对 使用者 及 群组 与 非本群组外的其他人等概念作个说明

  1. 文件拥有者

初次接触Linux的朋友大概会觉得很怪异, 怎么“Linux有这么多使用者, 还分什么群组,有什么用? ”。 这个“使用者与群组”的功能可是相当健全而好用的一个安全防护呢! 怎么说呢? 由于Linux是个多用户多任务的系统, 因此可能常常会有多人同时使用这部主机来进行工作的情况发生, 为了考虑每个人的隐私权以及每个人喜好的工作环境, 因此, 这个“文件拥有者”的角色就显的相当的重要了!

例如当你将你的e-mail情书转存成文件之后, 放在你自己的主文件夹, 你总不希望被其他人看见自己的情书吧? 这个时候, 你就把该文件设置成“只有文件拥有者, 就是我, 才能看与修改这个文件的内容”, 那么即使其他人知道你有这个相当“有趣”的文件, 不过由于你有设置适当的权限, 所以其他人自然也就无法知道该文件的内容啰!

  1. 群组概念

那么群组是什么呢?为甚麽要设置文件以及所属的群组?

它最有用的功能之一,就是当你在团队开发资源的时候.

举例来说,加入有两组学生在我的主机里面,第一个专题组别为projectA,里面的成员有stu1,stu2,stu3三个;第二个专题组别为projectB,里面的成员有stu4,stu5,stu6.这两个专题之间是有竞争性质的,但是却要交同一份报告.魅族的组员之间必须能够互相修改对方的数据,但是其他组的组员则不能看到本组自己的文件内容,这个时候该怎么做呢?

在Linux下面这样的限制是很简单啦! 我可以经由简易的文件权限设置, 就能限制非自己团队( 亦即是群组啰) 的其他人不能够阅览内容啰! 而且亦可以让自己的团队成员可以修改我所创建的文件! 同时, 如果我自己还有私人隐密的文件, 仍然可以设置成让自己的团队成员也看不到我的文件数据。

另外, 如果teacher这个帐号是projecta与projectb这两个专题的老师, 他想要同时观察两者的进度, 因此需要能够进入这两个群组的权限时, 你可以设置teacher这个帐号, “同时支持projecta与projectb这两个群组! ”, 也就是说: 每个帐号都可以有多个群组的支持呢!

  1. 其他人的概念

假如这个时候来了一个插班生,他也需要进入我们班的专题组,但是他的信息还是在原本的班级,这个时候这个插班生就是Others

无论如何, “使用者身份”, 与该使用者所支持的“群组”概念, 在Linux的世界里面是相当的重要的, 他可以帮助你让你的多任务Linux环境变的更容易管理

Linux使用者身份与群组记录的文件

在我们Linux系统当中,默认的情况下,所有的系统上的账号与一般身份使用这者,还有root的相关信息,都是记录在/etc/passwd这个文件内的.至于个人的密码则是记录在etc/shadow这个文件下.此外Linux所有的群组名称都记录在/etc/group内.

这三个文件时Linux系统里面账号/密码/群组信息的集中地,不能随便就把他们删了

Linux文件权限

大致了解了Linux的使用者与群组之后,接着下来,我们要来谈一谈这个文件的权限要如何去针对这些所谓的使用者和群组来设置.

这个部分是相当重要的, 尤其对于初学者来说,

因为文件的权限与属性是学习Linux的一个相当重要的关卡, 如果没有这部份的概念, 那么你将老是听不懂别人在讲什么呢! 尤其是当你在你的屏幕前面出现了“Permission deny”的时候, 不要担心, “肯定是权限设置错误”啦! 呵呵! 好了, 闲话不多聊, 赶快来瞧一瞧先。

Linux文件属性

我们最常用的是ls 这个指令

首先我们切到root用户身份

su -

然后

ls -al

由于本章后续的chgrp, chown等指令可能都需要使用root的身份才能够处理, 所以这里建议您以root的身份来学习! 要注意的是, 我们还是不建议你直接使用 root 登陆系统, 建议使用 su - 这个指令来切换身份喔! 离开 su - 则使用 exit 回到 dmtsai 的身份即可!ls是“list”的意思, 重点在显示文件的文件名与相关属性。 而选项“-al”则表示列出所有的文件详细的权限与属性 ( 包含隐藏文件, 就是文件名第一个字符为“ . ”的文件) 。 如上所示, 在你第一次以root身份登陆Linux时, 如果你输入上述指令后, 应该有上列的几个东西, 先解释一下上面七个字段个别的意思:

第一栏代表这个文件的类型与权限( permission)

仔细看的话, 你应该可以发现这一栏其实共有十个字符

  • 第一个字符代表这个文件是“目录、 文件或链接文件等等”:

  • 当为[ d ]则是目录, 例如上表文件名为“.config”的那一行;

  • 当为[ - ]则是文件, 例如上表文件名为“initial-setup-ks.cfg”那一行;

  • 若是[ l ]则表示为链接文件( link file) ;

  • 若是[ b ]则表示为设备文件里面的可供储存的周边设备( 可随机存取设备) ;

  • 若是[ c ]则表示为设备文件里面的序列埠设备, 例如键盘、 鼠标( 一次性读取设备) 。

  • 接下来的字符中, 以三个为一组, 且均为“rwx” 的三个参数的组合。 其中, [r]代表可读( read) 、 [ w ]代表可写( write) 、 [ x ]代表可执行( execute) 。 要注意的是, 这三个权限的位置不会改变, 如果没有权限, 就会出现减号[ - ]而已。

  • 第一组为“文件拥有者可具备的权限”, 以“initial-setup-ks.cfg”那个文件为例, 该文件的拥有者可以读写, 但不可执行;

  • 第二组为“加入此群组之帐号的权限”;

  • 第三组为“非本人且没有加入本群组之其他帐号的权限”。

不论是那一组权限, 基本上, 都是“针对某些帐号来设计的权限”喔!

以群组来说, 他规范的是“加入这个群组的帐号具有什么样的权限”之意, 以学校社团为例,假设学校有个童军社的社团办公室, “加入童军社的同学就可以进出社办”, 主角是“学生( 帐号) ”而不是童军社本身喔! 这样可以理解吗?

例题: 若有一个文件的类型与权限数据为“-rwxr-xr--”, 请说明其意义为何? 答: 先将整个类型与权限数据分开查阅, 并将十个字符整理成为如下所示:

[-][rwx][r-x][r--] > 1 234 567 890

1 为: 代表这个文件名为目录或文件, 本例中为文件( -) ; 234为: 拥有者的权限, 本例中为可读、 可写、 可执行( rwx) ; 567为: 同群组使用者权限, 本例中为可读可执行( rx) ;890为: 其他使用者权限, 本例中为可读( r) , 就是只读之意

同时注意到, rwx所在的位置是不会改变的, 有该权限就会显示字符, 没有该权限就变成减号( -) 就是了。

另外, 目录与文件的权限意义并不相同, 这是因为目录与文件所记录的数据内容不相同所致。

与Windows系统不一样的是, 在Linux系统当中, 每一个文件都多加了很多的属性进来, 尤其

是群组的概念, 这样有什么用途呢? 其实, 最大的用途是在“数据安全性”上面的。

  • 系统保护的功能: 举个简单的例子, 在你的系统中, 关于系统服务的文件通常只有root才能读写或者是执行, 例如/etc/shadow这一个帐号管理的文件, 由于该文件记录了你系统中所有帐号的数据, 因此是很重要的一个配置文件, 当然不能让任何人读取( 否则密码会被窃取啊) , 只有root才能够来读取啰! 所以该文件的权限就会成为[ ----------] 所有人都不能使用? 没关系, root基本上是不受系统的权限所限制的, 所以无论文件权限为何, 默认root都可以存取喔!

  • 团队开发软件或数据共享的功能: 此外, 如果你有一个软件开发团队, 在你的团队中,你希望每个人都可以使用某一些目录下的文件, 而非你的团队的其他人则不予以开放呢? 以上面的例子来说, testgroup的团队共有三个人, 分别是test1, test2, test3, 那么我就可以将团队所需的文件权限订为[ -rwxrws--- ]来提供给testgroup的工作团队使用啰!( 怎么会有 s 呢? 没关系, 这个我们在后续章节再讲给你听! )

  • 未将权限设置妥当的危害: 再举个例子来说, 如果你的目录权限没有作好的话, 可能造成其他人都可以在你的系统上面乱搞啰! 例如本来只有root才能做的开关机、 ADSL的拨接程序、 新增或删除使用者等等的指令, 若被你改成任何人都可以执行的话, 那么如果使用者不小心给你重新开机啦! 重新拨接啦! 等等的! 那么你的系统不就会常常莫名其妙的挂掉啰! 而且万一你的使用者的密码被其他不明人士取得的话, 只要他登陆你的系统就可以轻而易举的执行一些root的工作!

可怕吧! 因此, 在你修改你的linux文件与目录的属性之前, 一定要先搞清楚, 什么数据是可变的, 什么是不可变的

如何改变文件属性与权限

我们现在知道文件权限对于一个系统的安全重要性了,也知道文件的权限对于使用者与群组的相关性.

chgrp : 改变文件所属群组

chown : 改变文件拥有者

chmod : 改变文件的权限, SUID, SGID, SBIT等等的特性

改变所属群组, chgrp

权限对文件的重要性

文件是实际含有数据的地方, 包括一般文本文件、 数据库内容档、 二进制可可执行文件( binary program) 等等。 因此, 权限对于文件来说, 他的意义是这样的:

r ( read) : 可读取此一文件的实际内容, 如读取文本文件的文字内容等;

w ( write) : 可以编辑、 新增或者是修改该文件的内容( 但不含删除该文件) ;

x ( eXecute) : 该文件具有可以被系统执行的权限。

那个可读( r) 代表读取文件内容是还好了解, 那么可执行( x) 呢? 这里你就必须要小心啦!

因为在Windows下面一个文件是否具有执行的能力是借由“ 扩展名 ”来判断的, 例如: .exe,.bat, .com 等等, 但是在Linux下面, 我们的文件是否能被执行, 则是借由是否具有“x”这个权限来决定的! 跟文件名是没有绝对的关系的!

至于最后一个w这个权限呢? 当你对一个文件具有w权限时, 你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限! 对于文件的rwx来说, 主要都是针对“文件的内容”而言, 与文件文件名的存在与否没有关系喔! 因为文件记录的是实际的数据嘛!

权限对目录的重要性

文件是存放实际数据的所在, 那么目录主要是储存啥玩意啊? 目录主要的内容在记录文件名清单, 文件名与目录有强烈的关连啦! 所以如果是针对目录时, 那个 r, w, x 对目录是什么意义呢?

  • r ( read contents in directory) :
    表示具有读取目录结构清单的权限, 所以当你具有读取( r) 一个目录的权限时, 表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!

  • w ( modify contents of directory) :
    这个可写入的权限对目录来说, 是很了不起的! 因为他表示你具有异动该目录结构清单的权限, 也就是下面这些权限:
    创建新的文件与目录;删除已经存在的文件与目录( 不论该文件的权限为何! )
    将已存在的文件或目录进行更名;搬移该目录内的文件、 目录位置。 总之, 目录的w权限就与该目录下面的文件名异动有关就对了啦!

  • x ( access directory) :
    咦! 目录的执行权限有啥用途啊? 目录只是记录文件名而已, 总不能拿来执行吧? 没错! 目录不可以被执行, 目录的x代表的是使用者能否进入该目录成为工作目录的用途!所谓的工作目录( work directory) 就是你目前所在的目录啦! 举例来说, 当你登陆Linux 时, 你所在的主文件夹就是你当下的工作目录。 而变换目录的指令是“cd”( changedirectory)

元件

内容

叠代物件

r

w

x

文件

详细数据

data

文件数据

读到文件内

修改文件内

执行文件内容

目录

文件名

可分类抽

读到文件名

修改文件名

进 ( 入 ke该y)目录的权限

根据上述的分析, 你可以看到, 对一般文件来说, rwx 主要是针对“文件的内容”来设计权限,对目录来说, rwx则是针对“目录内的文件名列表”来设计权限。 其中最有趣的大概就属目录的x 权限了! “文件名怎么执行”? 没道理嘛! 其实, 这个 x 权限设计, 就相当于“该目录, 也就是该抽屉的 "钥匙" ”啦! 没有钥匙你怎么能够打开抽屉呢? 对吧!大致的目录权限概念是这样, 下面我们来看几个范例, 让你了解一下啥是目录的权限

例题: 有个目录的权限如下所示:

drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh

系统有个帐号名称为vbird, 这个帐号并没有支持root群组, 请问vbird对这个目录有何权限?是否可切换到此目录中? 答: vbird对此目录仅具有r的权限, 因此vbird可以查询此目录下的文件名列表。 因为vbird不具有x的权限, 亦即 vbird 没有这个抽屉的钥匙啦! 因此vbird并不能切换到此目录内! ( 相当重要的概念! ) |

上面这个例题中因为vbird具有r的权限, 因为是r乍看之下好像就具有可以进入此目录的权限,其实那是错的。 能不能进入某一个目录, 只与该目录的x权限有关啦! 此外, 工作目录对于指令的执行是非常重要的, 如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下, 也就无法执行该目录下的任何指令, 即使你具有该目录的r或w的权限。

很多朋友在架设网站的时候都会卡在一些权限的设置上, 他们开放目录数据给网际网络的任何人来浏览, 却只开放r的权限, 如上面的范例所示那样, 那样的结果就是导致网站服务器软件无法到该目录下读取文件( 最多只能看到文件名) , 最终用户总是无法正确的查阅到文件的内容( 显示权限不足啊! ) 。 要注意: 要开放目录给任何人浏览时, 应该至少也要给予r及x的权限, 但w权限不可随便给!

目录

应放置文件内容

第一部份:

FHS 要求必须

要存在的目录

/usr/bin/

所有一般用户能够使用的指令都放在这里! 目前新的 CentOS 7 已经将

全部的使用者指令放置于此, 而使用链接文件的方式将 /bin 链接至此!

也就是说, /usr/bin 与 /bin 是一模一样了! 另外, FHS 要求在此目录

下不应该有子目录!

/usr/lib/

基本上, 与 /lib 功能相同, 所以 /lib 就是链接到此目录中的!

/usr/local/

系统管理员在本机自行安装自己下载的软件( 非distribution默认提供

者) , 建议安装到此目录, 这样会比较便于管理。 举例来说, 你的

distribution提供的软件较旧, 你想安装较新的软件但又不想移除旧版,

此时你可以将新版软件安装于/usr/local/目录下, 可与原先的旧版软件

有分别啦! 你可以自行到/usr/local去看看, 该目录下也是具有bin, etc,

include, lib...的次目录喔!

/usr/sbin/

非系统正常运行所需要的系统指令。 最常见的就是某些网络服务器软件

的服务指令( daemon) 啰! 不过基本功能与 /sbin 也差不多, 因此目

前 /sbin 就是链接到此目录中的。

/usr/share/

主要放置只读架构的数据文件, 当然也包括共享文件。 在这个目录下放

置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文字文

件嘛! 在此目录下常见的还有这些次目录: /usr/share/man: 线上说明

文档 /usr/share/doc: 软件杂项的文件说明 /usr/share/zoneinfo: 与时

区有关的时区文件

第二部份:

FHS 建议可以

存在的目录

/usr/games/

与游戏比较相关的数据放置处

/usr/include/

c/c++等程序语言的文件开始( header) 与包含档( include) 放置处,

当我们以tarball方式 ( *.tar.gz 的方式安装软件) 安装某些数据时, 会

使用到里头的许多包含档喔!

/usr/libexec/

某些不被一般使用者惯用的可执行文件或脚本( script) 等等, 都会放

置在此目录中。 例如大部分的 X 窗口下面的操作指令, 很多都是放在

此目录下的。

/usr/lib<qual>/

与 /lib<qual>/功能相同, 因此目前 /lib<qual> 就是链接到此目录中

/usr/src/

一般源代码建议放置到这里, src有source的意思。 至于核心源代码则

建议放置到/usr/src/linux/目录

如果/usr是安装时会占用较大硬盘容量的目录, 那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的文件, 包括高速缓存( cache) 、 登录文件( log file) 以及某些软件运行所产生的文件, 包括程序文件( lock file, run file) , 或者例如MySQL数据库的文件等等。 常见的次目录有

目录

应放置文件内容

第一部

份: FHS

要求必须

要存在的

目录

/var/cache/

应用程序本身运行过程中会产生的一些暂存盘;

/var/lib/

程序本身执行的过程中, 需要使用到的数据文件放置的目录。 在此目录下

各自的软件应该要有各自的目录。 举例来说, MySQL的数据库放置

到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去!

/var/lock/

某些设备或者是文件资源一次只能被一个应用程序所使用, 如果同时有两

个程序使用该设备时, 就可能产生一些错误的状况, 因此就得要将该设备

上锁( lock) , 以确保该设备只会给单一软件所使用。 举例来说, 烧录机

正在烧录一块光盘, 你想一下, 会不会有两个人同时在使用一个烧录机烧

片? 如果两个人同时烧录, 那片子写入的是谁的数据? 所以当第一个人在

烧录时该烧录机就会被上锁, 第二个人就得要该设备被解除锁定( 就是前

一个人用完了) 才能够继续使用啰。 目前此目录也已经挪到 /run/lock 中!

/var/log/

重要到不行! 这是登录文件放置的目录! 里面比较重要的文件

如/var/log/messages, /var/log/wtmp( 记录登陆者的信息) 等。

/var/mail/

放置个人电子邮件信箱的目录, 不过这个目录也被放置到/var/spool/mail/

目录中! 通常这两个目录是互为链接文件啦!

/var/run/

某些程序或者是服务启动后, 会将他们的PID放置在这个目录下喔! 至于

PID的意义我们会在后续章节提到的。 与 /run 相同, 这个目录链接到 /run

去了!

/var/spool/

这个目录通常放置一些伫列数据, 所谓的“伫列”就是排队等待其他程序使

用的数据啦! 这些数据被使用后通常都会被删除。 举例来说, 系统收到新

信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会

被删除。 信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被

送出后就被删除。 如果是工作调度数据( crontab) , 就会被放置

到/var/spool/cron/目录中!

重点回顾

  • Linux的每个文件中, 可分别给予使用者、 群组与其他人三种身份个别的 rwx 权限;

  • 群组最有用的功能之一, 就是当你在团队开发资源的时候, 且每个帐号都可以有多个群组的支持;

  • 利用ls -l显示的文件属性中, 第一个字段是文件的权限, 共有十个位, 第一个位是文件类型, 接下来三个为一组共三组, 为使用者、 群组、 其他人的权限, 权限有r,w,x三种;

  • 如果文件名之前多一个“ . ”, 则代表这个文件为“隐藏文件”;

  • 若需要root的权限时, 可以使用 su - 这个指令来切换身份。 处理完毕则使用 exit 离开 su的指令环境。

  • 更改文件的群组支持可用chgrp, 修改文件的拥有者可用chown, 修改文件的权限可用chmod

  • chmod修改权限的方法有两种, 分别是符号法与数字法, 数字法中r,w,x分数为4,2,1;

  • 对文件来讲, 权限的性能为:

  • r: 可读取此一文件的实际内容, 如读取文本文件的文字内容等;

  • w: 可以编辑、 新增或者是修改该文件的内容( 但不含删除该文件) ;

  • x: 该文件具有可以被系统执行的权限。

  • 对目录来说, 权限的性能为:

  • r ( read contents in directory)

  • w ( modify contents of directory)

  • x ( access directory)

  • 要开放目录给任何人浏览时, 应该至少也要给予r及x的权限, 但w权限不可随便给;

  • 能否读取到某个文件内容, 跟该文件所在的目录权限也有关系 ( 目录至少需要有 x 的权限) 。

  • Linux文件名的限制为: 单一文件或目录的最大容许文件名为 255 个英文字符或 128 个中文字符;

  • 根据FHS的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下

  • FHS订定出来的四种目录特色为: shareable, unshareable, static, variable等四类;

  • FHS所定义的三层主目录为: /, /var, /usr三层而已;

  • 绝对路径文件名为从根目录 / 开始写起, 否则都是相对路径的文件名

猜你喜欢

转载自blog.csdn.net/qq_63511424/article/details/128928707
今日推荐