Linux最优秀的地方之一就在于他的多人多任务环境。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了。 Linux一般将文件可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限。
1. Linux的文件权限与目录配置
1.1. 文件的3个身份(owner/group/others)
在我们Linux系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。 此外,Linux所有的组名都纪录在/etc/group内!这三个文件可以说是Linux系统里面账号、密码、群组信息的集中地,所以不要随便删除这三个文件。
1.2. Linux文件权限概念
1.2.1. 文件属性
1.2.2. 修改文件属性
- chgrp:修改文件所属用户组;
- chown: 修改文件拥有者;
- chmod:修改文件的权限,SUID、SGID、SBIT等的特性。
1.2.3 目录与文件权限
首先强调一个概念,那就是:任何设备在Linux底下都是文件, 不仅如此,连数据沟通的接口也有专属的文件在负责。
与Windows系统不一样的是,在Linux系统当中,每一个文件都多加了很多的属性进来,尤其是群组的概念,其最大的用途是在为了保证数据安全性。
在Windows底下一个文件是否具有执行的能力是藉由"扩展名 "来判断的, 例如:.exe, .bat, .com 等等,但是在Linux上,一个文件能不能被执行,与他的第一栏的十个属性有关, 与文件名根本一点关系也没有。我们的文件是否能被执行,则是藉由是否具有x这个权限来决定。
默认权限
若使用者建立为『 文件 』则预设『没有可执行 ( x )权限』,亦即只有 rw 这两个项目,也就是最大为 666 分,预设权限如下: -rw-rw-rw-
若用户建立为『目录』,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即777 分,预设权限如下: drwxrwxrwx
隐藏权限
隐藏权限的设置主要是为了增强系统安全 (Security) 性,Linux底下的chattr指令只能在Ext2/Ext3/Ext4的 Linux 传统文件系统上面完整生效, 其他的文件系统可能就无法完整的支持这个指令,例如 xfs 仅支持部份参数而已。
特殊权限
- SUID(Set UID)仅可用在二进制程序上,不能用在shell脚本上面
当 s 这个标志出现在文件拥有者的 x 权限上时,
例如 /usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,
此时就被称为 Set UID,简称为 SUID 的特殊权限。
- SUID权限仅对二进制程序需有效;
- 执行者对于该程序需要具有x的可执行权限;
- 本权限尽在执行该程序的过程中有效(run-time);
- 执行者将具有该程序拥有者(owner)的权限。
- SGID(Set GID)可用在文件或目录上面 (多用于项目开发)
当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID
对文件
- SGID对二进制程序有用;
- 程序执行者对于该程序来说,需具备x的权限;
- 执行者在执行的过程中将会获得该程序用户组的支持。
对目录
- 用户若对于此目录具有r和x的权限时,该用户能够进入此目录;
- 用户在此目录下的有效用户组将会变成该目录的用户组;
- 用途:若用户在此目录下具有w的权限,则用户所建立的新文件的用户组与此目录的用户组相同。
- SBIT(Sticky Bit)只针对目录有效
当t标志在其他人(others)的x项为Sticky Bit(SBIT)
- 当用户对于此目录具有w、x权限,即具有写入的权限;
- 当用户对于在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件。
- SUID/SGID/SBIT权限设定
数字型态更改权限的方式为『三个数字』的组合, 如果在这三个数字之前再加上一个数字,最前面的那个数字就代表这几个权限
- 4 为 SUID;
- 2 为 SGID;
- 1 为 SBIT。
1.3. Linux目录配置
1.3.1. Linux目录配置依据——FHS
FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 将目录定义成为4种交互作用的形态:市面上利用Linux来开发产品或distributions的社群/公司与个人不可胜数,但每套Linux distributions他们的配置文件、执行文件、每个目录内放置的文件其实都差不多,这是FHS标准的功劳。FHS标准的目的是让使用者可以了解到已安装软件通常放置于哪个目录下。
FHS针对目录树架构仅定义出三层目录底下应该放置什么数据,分别是:
- / (root,根目录) # 与启动系统有关(越小越好);
- /usr (unix sofeware resource)# 与软件安装/执行有关;
- /var (variable)# 与系统运行过程有关。
/ (root,根目录)
/usr (unix sofeware resource)
/var (variable)
1.3.2. 目录树
在Linux底下,所有的文件与目录都是由根目录开始的!那是所有目录与文件的源头,然后再一个一个的分支下来,有点像是树枝状。因此,我们也称这种目录配置方式为:目录树(directory tree)。他主要的特性有:
- 目录树的起始点为根目录(/, root);
- 每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统。例如可以使用NFS服务器挂载某特定目录等;
- 每一个文件在此目录树中的文件名(包含完整资源)都是独一无二的。
2. Linux文件与目录管理
2.1. 目录的相关操作
首先来看几个特殊的目录:再来看几个常见的处理目录的命令:
- cd # 切换目录;
- pwd # 显示当前目录;
- mkdir # 建立一个新目录;
- redir # 删除一个空目录。
cd(change directory,切换目录)
pwd(显示目前所在的目录)
mkdir(建立新目录)
rmdir(删除“空”的目录)
2.2. 文件与目录管理
2.2.1. 文件与目录的查看:ls
ls 的有很多,包括查阅文件所在 i-node 号码的 ls -i 选项,以及用来进行文件排序的 -S 选项,还有用来查阅不同时间的动作的 --time=atime 等选项。而这些选项的存在都是因为 Linux 文件系统记录了很多有用的信息的缘故。Linux 的文件系统中,这些与权限、属性有关的数据放在都放在 i-node 里面。
2.2.2. 复制、删除与移动:cp、rm、mv
cp(复制文件或目录)
rm(删除文件或目录)
mv(移动文件与目录,或重命名)
2.3. 文件内容查看
- cat # 由第一行开始显示文件内容;
- tac # 从最后一行开始显示(cat的倒着写);
- nl # 显示的时候,同时输出行号;
- more # 一页一页地显示文件内容;
- less # 一页一页地显示文件内容,可以往前翻页;
- head # 只看前面几行;
- tail # 只看后面几行;
- od # 以二进制的方式读取文件内容。
cat(concatenate)
nl(添加行号打印)
head (取出前面几行)
tail(取出后面几行)
od(非纯文本文件)
touch(修改文件事件或创建新文件)
在默认的情况下,ls 显示出来的是该文件的mtime,也就是这个文件的内容上次被更动的时间。我们复制一个文件时,会复制文件的内容和属性,但却没有办法复制 ctime 这个属性。 ctime 可以记录这个文件最近的状态 (status) 被改变的时间。我们平时看的文件属性中,比较重要的还是属于那个 mtime。
- mtime(修改时间)
当该文件的【内容数据】变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限。
- ctime(状态时间)
当该文件的【状态(sataus)】改变时,就会更新这个时间,举例来说,权限或属性被更改了,就会更新这个时间。
- atime(读取时间)
当【该文件的内容被读取】时,就会更新这个读取时间,举例来说,使用cat命令读取/etc/man_db.conf,就会更新这个时间。
2.4. 文件查找
2.4.1. 脚本文件查找
-
which(查找【执行文件】)
2.4.2.文件查找
find # 查找整个硬盘
whereis # 只找系统中某些特定目录下面的文件
locate/updatedb # 利用数据库来查找
-
find
-
whereis
locate/updatedb
- updatedb:根据 /etc/updatedb.conf的设置去查找系统硬盘内的文件,并更新 /var/lib/mlocate内的数据库文件;
- locate:依据 /var/lib/mlocate内的数据库记录,找出用户所输入关键词的文件名。
二么士