Linux 文件系统权限小结-基本权限-粘滞位-ACL

突然有人问道:drwxrwxrwx+后面的+号是干什么的,挺熟悉又想不起来,百度下后得到结果,最终总结一下Linux系统下关于文件权限的知识,在此记录下。

1、正常情况下,Linux文件系统中的文件权限为:

drwxr-xr-x 2 root root 4096 5月  24 15:12 directory
-rw-r--r-- 1 root root    0 5月  24 15:12 file.txt

十位第一位为文件属性,d为目录,-为普通文件,c表示为字符设备文件,b表示为块设备文件,s表示为套接字文件,l代表连接文件

后面9位:

rwxr-xr-x

每3位是一组,代表r:可读、w:可写;x:可执行。

从做往右第一组代表文件所有者、文件所属组、其他用户对其的权限。

权限修改可用chmod进行文件权限操作。

2、文件ACL:

ACL就是可以设置特定用户或者用户组对于一个文件/文件夹的操作权限. 需要掌握的命令也只有三个: getfacl, setfacl, chacl。

ACL 是由一系列的Access Entry所组成的. 每一条Access Entry定义了特定的类别可以对文件拥有的操作权限.

Access Entry有三个组成部分: Entry tag type, qualifier (optional), 权限
Entry tag type它有以下几个类型
ACL_USER_OBJ: 相当于Linux里file_owner的权限
ACL_USER: 定义了额外的用户可以对此文件拥有的权限
ACL_GROUP_OBJ: 相当于Linux里group的权限
ACL_GROUP: 定义了额外的组可以对此文件拥有的权限
ACL_MASK: 定义了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大权限 (这个我下面还会专门讨论)
ACL_OTHER: 相当于Linux里other的权限

可以通过getfacl filename获取文件相关权限,看一个没有设置任何ACL权限的文件显示如下:

# getfacl file.txt

# file: file.txt

# owner: root

# group: root

user::rw-

group::r--

other::r--

可以通过setfacl配置相关权限:

setfacl 参数
  -m:设置后续acl参数 
  -x:删除后续acl参数  
  -b:删除全部的acl参数
  -k:删除默认的acl参数
  -R:递归设置acl,包括子目录
  -d:设置默认acl

setfacl基本用法:首先存在两个用户 acluser和acluser2;

# setfacl -m acluser:rw file.txt 
[[email protected] file-qx]# getfacl file.txt 
# file: file.txt
# owner: root
# group: root
user::rw-
user:acluser:rw-
group::r--
mask::rw-
other::r--
# setfacl -m u:acluser:r file.txt 
[[email protected] file-qx]# getfacl file.txt 
# file: file.txt
# owner: root
# group: root
user::rw-
user:acluser:r--
group::r--
mask::r--
other::r--
# setfacl -m u:acluser2:rwx file.txt 
[[email protected] file-qx]# getfacl file.txt 
# file: file.txt
# owner: root
# group: root
user::rw-
user:acluser:r--
user:acluser2:rwx
group::r--
mask::rwx
other::r--
# setfacl -m g:acluser:rw file.txt 
[[email protected] file-qx]# getfacl file.txt 
# file: file.txt
# owner: root
# group: root
user::rw-
user:acluser:r--
user:acluser2:rwx
group::r--
group:acluser:rw-
mask::rwx
other::r--

]# getfacl file.txt 
# file: file.txt
# owner: root
# group: root
user::rw-
user:acluser:r--
user:acluser2:rwx
group::r--
group:acluser:rw-
mask::rwx
other::r--

# setfacl -x u:acluser file.txt

# getfacl file.txt 
# file: file.txt
# owner: root
# group: root
user::rw-
user:acluser2:rwx
group::r--
group:acluser:rw-
mask::rwx
other::r--

3、SUID和SGID

转自:http://blog.csdn.net/wellmikelan/article/details/7817403

粘滞位属于特殊权限位,与粘滞位相同的还有SUID 位,SGID 位,sticky 位

给文件加 SUID 和 SUID 的命令如下:

chmod u+s filename 设置SUID位

chmod u-s filename 去掉SUID设置

chmod g+s filename 设置SGID位

chmod g-s filename 去掉SGID设置

由于 SUID 和 SGID 是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的 SUID 和 SGID 位是没有多大意义的。

首先讲普通文件的 SUID 和 SGID 的作用。

如果普通文件 file 是属于 foo 用户的,是可执行的,现在没设 SUID 位,ls 命令显示如下:

