文件系统的权限管理
1、Linux系统下每个目录或文件的权限对象主要分为:属主(u)、属组(g)、其他用户(o),针对每类访问对象都定义了三种权限:读(r)、写(w)、执行(x),这三种权限针对目录和文件的作用各不相同,以下将做详细说明:
对于文件来说:
读(r)权限:可以使用文本查看类工具读取文件内容
写(w)权限:可以修改文件内容,但不能删除文件本身
执行(x)权限:主要针对二进制程序或脚本,可以将其提交给内核并启动一个进程(即运行程序)
对于目录来说:
读(r)权限:只能读取目录中的文件列表,不能访问、不能进入目录、不能查看元数据
写(w)权限:可以在目录中创建、删除文件,但不能使用cd命令进入目录中
执行(x)权限:可以使用cd命令进入目录,但不能查看目录中的文件列表
权限的表示方法可以使用字符表示,也可以使用八进制数字表示,对应关系如下表:
权限位 | — | –x | -w- | -wx | r– | r-x | rw- | rwx |
二进制表示 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
八进制表示 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
一个文件的权限位通常分为9位,前三位表示属主的权限,中间三位表示属组的权限,后三位表示其他用户的权限。
2、文件权限修改命令chmod
用法:chmod [选项]… 模式[,模式]… 文件…
或:chmod [选项]… 八进制模式 文件…
或:chmod [选项]… –reference=参考文件 文件…
常用选项:
-R:以递归方式更改所有的文件及子目录
模式:
u= 表示修改属主的所有r、w、x权限
g= 表示修改属组的所有r、w、x权限
o= 表示修改除了属主、属组的其他用户所有r、w、x权限
ug= 表示同时修改属组和属组的所有r、w、x权限
a= 表示修改所有对象的r、w、x权限(即属主、属组和其他用户)
u+ 表示在原来属主权限的基础上增加某位或某些位的权限
u- 表示在原来属主权限的基础上减去某位或某些位的权限
注意:X(大写)表示只给目录x权限,不给文件x权限
应用实例:
[root@liang testdir]# ll 总用量 4 drwxr-xr-x. 3 root root 4096 8月 4 05:46 bbb [root@liang testdir]# chmod u=r,o-x bbb/ [root@liang testdir]# ll 总用量 4 dr--r-xr--. 3 root root 4096 8月 4 05:46 bbb [root@liang testdir]# chown 765 bbb/ [root@liang testdir]# ll 总用量 4 drwxr-xr--. 3 765 root 4096 8月 4 05:46 bbb [root@liang testdir]# ll /etc/shadow ----------. 1 root root 2268 8月 4 05:07 /etc/shadow [root@liang testdir]# chmod --reference=/etc/shadow bbb/ [root@liang testdir]# ll 总用量 4 d---------. 3 root root 4096 8月 4 05:46 bbb
3、文件属主修改命令chown
用法:chown [选项]… [所有者][:[组]] 文件…
或:chown [选项]… –reference=参考文件 文件…
常用选项:
-R:递归处理所有的文件及子目录
应用实例:
[root@liang testdir]# ll 总用量 4 drwxrw-r-x. 3 root root 4096 8月 4 05:46 bbb [root@liang testdir]# chown zsan bbb/ [root@liang testdir]# ll 总用量 4 drwxrw-r-x. 3 zsan root 4096 8月 4 05:46 bbb [root@liang testdir]# chown lsi:sysadmins bbb/ [root@liang testdir]# ll 总用量 4 drwxrw-r-x. 3 lsi sysadmins 4096 8月 4 05:46 bbb [root@liang testdir]# chown --reference=/root/ bbb/ [root@liang testdir]# ll 总用量 4 drwxrw-r-x. 3 root root 4096 8月 4 06:28 bbb
4、文件属组修改命令chgrp
用法:chgrp [选项]… 用户组 文件…
或:chgrp [选项]… –reference=参考文件 文件…
常用选项:
-R:递归处理所有的文件及子目录
应用实例:
[root@liang testdir]# ll 总用量 4 drwxrw-r-x. 3 root root 4096 8月 4 06:28 bbb [root@liang testdir]# chgrp sysadmins bbb/ [root@liang testdir]# ll 总用量 4 drwxrw-r-x. 3 root sysadmins 4096 8月 4 06:28 bbb [root@liang testdir]# chgrp --reference=/root/ bbb/ [root@liang testdir]# ll 总用量 4 drwxrw-r-x. 3 root root 4096 8月 4 06:28 bbb
5、设置文件或目录新建时的默认权限命令umask
umask命令的作用是新建目录或文件时屏蔽掉最大权限相应的位,从而得出默认权限。
对于普通文件来说,一般情况下,新建文件的默认八进制权限值等于666减去umask的值,但如果某类对象的权限值结果中存在x权限,则将其权限位加1。
对于目录文件来说,新建目录的默认八进制权限值等于777减去umask的值。
设定umask值:umask 八进制权限模式 或:umask 模式[,模式]…
显示umask值:umask 或 umask -S 或 umask -p
[root@fengl etc]# umask u=r,g=r,o=r [root@fengl etc]# umask 0333 [root@fengl etc]# umask -p umask 0333 [root@fengl etc]# umask -S #显示的是新建文件或目录的默认权限,如果新建的是文件且有x权限时,则自动减去x权限 u=r,g=r,o=r [root@fengl etc]# umask 234 [root@fengl etc]# umask 0234
可以在环境变量中直接添加umask的值实现控制新建目录或文件的默认权限效果。umask的全局配置在文件/etc/bashrc中,umask的用户环境变量可以在~/.bashrc中设置。
应用实例:
[root@liang6 testdir]# umask 0022 [root@liang6 testdir]# touch file1 [root@liang6 testdir]# mkdir dir1 [root@liang6 testdir]# ll total 4 drwxr-xr-x. 2 root root 4096 Aug 4 08:18 dir1 -rw-r--r--. 1 root root 0 Aug 4 08:18 file1 [root@liang6 testdir]# umask 111 [root@liang6 testdir]# touch file2 [root@liang6 testdir]# mkdir dir2 [root@liang6 testdir]# ll total 8 drwxr-xr-x. 2 root root 4096 Aug 4 08:18 dir1 drw-rw-rw-. 2 root root 4096 Aug 4 08:18 dir2 -rw-r--r--. 1 root root 0 Aug 4 08:18 file1 -rw-rw-rw-. 1 root root 0 Aug 4 08:18 file2
6、Linux文件系统上的特殊权限
在Linux系统上的三个特殊权限为:SUID、SGID、Sticky
Linux系统中任何一个可执行程序文件都有其属主和属组,程序运行时的进程也有属主和属组。一个可执行程序能否启动为进程,取决于发起者对程序文件是否拥有可执行权限,当可执行程序启动为进程时,其进程的属主为发起者,进程的属组为发起者所属的组。而进程访问文件时的权限取决于进程的发起者,如果进程的发起者为程序文件的属主,则该进程所拥有的权限和程序文件的属主权限一样,如果进程的发起者为程序文件的属组,则该进程拥有的权限和程序文件的属组权限一样,同样,如果进程的发起者为程序文件的“其他位”用户,则该进程所拥有的权限和程序文件的“其他位”权限一样。
(1)、SUID的作用就是保证程序运行时的进程属主为原有文件的属主,即进程的有效身份不是发起者,而是程序文件自身的属主,这样可以避免不同用户启动可执行程序时的权限问题(如paswd命令,执行passwd命令的过程其实就是访问并修改/etc/shadow文件,而普通用户对该文件是没有任何访问权限的)。因此,SUID权限一般作用在有可执行权限的二进制文件(可执行程序或命令)上。
SUID权限的设置方法为:chmod u+s FILE… 或 chmod u-s FILE…
SUID的权限位(s)和文件的属主执行权限位(x)相同,此s可能显示为大写或小写,大写表示该文件的属主本身没有可执行权限,小写表示该文件的属主本身具有可执行权限。
应用实例:
[root@liang6 testdir]# ll total 0 -rw-r--r--. 1 root root 0 Aug 4 08:18 file1 [root@liang6 testdir]# chmod u+s file1 [root@liang6 testdir]# ll total 0 -rwSr--r--. 1 root root 0 Aug 4 08:18 file1 [root@liang6 testdir]# chmod u-s file1 [root@liang6 testdir]# ll total 0 -rw-r--r--. 1 root root 0 Aug 4 08:18 file1 [root@liang6 testdir]# chmod u+sx file1 [root@liang6 testdir]# ll total 0 -rwsr--r--. 1 root root 0 Aug 4 08:18 file1
(2)、默认情况下用户创建文件时,其属组为此用户所属的主组,而一旦某目录被设定了SGID权限,则对该目录有写权限的用户,在此目录下所创建的文件或目录所属组为此目录的属组。
SGID的设置方法为:chmod g+s DIR… 或 chmod g-s DIR…
SUGD的权限位(s)和目录的属组执行权限位(x)相同,此s可能显示为大写或小写,大写表示该目录的属组本身没有可执行权限,小写表示该目录的属组本身具有可执行权限。
应用实例:
[root@liang6 testdir]# ll total 4 drwxr-xr-x. 2 root root 4096 Aug 4 10:41 dir1 [root@liang6 testdir]# chmod g+s dir1/ [root@liang6 testdir]# ll total 4 drwxr-sr-x. 2 root root 4096 Aug 4 10:41 dir1 [root@liang6 testdir]# chmod o+w dir1/ [root@liang6 testdir]# ll total 4 drwxr-srwx. 2 root root 4096 Aug 4 10:41 dir1 [root@liang6 testdir]# su user5 [user5@liang6 testdir]$ touch dir1/file1 [user5@liang6 testdir]$ exit [root@liang6 testdir]# su user3 [user3@liang6 testdir]$ touch dir1/file2 [user3@liang6 testdir]$ exit [root@liang6 testdir]# ll dir1/ total 0 -rw-rw-r--. 1 user5 root 0 Aug 4 10:44 file1 -rw-rw-r--. 1 user3 root 0 Aug 4 10:44 file2
(3)、Sticky 称作为粘滞位,一般作用在目录上,实现的效果是对于一个多人可写的目录,每个用户仅能删除自己的文件(GID为0的管理员用户除外),如系统上的/tmp和/var/tmp目录默认都具有Sticky权限。
Sticky的设置方法为:chmod o+t DIR… 或 chmod o-t DIR…
Sticky的权限位(t)和目录的“其他位”执行权限位(x)相同,此t可能显示为大写或小写,大写表示该目录的“其他位”本身没有可执行权限,小写表示该目录的“其他位”本身具有可执行权限。
应用实例:
[root@liang6 testdir]# chmod o+t dir1/ [root@liang6 testdir]# ll total 4 drwxr-xrwt. 2 root root 4096 Aug 4 10:44 dir1 [root@liang6 testdir]# cd dir1/ [root@liang6 dir1]# su user5 [user5@liang6 dir1]$ ll total 0 -rw-rw-r--. 1 user5 root 0 Aug 4 10:44 file1 -rw-rw-r--. 1 user3 root 0 Aug 4 10:44 file2 [user5@liang6 dir1]$ rm -f file2 rm: cannot remove `file2': Operation not permitted [user5@liang6 dir1]$ rm -f file1 [user5@liang6 dir1]$ ll total 0 -rw-rw-r--. 1 user3 root 0 Aug 4 10:44 file2
(4)、这三个特殊权限也可以组成一组权限,并用八进制表示法表示,这三个权限位分别为:sgid-suid-sticky,
000 001 010 011 100 101 110 111
八进制 0 1 2 3 4 5 6 7
特殊权限的八进制表达法,可于默认的三位八进制数字左侧再加一位八进制数字,如:
[root@liang testdir]# chmod 2555 dir1/ [root@liang testdir]# ll 总用量 4 dr-xr-sr-x. 2 root root 4096 8月 5 03:32 dir1
7、改变文件属性的命令chattr和查看属性命令lsattr
chattr命令只有超级权限的用户才能使用,该命令可改变存放在ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs等文件系统上的文件或目录属性。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在绝大部分的Linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。
用法:chattr [-RVf] [-+=AacDdeijsSu] [-v version] files…
常用选项:
-R 递归处理,将指定目录下的所有文件及子目录一并处理
-V 显示指令执行过程
-f 抑制大多数的错误信息
-v<版本编号> 设置文件或目录版本
模式说明:
+<属性> 开启文件或目录的该项属性
-<属性> 关闭文件或目录的该项属性
=<属性> 指定文件或目录的该项属性
A:即Atime,文件或目录的atime不可被修改,可以有效预防例如手提电脑磁盘I/O错误的发生
a:即Append Only,设定该参数后,只能向文件中添加数据,而不能删除。如果目录具有这个属性,系统将只允许在这个目录下创建和修改文件,而不允许删除任何文件,多用于服务器日志文件安全
c:即compresse,设定文件是否经压缩后再存储,读取时需要经过自动解压操作
i:即Immutable,设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容,如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。i参数对于文件系统的安全设置有很大帮助
s:保密性地删除文件或目录,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域
u:与s相反,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录
lsattr命令可查看使用chattr命令改变文件的属性信息。
用法:lsattr [-RVadlv] [files…]
常用选项:
-a:显示所有文件和目录,包括“.”和“..”
-d:显示目录,而非目录内容
-R:递归处理
应用实例:
[root@liang testdir]# chattr -R +i dir1/ [root@liang testdir]# lsattr -a dir1/ ----i--------e- dir1/. -------------e- dir1/.. ----i--------e- dir1/file1 [root@liang testdir]# ll 总用量 4 drwxr-xr-x. 2 root root 4096 8月 5 04:20 dir1 [root@liang testdir]# cd dir1/ [root@liang dir1]# touch file2 touch: 无法创建"file2": 权限不够 [root@liang dir1]# ll 总用量 4 -rw-r--r--. 1 root root 5 8月 5 04:20 file1 [root@liang dir1]# cat file1 aaaa [root@liang dir1]# echo bbbbbbbbbb > file1 -bash: file1: 权限不够
8、设置文件的访问控制列表命令setfacl
chmod命令可以修改文件或目录的所有者、所属组和其他人的权限,而setfacl命令可以实现更灵活的权限管理,除了对文件或目录的所有者、所属组和其他人的权限管理外,还可以对更多的用户设置权限。
文件设置了访问控制列表后的权限执行顺序为:所有者、自定义用户、自定义组、其他人
CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需要手动增加,命令如下:
]# tune2fs -o acl /dev/sdb1
]# mount -o acl /dev/sdb1 /mnt
用法: setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file …
常用参数:
-m, –modify=acl:修改ACL
-x, –remove=acl:移除ACL
-M, –modify-file=file:修改从文件读取的ACL条目
-X, –remove-file=file:移除从文件读取的ACL条目
-b, –remove-all:清空ACL
-d, –default:通常用在目录上,效果是在该目录下新建的文件或目录会默认添加ACL
-k, –remove-default:与-d相反,作用是移除目录上添加的默认ACL
-R, –recursive:递归设置
getfacl命令可以查看设置的文件访问控制列表
用法:getfacl [-aceEsRLPtpndvh] file …
应用实例:
[root@liang testdir]# setfacl -m u:zsan:rwx dir1/ #修改ACL [root@liang testdir]# [root@liang testdir]# getfacl dir1/ #查看ACL # file: dir1/ # owner: root # group: root user::rwx user:zsan:rwx group::r-x mask::rwx other::r-x [root@liang testdir]# chmod g=w dir1/ [root@liang testdir]# getfacl #更改属组的权限后再查看ACL Usage: getfacl [-aceEsRLPtpndvh] file ... Try `getfacl --help' for more information. [root@liang testdir]# getfacl dir1/ # file: dir1/ # owner: root # group: root user::rwx user:zsan:rwx #effective:-w- group::r-x #effective:--- mask::-w- other::r-x [root@liang testdir]# setfacl -x u:zsan dir1/ #移除ACL后使用ll查看 [root@liang testdir]# ll 总用量 8 drwxr-xr-x+ 2 root root 4096 8月 5 04:20 dir1 [root@liang testdir]# setfacl -b dir1/ #清楚ACL后查看 [root@liang testdir]# ll 总用量 4 drwxr-xr-x. 2 root root 4096 8月 5 04:20 dir1 [root@liang testdir]# setfacl -m d:u:zsan:rw dir1/ #设置目录的默认ACL,只影响改目录下的新文件 [root@liang testdir]# getfacl dir1/ # file: dir1/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:zsan:rw- default:group::r-x default:mask::rwx default:other::r-x
原创文章,作者:苦涩咖啡,如若转载,请注明出处:http://www.178linux.com/28313
评论列表(1条)
写的很好,思路清晰,命令常见用法都有详细示例。