第5章 Linux 的文件权限和目录配置
5.1 用户与用户组
- 文件拥有者
- 用户组概念
- 其他人的概念
Linux 用户身份与用户组记录的文件
默认情况下,所有的系统上的账号和一般身份用户,还有那个root的相关信息,都记录在 /etc/passwd 这个文件内;个人的密码记录在 /etc/shadow 这个文件内;Linux 所有的组名都记录在 /etc/gtoup中
5.2 Linux 文件权限概念
5.2.1 Linux 文件属性
- 第一栏代表文件的类型与权限
- 第一个字符代表这个文件是目录、文件或链接文件等:
- [d]:目录
- [-]:文件
- [l]:链接文件
- [b]:设备文件里面的可供存储的周边设备
- [c]:设备文件里面的串行端口设备
- 接下来的字符中,以三个为一组,且均为【rwx】的三个参数的组合
- [r]:可读
- [w]:可写
- [x]:可执行
- 这三个权限的位置不会改变,如果没有权限,就会出现减号[-]而已
- 第一组为文件拥有者可具备的权限
- 第二组为加入此用户组的账号的权限
- 第三组为非本人且没有加入本用户组账号的权限
- 第一个字符代表这个文件是目录、文件或链接文件等:
- 第二栏表示有多少文件名链接到此节点
- 第三栏表示这个文件或目录的拥有者账号
- 第四栏表示这个文件的所属用户组:在 Linux 系统下,你的账号可以加入一个或多个用户组中
- 第五栏为这个文件的容量大小,默认单位为 Bytes
- 第六栏为这个文件的创建日期或是最近修改的日期
- 第七栏为文件名:如果文件名之前多一个【.】,则代表这个文件为隐藏文件
例题一
假设 test1、test2、test3 均属于 testgroup 这个用户组,如果有下面两个文件,请说明两个文件的拥有者与其相关的权限是什么?
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
答:
- 第一个文件,文件拥有者是 root,具有读和写的权限,所属用户组是 root,故上述三个用户对于此文件属于其他人,权限为读
- 第二个文件,文件拥有者是 test1,所属用户组是 testgroup
- 因此 test1 用户的权限是读写和执行
- test2、test3 属于 testgroup 用户组,因此权限是读和执行
- 其他人的权限是读取
例题二
承接上一题,如果我的目录为下面的样式,请问 testgroup 这个用户组的成员与其他人是否可以进入本目录?
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups
答:
这个目录拥有者是 test1,所属用户组是 testgroup,故:
-
拥有者有读写执行的权限,可以在本目录进行任何操作
-
这个用户组的权限是读和执行,所属用户组的成员可以进入该目录,但不能对该目录进行写入操作
-
其他人仅有读取的权限,但没有执行的权限,因此不能进入该目录
Linux 文件权限的重要性
- 系统保护的功能
- 团队开发软件或数据共享的功能
- 未将权限设置妥当的危害:可能造成其他人都可以在你的系统上乱搞,导致系统挂掉等问题
5.2.2 如何修改文件属性与权限
- 修改所属用户组,chgrp
chgrp [-R] groupname dirname/filename
# -R 进行递归修改,即连同子目录下的所有文件、目录都更新成为这个用户组
eg:
前提:/etc/group 里存在users的用户组,testing 用户组不在其中
chgrp users initial-setup-ks.cfg
chgrp testing initial-setup-ks.cfg
- 修改文件拥有者,chown
chown [-R] 账号名称 文件/目录 # 仅修改文件拥有者
chown [-R] 账号名称:用户组名称 文件/目录 # 修改用户组和文件拥有者
eg:
chown xuan initial-setup-ks.cfg
chown root:root initial-setup-ks.cfg
什么时候需要修改文件的拥有者?
复制文件给你之外的其他人时
eg:
前提:家目录里有 .bashrc 的文件,将其复制成 .bashrc_test,并给 xuan 用户使用
cp .bashrc .bashrc_test
chown xuan:users .bashrc_test
-
修改文件权限,chmod
-
数字类型修改文件权限
- r:4
- w:2
- x:1
chmod [-R] xyz 文件或目录 # xyz : 每种身份各自权限相加 eg: 将 .bashrc 这个文件的权限全部启用 chmod 777 .bashrc 变更权限为【-rwxr-xr--】 chmod 754 .bashrc 修改回【-rw-r--r--】 chmod 644 .bashrc
-
符号类型修改文件权限
- user:u
- group:g
- others:o
- all:a,即所有身份
- +:加入权限
- -:移除权限
- =:设置权限
- r、w、x:读写执行的权限
eg: 设置一个文件的权限为【-rwxr-xr-x】 chmod u=rwx,go=rx .bashrc # u=rwx,go=rx 连在一起,没有空格;注意需要设置几个权限就写几个,不要写成 go=r-x 设置一个文件的权限为【-rwxr-xr--】 chmod u=rwx,g=rx,o=r .bashrc 如果不知道文件原来的权限,只想增加每个人均可写入的权限 chmod a+w .bashrc 如果要将权限去掉而不修改其他已存在的权限 chmod a-x .bashrc
-
+与-的状态下,只要是没有指定到的项目,则该权限不会被变动
5.2.3 目录与文件的权限意义
- 权限对文件的重要性
- r:可读取此文件的实际内容
- w:可以新增、编辑或修改该文件的内容(但不包含删除该文件)
- x:该文件具有可以被系统执行的权限(在windows下,可以借由扩展名来判断文件是否可以被执行,但在Linux系统里,则是借由是否具有【x】来判断)
- 权限对目录的重要性
- r:具有读取目录结构列表的权限
- w:具有改动该目录结构列表的权限
- 建立新的目录与文件
- 删除已经存在的目录与文件(不论该文件的权限是什么)
- 将已经存在的目录或文件进行更名
- 移动该目录内的文件、目录位置
- x:用户能否进入该目录成为工作目录的用途,所谓的工作目录就是你目前所在的目录
组件 | 内容 | 替代对象 | r | w | x |
---|---|---|---|---|---|
文件 | 详细数据 | 文件夹 | 读到文件内容 | 修改文件内容 | 执行文件内容 |
目录 | 文件名 | 可分类抽屉 | 读到文件名 | 修改文件名 | 进入该目录的权限 |
总结:对一般文件来说,rwx 主要是针对文件内容来设计权限的,对目录来说,rwx 则是针对目录内的文件名列表来设计权限
例题
有个目录权限如下所示:
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh
系统有个账号名为 vbird,这个账号并不支持 root 用户组,请问 vbird 对这个目录有何权限?是否可以切换到此目录中?
答:vbird 对这个目录属于其他人,仅有 r 的权限,可以查询此目录下的文件名列表,因为 vbird 不具备 x 的权限,因此无法进入到此目录中
此外,工作目录对于命令的执行是非常重要的,如果在某一目录下不具备 x 的权限,那么就无法切换到该目录下,也就无法执行该目录下的任何命令,即使你具有该目录的 r 或 w 权限。
需要注意:要开放命令给任何人浏览,应该至少给予 r 及 x 的权限,但 w 的权限不可随便给
例题
假设有个账号名称为 dmtsai,它的家目录 /home/dmtsai,dmtsai 对此目录具有 【rwx】的权限,若此目录下有个名为 the_root.data 的文件,文件权限如下:
-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data
请问 dmtsai 对此文件的权限是什么?是否可以删除此文件?
答:dmtsai 对于此文件属于其他人,没有任何权限;但此文件在 /home/dmtsai 该目录下,dmtsai 对此目录具有全部权限,因此可删除该文件
5.2.4 Linux 文件种类与扩展名
-
文件种类
- 常规文件 【-】
- 纯文本文件:人类可以直接读到的数据,例如数字、字母等,几乎只要可以用来做为设置的文件都属于这一种文件类型
- 二进制文件:可执行文件(scripts,脚本文件不算)就是这种格式
- 数据文件:有些程序在运行的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件
- 目录 【d】
- 链接文件 【l】
- 设备与设备文件
- 区块设备文件 【b】:一些存储数据,以提供系统随机存取的接口设备,例如硬盘、软盘等
- 字符设备文件 【c】:一些串行端口的接口设备,例如键盘、鼠标等
- 数据接口文件 【s】:通常被用在网络上的数据交换
- 数据传输文件 FIFO, pipe【p】
- 常规文件 【-】
-
Linux 文件扩展名
具有可执行的权限以及具有可执行的程序代码是两回事,例如之前写的 text.txt 具有可执行的权限,但这个文件无法被执行,因为它的内容不具备可执行的程序代码。所以说,这个x代表这个文件具有可执行的能力,但能不能执行成功,当然就得要看该文件的内容
- *.sh:脚本或批处理文件
- *Z *.tar *.tar.tz *.zip *.tgz:经过打包的压缩文件
- *.html *.php:网页相关文件
-
Linux 文件名长度限制
- 单一文件或目录的最大容许文件名为 255 字节
-
Linux 文件名的限制
- 避免使用一些特殊字符:* ? < > ; & ! [ ] | \ ’ ’ " " ` { }
- 文件名的开头为小数点【.】,代表隐藏文件,需要避免
- 避免以 - 或 + 来命名
5.3 Linux 目录配置
5.3.1 Linux 目录配置的依据——FHS
FHS的目的:让用户可以了解到已安装软件通常放置于哪个目录下
目录的四种类型:
- 可分享:可以分享给其它系统挂载使用的目录
- 不可分享:自己机器上面运行的设备文件或是与程序有关的 socket 文件等,不可分享给其它主机
- 不变:有些数据是不会经常变动的,跟随着发行版而不变动
- 可变动:经常修改的数据
FHS针对目录架构仅定义出三层目录下面应该放置什么数据而已
-
根目录(/)的意义与内容
根目录是整个系统最重要的一个目录,因为所有的目录都是根据根目录衍生出来的,同时根目录也与启动、还原、系统修复等操作有关
注:以账号的角度来看,root 指系统管理员的身份;以目录的角度来看,root 指根目录,即 /
FHS标准建议:根目录所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较佳,根目录所在的文件系统也较不容易发生问题
常用的目录:
- /etc/opt:放置第三方辅助软件 /opt 的相关配置
- /opt:第三方辅助软件放置的目录
-
/usr 的意义与内容
UNIX操作系统软件资源所放置的目录
FHS建议所有软件开发者,应该将他们的数据合理地分别放置在这个目录下的子目录,而不要自行建立该软件自己独立的目录
-
/var 的意义与内容
系统运行后才会渐渐占用硬盘容量的目录
/var/log:重要,日志文件放置的目录,比较重要的文件有/var/log/messages、/var/log/wtmp(记录登录信息)等
5.3.2 目录树(directory tree)
主要的特性有:
- 目录树的起始点为根目录(/,root)
- 每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统,举例来说,可以利用 NFS 服务器挂载某些特定的目录
- 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的
5.3.3 绝对路径与相对路径
根据文件名写法的不同,也可将路径定义为绝对路径和相对路径:
- 绝对路径:由根目录开始写起的文件名或目录名,如:/home/xuan/.bashrc
- 相对路径:相对于目前路径的文件名写法,如:./home/xuan
注意两个特殊的目录:
- .:代表当前的目录,也可使用 ./
- …:代表上一层目录,也可以 …/来表示