-rwxr-xr-x 1 foo staff 7734 Apr 05 17:07 file

任何用户都可以执行这个程序。UNIX 的内核是根据什么来确定一个进程对资源的访问权限的呢?是这个进程的运行用户的(有效)ID,包括 user id 和 group id。用户可以用 id 命令来查到自己的或其他用户的 user id 和 group id。

除了一般的 user id 和 group id 外,还有两个称之为 effective 的 id,就是有效 id,上面的四个 id 表示为:uid,gid,euid,egid。内核主要是根据 euid 和 egid 来确定进程对资源的访问权限。一个进程如果没有 SUID 或 SGID 位,则 euid=uid egid=gid,分别是运行这个程序的用户的 uid 和 gid。例如 kevin 用户的 uid 和 gid 分别为 204 和 202,foo 用户的 uid 和 gid 分别为 200 和 201,kevin 运行 myfile 程序形成的进程的 euid=uid=204,egid=gid=202,内核根据这些值来判断进程对资源访问的限制,其实就是 kevin 用户对资源访问的权限,和 foo 没关系。

如果一个程序设置了 SUID,则 euid 和 egid 变成被运行的程序的所有者的 uid 和 gid,例如 kevin 用户运行 myfile,euid=200,egid=201,uid=204,gid=202,则这个进程具有它的属主 foo 的资源访问权限。

SUID 的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd 就是一个很鲜明的例子。

SUID 的优先级比 SGID 高,当一个可执行程序设置了 SUID,则 SGID 会自动变成相应的 egid。

下面讨论一个例子:

UNIX 系统有一个 /dev/kmem 的设备文件,是一个字符设备文件,里面存储了核心程序要访问的数据,包括用户的口令。所以这个文件不能给一般的用户读写,权限设为:

cr--r----- 1 root system 2, 1 May 25 1998 kmem

但 ps 等程序要读这个文件,而 ps 的权限设置如下:

-r-xr-sr-x 1 bin system 59346 Apr 05 1998 ps

这是一个设置了 SGID 的程序,而 ps 的用户是 bin,不是 root,所以不能设置 SUID 来访问 kmem,但大家注意了,bin 和 root 都属于 system 组,而且 ps 设置了 SGID,一般用户执行 ps,就会获得 system 组用户的权限,而文件 kmem 的同组用户的权限是可读,所以一般用户执行 ps 就没问题了。但有些人说,为什么不把 ps 程序设置为 root 用户的程序,然后设置 SUID 位,不也行吗?这的确可以解决问题,但实际中为什么不这样做呢?因为 SGID 的风险比 SUID 小得多,所以出于系统安全的考虑,应该尽量用 SGID 代替 SUID 的程序,如果可能的话。下面来说明一下 SGID 对目录的影响。SUID 对目录没有影响。如果一个目录设置了 SGID 位,那么如果任何一个用户对这个目录有写权限的话,他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而文件所有者不变,还是属于建立这个文件的用户。

4、粘滞位:

转载:http://www.2cto.com/Article/201411/353837.html

Linux系统中比较典型的例子就是“/tmp”、“/var/tmp”目录。这两个目录作为Linux系统的临时文件夹,权限为“rwxrwxrwx”,即允许任意用户、任意程序在该目录中进行创建、删除、移动文件或子目录等操作。然而试想一下,若任意一个普通用户都能够删除系统服务运行中使用的临时文件,将造成什么结果?

粘滞位权限便是针对此种情况设置,当目录被设置了粘滞位权限以后,即便用户对该目录有写入权限,也不能删除该目录中其他用户的文件数据,而是只有该文件的所有者和root用户才有权将其删除。设置了粘滞位之后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据。

需要注意的是,粘滞位权限只能针对目录设置,对于文件无效。

设置了粘滞位权限的目录,使用ls命令查看其属性时,其他用户权限处的“x”将变为“t”。

例如,查看/tmp、/var/tmp目录本身的权限,确认存在“t”标记。

[[email protected] ~]# ll -d /tmp

drwxrwxrwt. 16 root root 4096 12月 2 17:16 /tmp

[[email protected] ~]# ll -d /var/tmp

drwxrwxrwt. 3 root root 4096 12月 2 09:46 /var/tmp

粘滞位权限都是针对其他用户(other)设置,使用chmod命令设置目录权限时,“o+t”、“o-t”权限模式可分别用于添加、移除粘滞位权限。

