Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。以下是关于Linux如何管理文件权限的详细说明。
一 基础权限管理
Linux系统中的文件权限分为三种:读(r)、写(w)和执行(x)。这些权限针对三类用户进行设置:文件拥有者(u)、文件所属组(g)和其他用户(o)。使用ls -l命令可以查看文件或目录的详细信息,包括权限。
例如,-rwxr-xr--表示文件拥有者具有读、写和执行权限,所属组用户具有读和执行权限,而其他用户只有读权限。
修改文件权限
使用chmod命令可以修改文件或目录的权限。
符号表示法
例如,chmod u+rwx file.txt表示给文件拥有者增加读、写和执行权限;chmod o-r file.txt表示移除其他用户的读权限。
八进制表示法
使用数字来表示权限,每种权限对应一个数字:r(4)、w(2)、x(1)。例如,chmod 644 file.txt表示给文件拥有者和所属组用户读和写权限,其他用户只有读权限。
修改文件拥有者和所属组
使用chown命令可以修改文件拥有者
使用chgrp命令可以修改文件所属组
例如,
chown user file.txt将文件拥有者修改为user;
chgrp group file.txt将文件所属组修改为group。
二 特殊权限管理
Linux系统还提供了一些特殊权限,可以进一步增强系统的安全性。
SetUID(SUID):当s标志出现在文件所有者的x权限上时,表示该文件具有SetUID权限。这意味着执行该文件的用户将临时获得文件所有者的权限。例如,/usr/bin/passwd程序具有SUID权限,允许普通用户修改自己的密码。
具体来说,SetUID的工作原理如下:当一个可执行文件被设置了SetUID权限后,任何用户在执行这个文件时,都会临时获得该文件拥有者的权限。这在某些情况下非常有用,比如一个需要访问系统资源的程序,普通用户通常没有权限直接访问这些资源,但通过SetUID,普通用户可以在执行该程序时临时获得足够的权限来完成特定任务。需要注意的是,SetUID权限如果被滥用,可能会带来安全风险,因此应该谨慎使用。
SetGID(SGID):当s标志出现在用户组的x权限上时,表示该文件或目录具有SetGID权限。对于文件来说,执行该文件的用户将获得文件所属组的权限;对于目录来说,新建的文件将继承目录的所属组。
Sticky Bit(SBIT):当t标志出现在其他用户的x权限上时,表示该目录具有Sticky Bit权限。这意味着只有文件拥有者和root用户可以删除或修改文件,即使其他用户对该目录具有写权限。
三 默认权限与umask
Linux系统在创建新文件或目录时,会根据umask值来设置默认权限。umask值表示需要屏蔽的权限位。例如,默认umask值为022,表示新创建的文件权限为644(666 - 022),新创建的目录权限为755(777 - 022)。
可以使用umask命令查看和设置umask值。例如,umask 027将umask值设置为027。
四 访问控制列表(ACL)
除了基本权限和特殊权限外,Linux系统还支持访问控制列表(ACL),可以对特定用户或用户组进行更细粒度的权限控制。
使用setfacl命令可以设置文件的ACL权限。
例如,setfacl -m u:user:rwx file.txt表示给用户user增加对file.txt文件的读、写和执行权限。
使用getfacl命令可以查看文件或目录的ACL权限。




