Linux文件权限概述
一、12位权限体系了解
在之前的Linux学习篇中我们讲《Linux文件属性信息概述 | 南汐 (zzxe.eu.org)》的时候,我们已经对文件的基本权限和如何修改文件的权限做了基本的讲述,linux系统有9位基本权限位,但除了这9位基础权限Linux文件系统中还有额外3位身居幕后的隐藏权限,总共12位权限!
Linux 系统,最常见的文件权限有 3 种,即对文件的读(用 r 表示)、写(用 w 表示)和执行(用 x 表示,针对可执行文件或目录)权限。在 Linux 系统中,每个文件都明确规定了不同身份用户的访问权限,通过 ls 命令即可看到。
除此之外,我们有时会看到 s(针对可执行文件或目录,使文件在执行阶段,临时拥有文件所有者的权限)和 t(针对目录,任何用户都可以在此目录中创建文件,但只能删除自己的文件),文件设置 s 和 t 权限,会占用 x 权限的位置。
1 | [root@localhost ~]# stat /tmp/ |
如何知道用户对某个文件或目录拥有的权限?
⒈当前的用户是什么(登录系统的用户)
⒉用户和文件的关系(属主、属组、其他人)
⒊根据位置找到对应的权限位置(属主:前三位;属组:中间三位;其他用户:后三位)
⚠️注意: 软链接文件的权限必须看源文件的权限信息!!!
二、rwx对与文件与目录的权限
1 | ###环境准备### |
1、对文件的权限
① 当文件权限只有 r 时使用命令编辑 1.txt ,无论保存并退出和强制保存退出均无效,只能选择强制不保存退出。发现文件只读。
② 当文件权限只有 w 时使用命令编辑 1.txt ,无论保存并退出和强制保存退出均无效,只能选择强制不保存退出。发现文件无法执行任何操作。
1 | [root@localhost data]# chmod o=w 1.txt |
③ 当文件权限只有 x 时使用命令编辑 1.txt ,无论保存并退出和强制保存退出均无效,只能选择强制不保存退出。发现文件无法执行任何操作。
1 | [root@localhost data]# chmod o=x 1.txt |
注意
当文件属主是当前登录用户时,即便文件权限信息上没有写权限,主人(属主)也可以强制写入!
1 | [root@localhost data]# chown nanxi.root 1.txt # 修改文件属主 |
vim编辑内容时,因为只读不显示文本信息,使用:wq!
强制保存退出后,进入root用户下查看,发现发现内容居然保存成功了!!!
总结
对文件而言,rwx 值至关重要,它是限制文件操作的最直接要素,普通文件的最高权限为666,脚本文件除外(脚本文件最高权限777),因为普通文件里面存放均为字符串信息,不涉及命令的执行,所以 x 权限对普通文件根本没有作用。普通文件默认权限644。
2、对目录的权限
① 当目录权限只有 r 时,发现文件无法执行任何操作(无法切换至该目录、无法查看文件内容、无法在目录下创建文件、只知道文件名字无意义)。
1 | [root@localhost data]# mkdir zzxe |
② 当目录权限只有 w 时,发现文件无法执行任何操作(无法切换至该目录、无法查看文件内容、无法在目录下创建文件)。
1 | [root@localhost data]# chmod o=w zzxe |
③ 当目录权限只有 x 时,发现可以切换至目录,但无法查看目录信息、无法在目录下创建文件(虽然可以查看文件内容,但前提我们根本看不到目录下的文件信息)。
1 | [root@localhost data]# chmod o=x zzxe |
总结
rwx对目录而言,r:我们只能看到目录下的文件名字;w:我们不能进行任何操作;x:我们只能切换至该目录下;对与目录而言单独的拥有 r、w、x 权限是无意义的,目录权限默认为755(rwxr-xr-x),最高权限为777(rwxrwxrwx)。
umask值
umask值默认为0022,它控制着Linux文件系统文件的默认权限,算法如下:默认权限=最高权限-umask值;例如:文件默认权限:666-022=644、目录默认权限:777-022=755。 umask临时设置方法:umask 022
,这个值在企业中从不修改,包括我们个人使用也尽量不要修改,否则我们熟知的文件权限信息就会乱成一团,对自己以及他人都是一种不正常的习惯!
三、文件的隐藏权限
linux系统除了有9位基本权限位,还有额外3位权限位分别为:suid
,sgid
,sticky
;
1、隐藏权限位 i & a
1 | [root@localhost zzxe]# cat 1.txt |
如上图所示,vim文件1.txt时,无法写入!只允许强制退出不保存。设置隐藏 a 权限只能追加内容!!!
1 | [root@localhost zzxe]# chattr +i 1.txt # 设置隐藏权限 i |
如上图所示,设置隐藏 i 权限后拒绝一切操作,仅能查看文件内容!!!(等同于给文件上锁,企业中比较常用)
2、特殊权限位SUID & SBID
① 针对文件设置SUID权限,设置此特殊权限后,所有者的执行权限字符用s或S表示(不用x或-表示),会让此文件的执行者临时获取到文件所有者的权限来完成某些工作。
举例/etc/shadow
文件保存的是用户的密码信息,我们发现用户没有此文件的权限,但是可以通过passwd修改密码, 这个是怎么做到的呢?没错,这就是SUID的应用。
② 针对文件设置SBID权限,设置此特殊权限后,文件的其它用户的执行权限为t或T(不用x或-表示,t和T的区别类似SUID) SBID可以称为保护位或粘滞位。但是root不受特殊权限的控制,即root可以删除任何用户创建的文件。/tmp
目录就是一个非常实用的例子。
危险警告
SUID必须且只能是设置在二进制的可执行文件、脚本上,无法设置到目录上。同时因为SUID赋予用户使用命令时具有root同等权限的能力,等同于普通用户摇身一变成为系统超级管理员,这会对文件系统造成非常大的安全隐患!企业操作中一定要针对性的谨慎的使用!!!
生活属于自己的感觉,不属于别人的看法。
——余华