在Linux学习中,经常会碰到关于文件权限的问题,再次给大家做一个小结。
首先,Linux文件中分为所属人,所属组,以及其他人三种类型。每一种类型分为三种基本权限:读权限(readable,用r表示),写权限(writeable,用w表示),执行权限(execute,用x表示)。
例如下图所示,
命令chown可以对所属人或所属组进行更改。格式:chown [所属人][:所属组] 目录或文件。
对于各个身份的读、写、执行权限,可以用命令chmod进行修改。
修改的方式1:使用字符。用u表示owner,g表示group,o表示others。用r、w、x表示读、写、执行权限。中间用=表示设置,+表示增加,-表示减少。
修改的方式2:使用数字。如果将各个位置的权限有则表示为1,没有则表示为0,则每一位对应一个二进制数字。具体对应关系如下。
r-- 对应 100,转化成十进制为4.
-w- 对应010,转化成十进制为2.
--x 对应001,转化成十进制为1.
由此可以将得出结论。0=---,1=--x,2=-w-,3=-wx,4=r--,5=r-x,6=rw-,7=rwx.
s权限。
1.suid
当对一个可执行的二进制文件作用了SUID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属人的权限。
将/usr/bin/cat文件拷贝到/vat/tmp下,用户caocao使用./cat testfile查看testfile里的内容,发现失败。
使用root用户将/var/tmp 下的cat文件赋予一个suid权限。
切换到caocao用户下,再次使用./cat testfile命令查看testfile文件里的内容,可以查看。由此可以看出,添加完suid权限后,caocao用户在执行/vat/tmp/cat二进制文件时,临时获得cat所属人的身份。
实际上,如果在所属组之中使用sgid权限,可以临时获得此所属组的身份,即:当对一个可执行的二进制文件作用了SGID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属组的权限。
以上是对二进制文件赋予s权限后的变化,如果对目录赋予sgid权限,任何对该目录有wx权限的用户在该目录下创建的文件及目录的所有属均为该目录的所有组。
然后切换到guanyu用户下,在testdir中创建文件。
sticky
-t权限。当对一个目录作用了sticky之后,该目录下的文件仅其所属人才能删除。(防止在一个目录下工作的人对别人的文件进行恶意删除)。
回到root目录下,将-t权限取消,再次删除,可以发现可以删除。
另外,suid,sgid,stick权限也可以使用数字的格式赋予或者取消权限。规则是在rwx权限前面添加一个数字,4代表suid,2代表sgid,1代表sticky权限,如果本来有x权限的话,为小写,否则为大写。
最后,为了防止root用户删除某些重要文件,可以使用如下命令进行设置。
lsattr 查看特定属性
chattr
+i 不能删除不能改
+a 不能删除,只能追加
至此,相信你对文件的权限有了更深一步的认识。