在linux系统中我们有很多权限,我们可以简单查看一下任意一个文件夹下的文件的权限:
我们可以看见,上图中第一列中我们的文件和文件夹都有相应的权限,那我们来看看文件和文件夹的权限:
首先我们要说一下,无论是文件还是文件夹第一列中都有十列权限,这十列中的含义如下:
第一列表示文件类型,我们可以看到,上图中第一列有d,有-,如果是d,则代表这个文件是个文件夹,如果是-,则代表这是个文件|(包括硬链接也被视为文件),如果是l,则代表它是软链接文件。还有一些不常用的比如b是块文件,c为字符文件,s为socket文件,p为管道文件等。
接着的九位分为三个一组共三组,分别为拥有者权限,所属组权限,其他用户权限,在linux中我们有用户和用户组的概念,比如我们上图中第三列的root或者zephyr代表的就是用户名,即这个文件属于哪个用户,后面第四列的是所属组名,表示这个用户的所属组。那么九位中的前三位,也就是第2-4位,它表示的是文件所有者的权限,如果是-,则代表这一位没有值。其中r代表读权限,w代表写权限,x代表执行权限。九位中的中间三位,也就是5-7位,表示的是文件所属组的权限。九位中的后三位,也就是8-10位,表示的是其他人的权限。
rwx就对应着二进制的111,r–就对应着二进制的100,然后我们把它换算成十进制,rwx即111就是7,r–即100就是4。我们可以通过chmod命令来改变文件的权限。格式如下:
chmod 777(想要什么权限就设置成什么) 文件名
但是要注意,这些权限对root用户都无效,root用户对任何文件都可以操作。
对于文件:
r代表着查看文件内容的权限,w代表着修改文件内容的权限,x代表着执行文件的权限。
另外,文件还有两个权限:SUID和SGID权限。
带有SUID权限的文件,当有人运行这个程序的时候,它会自动切换到文件所有者的权限,比如我们常用的sudo命令,在/bin目录下,sudo这个文件就有SUID权限:
如下图,如果一个文件没有可执行权限,它就会变成绿色,如果加上s权限,就会变成红底白字。
带有SUID权限的文件,表示为第四位是s,如果这个文件没有执行权限,那这个s就会变成S,作为文件的所有者,无法执行这个文件,但是作为root用户或者其他用户,依然可以执行这个文件。
另外,文件还有SGID权限,它使文件被执行时切换到所属组的权限。
上面用到的是字母的方法加权限,我们还可以用数字的方法加SUID和SGID权限,如下图:
我们在加权限的时候,使用四位权限,即往前面加一个数字就可以赋予它SUID(加4)或者SGID(加2)权限了。
对于目录
对于目录,r代表是否能够浏览文件列表,w代表是否可以创建与删除文件,x代表是否能够进入这个目录(如使用cd命令进入目录)。但是要注意的一点是,如果这个目录属于用户1,那么对于用户2在里面创建的文件,无论用户1是否对这个文件有权限,有什么权限,用户1都可以删除这个文件。即若用户1有一个目录,那么对于其中所有的文件,用户1都可以删除它。借用《鸟哥的linux私房菜》的一句话:假如你有一个抽屉(目录),那么别人在你的抽屉里放了一本加锁的日记(文件),你没有钥匙,所以你不能查看日记(文件)的内容,但是抽屉(目录)是你的,你可以把日记(文件)扔到垃圾箱中。我们试一下:
我们在一个zephyr用户的目录下创建了一个root用户的a文件,然后我们甚至无法查看文件内容:
但是它在zephyr用户的文件夹里,我们就可以删除它:
除此之外,目录还有STICKY权限,加上这个权限的目录,里面的文件只能被文件的所有者、文件夹的所有者和root用户删除、移动、改名。