文件的权限
当运行如下命令时:
[[email protected] ~]# ll /etc/passwd
出现下面结果:
-rw-r--r--. 1 root root 1933 May 19 11:14 /etc/passwd
解释如下:
1)- 代表文件类型
-:普通文件
d:目录文件
l:软连接文件
s:套接字文件
p:管道文件
c:字符设备文件 无缓存,顺序访问
b:块设备文件 有缓存,随机访问
2)rw-r--r-- 代表文件的权限
能使用此文件的用户分为三类,属主,属组的用户和其他用户
从左到右,每三位分别代表三类用户的权限
r:读权限
w:写权限
x:执行权限
-:代表没有相应位置的权限
对于文件,读写执行分别代表的含义:
r:可用文件查看类工具获取文件内容
w:可修改其内容,只有此权限时,不能查看再修改,但是可以用重定向修改
x:可以把文件提交给内核,启动一个进程来执行
对于目录来说,读写执行分别代表的含义:
r:可以数用ls查看此目录中的文件列表
w:可以在目录中创建/删除文件
x:可以使用ls -l查看此目录中文件列表的详细信息,也可以用cd进入此目录
Attention:对于某个用户来说,目录有w权限,无论里面文件是否有w权限,都可被删除
基本的文件权限就用这9位来表示,这样将其功能位置固定,用10表示对应其功能开关,那么就是一个9位的二进制数,再将每三为捆绑加以区分对每类用户的权限,这样就可以清晰的看到每类用户的权限了
e.g.rw-r----- 对应二进制 110 100 000 再将每三位捆绑 变成三位的八进制数。 640 属主读写权限,属组读权限,其他无权限,这通常是一个文件的默认权限 目录默认 755
3). 如果有此项,则代表该文件有selinux标签,使用ll -Z查看,如果是目录则用ll -dZ
Following the file mode bits is a single character that specifies
whether an alternate access method such as an access control list
applies to the file. When the character following the file mode
bits is a space, there is no alternate access method. When it is
a printing character, then there is such a method.
在文件权限位后面,附加有一个单字符。用来表示是否有一个
可替换的访问控制措施应用在这个文件上。例如,访问控制列表(ACL,access control list)。
当文件权限位后面附加的是一个空格时,表示系统没有可替换的访问控制措施。
当是一个可打印字符时,表示系统存在这样一个访问控制措施。
GNU `ls‘ uses a `.‘ character to indicate a file with an SELinux
security context, but no other alternate access method.
GNU的ls命令使用‘.’字符表示文件使用了selinux
安全上下文,但是没有其他可替代的访问控制措施
A file with any other combination of alternate access methods is
marked with a `+‘ character.
在使用SElinux安全上下文的同时,混用其他访问控制措施的文件用+字符标记
4) 1代表硬链接或软链接的数量(参见MyNewDocument/New_1/文件系统下/inode)
5)文件的属主
6)文件的属组
7)时间戳
8)文件或目录名字
1.修改文件权限
chmod [option] OCTAL/MODE file/directory
-R 递归修改权限 修改目录权限采用
OCTAL 八进制数,在上一节上中描述了八进制数的由来,跟此处的八进制数一致
chmod 644 file
将文件权限设为644 即 rw- r-- r--
MODE [u,g,o] [+/-/=] [rwx]
u:代表要设置属主权限
g: 代表要设置属组权限
o:代表要设置其他权限
a:代表所有人
这三个可以组 例如 ug= uo+等
+:某一类用户增加权限
-:某一类用户减少权限
=:指定某一类用户的权限
rwx:最多3位,要什么权限就写什么权限,没有不写
这是基本权限位,除此还有st
chmod --reference=rfile file 依据rfile的权限来设置file的权限
小窍门:
设置一个目录本身及目录中的所有文件和目录的权限,对于所有人来说,使文件具有读写权限,目录具有读写执行权限
chmod -R a=rwX dir
只有x位有大写的权限,除此之外,大写,还有ST
2.改变文件的属主和属组
chown [option] [owner][:group] file
-R 递归修改
owner 只修改属主
owner:Group 修改属主和属组
:group 修改属组
Attention:“:”可以被.代替
chown --reference==rfile file 依据rfile的属主属组来设置file的属主属组
3.umask 参见 MyDocument/1/umask
4.特殊权限 SUID SGID Stickybit
1)安全上下文
前提:进程有属主和属组(但是没有基本组和附加组的概念),文件有属主和属组
(1)任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否有执行权限
(2)执行文件启动为进程之后,其进程的属主为发起者,进程的属组为发起者的属组
(3)进程访问文件时的权限,取决于进程的发起者
(a)进程的发起者,就是文件的属主,则应用文件属主的权限
(b)进程的发起者,属于文件的属组,则应用文件属组的权限
(c)应用文件“其他”权限
2)可执行文件上的SUID
(1)作用对象:二进制可执行文件
(2)标记,二进制可执行文件的属主的执行权限位:
s:代表在设置SUID之前,这个二进制可执行文件属主有x权限
S:代表在设置SUID之前,这个二进制可执行文件属主没有x权限
(3)意义:
任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否有执行权限
执行文件启动为进程之后,其进程的属主不是发起者,而是可执行程序文件的属主
以可执行二进制文件的属主身份启动进程,而后进程访问的文件的权限,都要看二进制可执行文件的属主,而非此二进制可执行文件的发起者(当前用户)
(4)设置在目录上无意义
chmod u+/-s file
3)SGID权限
(1)作用对象:二进制可执行文件或目录
(2)标记,二进制可执行文件或目录的属组的执行权限位:
s:代表在设置SGID之前,这个二进制可执行文件或目录的属组有x权限
S:代表在设置SGID之前,这个二进制可执行文件或目录的属组没有x权限
(3)意义:
(a)作用在二进制可执行文件上
任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否有执行权限
执行文件启动为进程之后,其进程的属主不是发起者,而是可执行程序文件的属组
以可执行二进制文件的属主身份启动进程,而后进程访问的文件的权限,都要看二进制可执行文件的属组,而非此二进制可执行文件的发起者(当前用户)
(b)作用在目录上
有这样一种需求,有一组用户加入了同一个组gp1,在磁盘上想创建一个目录pub,作为gp1组的公共目录,每个人都可以在这个目录中,增删文件,修改组内成员的文件
mkdir pub
chown -R :gp1 pub
这样组内成员都可以在pub中增删文件,但创建的文件的属组还是自己的属组,也只能删除自己的文件。
我们似乎可以这样做
chown -R :gp1 pub
但是每每有人创建文件或目录,管理员都要执行此操作,实在显得有些难堪
那么这就是目录上SGID的发挥的地方了
默认情况下,在某目录中,用户创建文件或目录时,其属组为用户的属组
一旦某目录被设定了SGID,则对此目录有写权限的用户(可能是目录的属主,属组用户,或其他用户)在此目录中,创建的文件或子目录所属的组为此目录的属组,而权限要应用对应用户的umask,
Attention:子目录继承sgid,且目录(也就是前面子目录的父目录)设置sgid之前,其目录内已存在的文件或目录不会的属组不会被修改,sgid权限也不会被修改(特指已存在的目录)
(4)设置权限
chmod g+/-s DIR/file
4)Sticky
(1)作用对象:目录
(2)标记目录的其他用户的执行权限位:
x:代表在设置sticky之前,这个目录的属组有x权限
X:代表在设置sticky之前,这个目录的属组没有x权限
(3)意义:
通常,对于某目录,用户有写权限,那么这个用户就可以删除该目录下的任意文件或目录(包括root的文件或目录)
在目录上设置sticky位,只有文件或目录的所有者或root可以删除文件或目录,但是否能修改为文件和目录,还是要看这个文件和目录对于用户来说有无权限,
Attention:设置了sticky位的目录的子目录不继承sticky
sticky设置在文件上无意义
(4)设置权限
chmod o+/- dir
5)特殊权限的数字表示法
三个特殊权限的二进制位,组成了一个8进制数,在数字表示法中放在普通权限前面
如chmod 4640 file 代表给文件设置了suid
5.另外的特定属性
chattr +i file 不能删除,改名和更改
dir 不能删除,改名和创建和删除文件
chattr +a file/dir 只能增加
lsattr 显示这里的特定属性
Attention:这个属性和cp --preserve=xattr中的xattr不是一回事