Linux下权限的设定及管理
1 基本文件属性
ls -l filename #文件属性的查看方式
ls –ld directory # 目录属性的查看方式
字段 | 对于文件属性字段的理解 | 对于目录属性字段的理解 |
---|---|---|
1 | 类型 | 类型 |
2 | 文件权限 | 目录权限 |
3 | SELinux Context | SELinux Context |
4 | 文件硬链接个数 | 目录中子目录的个数 |
5 | 文件拥有者 | 文件拥有者 |
6 | 文件拥有组 | 文件拥有组 |
7 | 文件大小 | 目录中自文件或子目录元数据大小 |
8 | 文件最后一次被修改的时间 | 目录中的内容最后一次被修改的时间 |
9 | 文件名称 | 目录名称 |
类型
当为[ d ]则是目录
当为[ - ]则是文件;
若是[ l ]则表示为链接文档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
每个文件的属性由左边第一部分的10个字符来确定(如下图)。
其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
2 修改文件属性
用户和用户组
chown 和 chgrp
Linux 是个多用户多任务的系统 , 常常会有多人同时使用同一主机来进行工 作 , 为了考虑每个人的隐私权以及每个人喜好的工作环境, 对用户进行分类
更改文件拥有者及拥有组的方法
文件拥有者及拥有组只有超级用户root可以修改
更改方式如下:
命令 | 作用 |
---|---|
chown 用户名 文件 | 更改文件拥有者 |
chgrp 组名称 文件 | 更改文件拥有组 |
chown –R 用户名 目录 | 处理指定目录以及其子目录下的所有文件 |
chgrp –R 组名称 目录 | 将指定目录下的所有文件及子目录一并处理。 |
chown 用户名 : 组名称 文件 / 目录 | 同时更改文件/目录拥有者/组 |
修改文件权限
chmod
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
- 数字方式
文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4 w:2 x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
而变更权限的命令格式是:
chmod [-R] ugo 文件/目录
- 字符方式
还有一个改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:
(1)user
(2)group
(3)others
那么我们就可以使用 u, g, o 来代表三种身份的权限!
此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:
u | +(加入) | r | ||
---|---|---|---|---|
u | ||||
chmod | g | -(除去) | W | 文件或目录 |
o | ||||
a | =(设定) | X |
如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:
- 模板方式
依照文件模板复制文件权限,格式如下:
chmod --reference=模板文件 目标文件
- 使用cp命令复制文件及属性
cp -p file1 file2
1
系统预留权限
系统为了保护正常工作往往在建立文件和目录时已经预留了权限,比如:
-
查看系统预留权限
很明显 777-022=755 但是文件是 777-022-111=644 -
更改系统预留权限
只需要 umask加所需权限即可,但是只在当前shell有用
-
永久更改系统预留权限
特殊权限SUID,SGID,SBIT
linux系统基本权限位为9位权限,但还有额外3位权限位,共12位权限:
suid | s(x) | S | 4 | 用户对应的权限位(用户对应的3位上) |
---|---|---|---|---|
sgid | s(x) | S | 2 | 用户对应的权限位(用户组对应的3位上) |
sticky | t(x) | T | 1 | 其他用户对应的权限位 |
SUID
suid是针对命令和二进制程序的
用户或属主对应的前三位权限的x位上如果有s就表示suid权限
当x位上没有小写x执行权限的时候,suid的权限显示的就是大S
suid的作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。
以cat为例:
原本没有权限的文件现在可以打开了
suid和su及sudo的区别:suid为某一个命令设置特殊权限(使用者为所有人)
SGID
sgid是针对用户组权限位的
对于文件来说,sgid的功能如下:
sgid仅对二进制程序有效
二进制命令或程序需要有可执行权限x
执行命令的任意用户可以获得该命令程序执行期间所属组的权限
对于目录来说,sgid的功能如下:
linux里默认情况所以用户创建文件,默认用户和组都是自身
sgid可以让用户在此目录下创建的文件和目录具有和此目录相同的用户组设置
SBIT
粘滞位,通常对目录而言。通常对于全局可写目录(other也可写)来说,让该目录具有sticky后,删除只对属于自己的文件有效(但是仍能编辑修改别人的文件,除了root的)。不能根据安全上下文获取对别人的文件的写权限。
别人的文件 仍然可以被其他人删
设定SBIT位
保护了文件不被除文件拥有者和root用户的用户删除