在Linux上,Linux文件的权限共分为三种。 本文介绍如何正确设置Linux文件的权限。
三项特殊权限概述
SUID
当具有SUID位的可执行文件运行时,该文件将以所有者身份运行。 也就是说,无论谁运行此文件,都有文件所有者的特权。
如果所有者为root,则执行者具有超级用户权限。
SGID
运行设置了SGID位的可执行文件后,该文件具有所属组的权限,可以自由访问整个组可用的系统资源。
如果目录中设置了SGID,则复制到此目录下的所有文件所属的组都必须在复制文件时添加参数-p (preserve,保留文件属性)
sticky-bit
在一个文件中设置sticky-bit后,所有者必须执行删除、移动等操作,尽管其他用户具有写入权限。
如果在一个目录中设置sticky-bit,则只有存储在该目录中的文件的所有者才能执行删除、移动等操作。
特殊权限的数值显示
三个特殊权限可以用单独的一位八进制值表示
SUID、SGID、sticky-bit的数值显示
SUID SGID sticky二进制八进制说明
- - - 000 0不设置特殊权限
-t001只设置sticky
- s - 010 2仅设定SGID
- s t 011 3只设置SGID和sticky
s - - 100 4仅设定SUID
s - t 101 5只设置SUID和sticky
s-1106仅设置SUID和SGID
s s t 111 7设置了三个特殊权限
我们发现文件的权限可以用三个八进制表示。 实际上,文件的权限应该用四个八进制表示,但ls -l命令只显示三个。 其未显示的八进制数其实是第一个,它用于设置一些特殊权限。 这八进制的三位如下。
SUID SGID sticky-bit
这些含义如下
SUID
当具有SUID位的文件运行时,该文件将以所有者身份运行。 也就是说,无论谁运行此文件,都有文件所有者的特权。 如果所有者为root,则执行者具有超级用户权限。 此位将成为安全漏洞,请不要轻易设置。
SGID
和以上内容相似。 运行文件时,执行者拥有所属组的权限。
sticky-bit
在sticky位中,即使可执行程序退出,操作系统也必须在内存中保留程序的映像。 这是为了节省大程序的启动时间。 但是,它消耗系统资源。 因此,与其设定这个位,不如写程序。
设置uid; set gid; sticky bit差异
每个文件都有所有者、组号和set uid。set GID可以更改用户对文件的权限,也就是写入和执行。
setuid:在运行时具有文件所有者的权限。
setgid:设置目录。 目录具有setgid位,在此目录下创建的文件将继承该目录的属性。
sticky bit:此位可以理解为防删除位。 如果设置了sticky bit位,则即使用户对目录具有写入权限,也无法通过添加文件来删除文件。
设定方法:
这些标志与操作文件权限的命令相同,即chmod。 操作有两种方法。
1 ) chmodustemp----将temp文件标记为setuid。 (setuid仅对文件有效,U=用户) ) ) ) ) ) ) )。
chmodgstempdir--将tempdir目录标记为setgid (setgid仅对目录有效,g=组名) )。
将“chmod ot temp--”temp文件标记为sticky。 sticky仅对文件有效
2 )采用八进制方式。 这一组八进制数字三位的含义如下。
abc
设置位。 此位为1表示已设置setuid
b - setgid位。 如果此位为1,则表示已设置setgid
c - sticky位,此位为1表示已设定sticky
设定后,可以在ls -l上看到。 如果该位本来有x,则这些特殊标记显示为小写(s,s,t ),否则显示为大写(s,s,t )
例如:
表示有rwSRW-r--setuid标记(rwxrw-r--:rwsrw-r-- )
表示存在rwxrwsrw-setgid标记(rwxrwxrw-:rwxrwsrw-)
rwxrw-rwt表示存在sticky标记(rwxrw-rwx:rwxrw-rwt )
理解文件权限
文件访问权限是对文件的访问权限,包括对文件的读取、写入、删除和执行。 Linux
是一个多用户操作系统,它允许多个用户同时登录和工作。因此 Linux 将一个文件或目录与一个用户和组联系起来。请看下面的例子:drwxr-xr-x 5 root root 1024 Sep 13 03:27 Desktop
与文件权限相关联的是第一、第三、第四个域。第三个域是文件的所有者,第四个域是文件的所属组,而第一个域则限制了文件的访问权限。在这个例子中,
文件的所有者是 root,所属的组是 root,文件的访问权限是
drwxr-xr-x。对于文件和目录讲,每个文件和目录都有一组权限标志和它们结合在一起,在上例中就是第一个域中的内容。下面来仔细分析这个域中各个
符号的意义:
该域由 10 个字符组成,可以把它们分为四组,具体含义分别是:
d rwx r-x r-x
文件类型 所有者权限标志 组权限标志 其他用户权限标志
其中:
文件类型:第一个字符。由于 Linux 系统对与设备、目录、文件都当作是文件来处理,因此该字符表明此文件的类型,字符与对应的意义如下表: 文件标志
文件类型
例子
-
普通文件
数据文件、
ASCII 纯文本文件、程序
d
目录
/bin
b
块设备
/dev/hda(第一个 IDE 硬盘)
c
字符设备
/dev/ttyS1(与 DOS 种的串口 2 等同)
s
套接字
/dev/log
p
命名管道
/dev/initctl(与“|”等同)
l
符号链接
/dev/modem->/dev/ttyS1
权限标志:
对每个文件或目录都有 4 类不同的用户。每类用户各有一组读、写和执行(搜索)文件的访问权限,这 4 类用户是:
root:系统特权用户类,既 UID = 0 的用户。
owner:拥有文件的用户。
group:共享文件的组访问权限的用户类的用户组名称。
world:不属于上面 3 类的所有其他用户。
作为
root,他们自动拥有了所有文件和目录的全面的读、写和搜索的权限,所以没有必要明确指定他们的权限。其他三类用户则可以在耽搁文件或者目录的基础上别
授权或撤消权限。因此对另外三类用户,一共 9 个权限位与之对应,分为 3 组,每组 3 个,分别用 r、w、x 来表示,分别对应
owner、group、world。
权限位对于文件和目录的含义有些许不同。每组 3
个字符对应的含义从左至右的顺序,对于文件来说是:读文件的内容(r)、写数据到文件(w)、做为命令执行该文件(x)。对于目录来说是:读包含在目录中
的文件名称(r)、写信息到目录中去(增加和删除索引点的连接)、搜索目录(能用该目录名称作为路径名去访问它所包含的文件或子目录)。具体来说就是:
1. 有只读权限的用户不能用 cd 进入该目录;还必须有执行权限才能进入。
2. 有执行权限的用户只有在知道文件名并拥有该文件的读权限的情况下才可以访问目录下的文件。
3. 必须有读和执行权限才可以使用 ls 列出目录清单,或使用 cd 进入目录。
4. 如用户有目录的写权限,则可以创建、删除或修改目录下的任何文件或子目录,既是该文件或子目录属于其他用户。
修改文件权限
首先讲修改文件的所有权,使用 chown 和 chgrp 命令:
chown new_user file or directory:修改文件或目录的所有者。
chgrp new_group file or directory:修改文件或目录的所属组。
这里需要注意的是:普通用户不能将文件或目录的所有权交与他人,只有 root 有这一权限。但是普通用户有权改变文件或目录的所属组。
由于每类用户的权限都是由 rwx
三位组成,因此可以用三个八进制数字表示文件的访问权。一个八进制数字可以用三个二进制数字表示,那么与其对应,权值为 4 的位对应 r,权值为 2
的位对应 w,权值为 1 的位对应 x。对于一类用户,将这三位与其对应的权值相乘求和,就可以得出对该类用户的访问权限。
改变文件访问权限的命令是 chmod,格式是:
chmod permission file_name
比如 chmod 764 a.txt,它表示对于文件的所有者,具有对该文件读、写、执行的权限。对于文件所属组的用户,拥有读、写的权限。对于其他用户,只有读权限。
这里需要注意的是:文件的创建者是唯一可以修改该文件访问权限的普通用户,另外一个可以修改文件访问权限的用户是 root。
还有一种表示方法,就是用字符串来设定文件访问权限。其中读用 r 表示,写用 w 表示,执行用 x 表示;所有者用 u 表示,组用户用 g 表示,其他用户用 o 表示,所有用户用 a 表示。