例如,为/test目录设置粘滞位权限。

[[email protected] ~]# chmod o+t /test

[[email protected] ~]# ll -d /test

drwxrwxrwt. 2 root root 4096 12月 2 20:39 /test

此时普通用户natasha便无法删除/test/file1文件了。

[[email protected] ~]$ rm /test/file1

rm:是否删除有写保护的普通空文件 "/test/file1"?y

rm: 无法删除"/test/file1": 不允许的操作

5、文件隐藏属性

转载:http://blog.sina.com.cn/s/blog_69a976e101015u81.html

这些隐藏的属性确实对于系统有很大的帮助的~ 尤其是在系统安全 (Security) 上面,重要的紧呢!不过要先强调的是,底下的chattr指令只能在Ext2/Ext3的文件系统上面生效, 其他的文件系统可能就无法支持这个指令了。

 chattr (配置文件案隐藏属性) 

[[email protected] ~]# chattr [+-=][ASacdistu] 档案或目录名称

选项与参数:

+   :增加某一个特殊参数,其他原本存在参数则不动。

-   :移除某一个特殊参数,其他原本存在参数则不动。

=   :设定一定,且仅有后面接的参数

A  :当设定了 A 这个属性时,若你有存取此档案(或目录)时,他的访问时间 atime

将不会被修改,可避免I/O较慢的机器过度的存取磁盘。这对速度较慢的计算机有帮助

S  :一般档案是异步写入磁盘的(原理请参考第五章sync的说明),如果加上 S 这个

属性时,当你进行任何档案的修改,该更动会『同步』写入磁盘中。

a  :当设定 a 之后,这个档案将只能增加数据,而不能删除也不能修改数据,只有root

才能设定这个属性。

c  :这个属性设定之后,将会自动的将此档案『压缩』,在读取的时候将会自动解压缩,

但是在储存的时候,将会先进行压缩后再储存(看来对于大档案似乎蛮有用的!)

d  :当 dump 程序被执行的时候,设定 d 属性将可使该档案(或目录)不会被 dump 备份

i  :这个 i 可就很厉害了!他可以让一个档案『不能被删除、改名、设定连结也无法

写入或新增资料!』对于系统安全性有相当大的帮助!只有 root 能设定此属性

s  :当档案设定了 s 属性时,如果这个档案被删除,他将会被完全的移除出这个硬盘

空间,所以如果误删了,完全无法救回来了喔!

u  :与 s 相反的,当使用 u 来配置文件案时,如果该档案被删除了,则数据内容其实还

存在磁盘中,可以使用来救援该档案喔!

注意:属性设定常见的是 a 与 i 的设定值,而且很多设定值必须要身为 root 才能设定

请尝试到/tmp底下建立档案,并加入 i 的参数,尝试删除看看。

 lsattr (显示档案隐藏属性) 

[[email protected] ~]# lsattr [-adR] 档案或目录

选项与参数:

-a :将隐藏文件的属性也秀出来;

-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;

-R :连同子目录的数据也一并列出来!

[[email protected] tmp]# chattr +aij attrtest

[[email protected] tmp]# lsattr attrtest

----ia---j--- attrtest

[[email protected] ~]# cd /tmp

[[email protected] tmp]# touch attrtest     <==建立一个空档案

[[email protected] tmp]# chattr +i attrtest <==给予 i 的属性

[[email protected] tmp]# rm attrtest        <==尝试删除看看

rm: remove write-protected regular empty file `attrtest‘? y

rm: cannot remove `attrtest‘: Operation not permitted  <==操作不许可

# 看到了吗?呼呼!连 root 也没有办法将这个档案删除呢!赶紧解除设定!

请将该档案的 i 属性取消!

[[email protected] tmp]# chattr -i attrtest

时间: 2024-10-22 10:20:04

Linux 文件系统权限小结-基本权限-粘滞位-ACL的相关文章

linux下的粘滞位权限

1.为什么要有粘滞位? Linux中有一个存放临时文件的目录/tmp(类似于Windows中的temp目录),每个用户产生的临时文件都存放在此目录下,也就是说每个用户对/tmp目录都应该有写权限(否则无法拷贝生成文件),这样造成一个问题,比如,A同学在/tmp目录下创建了一个文件,B同学看着不爽就可以删掉,这如何控制?其实,这种情况永远都不会发生,因为/tmp目录有一个特殊的权限标记: 瞧见那个rwx权限最后的"t"了没,那个神奇的"t"就是粘着位t(有的资料中文也

网络安全系列之四十一 在Linux中设置粘滞位sbit权限

通常情况下用户只要对某个目录具备w写入权限,便可以删除该目录中的任何文件,而不论这个文件的权限是什么. 比如我们进行下面的操作: #创建/test目录,并赋予777权限. [[email protected] ~]# mkdir /test [[email protected] ~]# chmod 777 /test #以root用户的身份在/test目录中创建文件file1,并查看其默认权限. [[email protected] ~]# touch /test/file1 [[email p

Linux文件系统上的特殊权限 &nbsp; &nbsp; &nbsp;SUID, SGID, Sticky(粘之位)

每个人都有自己的梦想,我想把它写出来. Linux文件系统上的特殊权限 SUID, SGID, Sticky(粘之位) 1 文件基本权限 r读, w写, x执行 user, group, other 2 安全上下文 前提:进程有属主和属组:文件有属主和属组: (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限: (2) 启动为进程之后,其进程的属主为发起者:进程的属组为发起者所属的组: (3) 进程访问文件时的权限,取决于进程的发起者: (a) 进程的发起者,同

【转】Linux中的特殊权限粘滞位(sticky bit)详解

在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问.最为我们熟知的一个文件或目录可能拥有三种权限,分别是读.写.和执行操作,在这里不做详细说明.我们创建一个文件后系统会默认地赋予所有者读和写权限.当然我们也可以自己修改它,添加自己需要的权限. 特殊权限 但是这三种权限就足够了吗?我们现在来说说在linux下的另一个特殊权限.首先我们来看看在根目录下的一个目录tmp,可以看到tmp目录的other权限是'rwt',那么这里的t又是什么权限呢,有什

Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点

Linux文件系统上的特殊权限         权限模型:         u, g, o             r, w, x 进程的安全上下文:         前提:进程有属主(进程以哪个用户的身份运行):文件有属主和属组:         (1) 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限:         (2) 程序启动为进程后,此进程的属主为当前用户,也即进程的发起者:进程所属的组,为发起者的基本组:         (3) 进程拥的访问权限

Linux 文件系统上的特殊权限

Linux 文件系统上的特殊权限 权限模型: u,g,o r,w,x 进程的安全上下文: 前提:进程有属主(进程以哪个用户的身份运行):文件有属主和属组 1 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限 2 程序启动为进程后,此进程的属主为当前用户,也就是是进程的发起者,进程的属组,为发起者的基本组 3 进程拥有的访问权限,取决其属主的访问权限 a 进程的属主,与文件属主相同,则应用文件属主的权限 b 进程的属主,属于文件的属组,则应用文件属组的权限 c 否则

Linux文件系统上的特殊权限(SUID、SGID、Sticky)

Linux文件系统上的特殊权限(SUID.SGID.Sticky) SUID: 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限: 启动为进程之后,其属主不是发起者,而程序文件自己的属主:这种机制即为SUID: 权限设定: chmod u+s FILE... chmod u-s FILE... 注意: s: 属主原本拥有x权限: S: 属主原本无x权限: SGID: 默认情况下,用户创建文件时,其属级为此用户所属的基本组: 一旦某目录被设定了SGID权限,则对此目录拥

文件的三种特殊权限——suid、sgid和粘滞位(sticky)

文件的正常权限是首选对用户进行分组:文件属主,文件属组和其它.然后每组类用户对文件具有三种基本的权限:r,w,x.除了这些正常的权限设置,还可以设置三种特殊权限. 1. suid.任何用户执行设置有该权限的文件后,不再以用户自己的身份作为进程的属主,而是以该执行文件的属主作为进程的属主.这种权限的实质就是让执行该文件的用户,在进程运行过程中被授予文件属主的身份. 举例: -rwsr-xr-x. 1 root root 48568 Sep 10 14:24 /tmp/cat 任何用户运行cat时,

setuid setgid stick bit 特殊权限 粘滞位

1.setuid与setgid讲解 看一下系统中用到它的地方,以/etc/passwd和/usr/bin/passwd为例: 分析一下,/etc/passwd的权限为 -rw-r--r-- 也就是说:该文件的所有者拥有读写的权限,而用户组成员和其它成员只有查看的权限.我们知道,在系统中我们要修改一个用户的密码,root用户和普通用户均可以用/usr/bin/passwd someuser这个命令来修改这个/etc/passwd这个文件,root用户本身拥有对/etc/passwd的写权限,无可厚