Linux系统是一种多用户操作系统,因此它提供了多种权限控制来保护文件和系统资源免受未经授权的访问。在Linux中,每个文件和目录都有一个所有者和一组权限。这些权限确定了哪些用户或组可以访问文件或目录以及可以执行哪些操作。下面是关于Linux权限的详细解答:
权限类型
在Linux中,权限被分为三个类型:读、写和执行。
读权限:允许用户读取文件或目录的内容,查看文件的属性信息。
写权限:允许用户修改文件或目录,删除文件或目录,创建、删除、移动或重命名目录中的文件。
执行权限:允许用户运行文件,例如可执行文件、脚本文件。
权限符号
在Linux中,权限用符号表示。每个文件或目录的权限由三个字符组成,分别表示所有者、所有者所在组和其他用户的权限。每个字符可以是下列符号之一:
r(读权限):表示有读取文件或目录内容的权限。
w(写权限):表示有写入文件或目录内容的权限。
x(执行权限):表示有执行文件或目录的权限。
-(无权限):表示没有相应的权限。
比如下图使用 ll / 命令可以看到包括权限的文件详细信息
每一行代表对应文件或目录的详细信息。从左到右具体的含义是文件属性、文件数、拥有者、所属的
组、文件大小、建立月份、建立日期、建立年份或时间、以及文件名。其中“建立年份或时间”字段,如
果文件是今年建立的,则显示具体时间,如果是往年建立的,则显示年份。
文件属性组成
文件属性由10个字母组成,其中第一个字母表示文件类型,后九个字母分为三组,表示文件的访问权
限。
文件属性的第一个字母是类型标识,用来说明文件的类型。在Linux操作系统中,共有七种文件类型,
分别是:
d (directory) 目录文件。
l (link) 符号链接。
s (socket) 套接字文件。
b (block)块设备文件,二进制文件。
c (character)字符设备文件。
p (pipe) 命名管道文件。
-普通文件,或者更准确地说,不属于以上几种类型的文件。
改变权限
可以使用chmod命令来改变文件或目录的权限。命令的基本语法为:
chmod [选项] mode file
其中,mode指定了新的权限,可以使用符号或数字表示。使用符号表示权限时,需要指定哪些权限要添加或删除,使用以下符号:
+(添加权限):添加指定的权限。
-(删除权限):删除指定的权限。
=(设置权限):设置指定的权限,删除其他权限。
使用数字表示权限时,每种权限有一个对应的数字值:
r(读权限):4
w(写权限):2
x(执行权限):1
因此,可读、可写、可执行的权限值之和为7,可读、可执行的权限值之和为5,只有读权限的值为4,只有写权限的值为2,只有执行权限的值为1。
例如,要将文件的权限设置为“-rwxr-xr--”,可以使用以下命令:
chmod 754 file
其中,7表示所有者有读、写、执行权限,5表示所有者所在组有读、执行权限,4表示其他用户只有读权限。
改变所有者和所在组
可以使用chown和chgrp命令来改变文件或目录的所有者和所在组。命令的基本语法为:
chown [选项] user file
chgrp [选项] group file或者:
chown [选项] user.group file
chown [选项] user:group file
其中
user指定新的所有者,可以使用用户名或用户ID表示。group指定新的所在组,可以使用组名或组ID表示。使用选项可以指定更多的参数,例如:
-R:递归更改目录和其子目录中的所有文件的所有者或所在组。
-v:显示更改的详细信息。
例如,要将文件file的所有者更改为user1,所在组更改为group1,可以使用以下命令:
chown user1:group1 file
如果要递归更改目录dir及其子目录中的所有文件的所有者和所在组,可以使用以下命令:
chown -R user1:group1 dir
suid和sgid权限
在Linux中,还有两种特殊权限:suid和sgid权限。这些权限允许在执行文件时暂时改变执行者的权限。
suid权限:当一个文件被设置为suid权限时,它的所有者权限将被授予执行者的权限,而不是执行者本身的权限。这对于需要执行某些特定任务的程序非常有用,例如管理员程序。
sgid权限:当一个目录被设置为sgid权限时,任何在该目录下创建的文件或目录的所在组将被设置为该目录的所在组,而不是创建者的所在组。这对于共享目录或文件夹非常有用。
可以使用chmod命令来设置suid和sgid权限。suid权限用数字4表示,sgid权限用数字2表示。例如,要将文件file设置为suid权限,可以使用以下命令:
chmod 4755 file
其中,4表示suid权限,7表示所有者有读、写、执行权限,5表示所有者所在组有读、执行权限,5表示其他用户只有读、执行权限。
umask权限
在Linux中,umask是一个掩码,用于确定新创建的文件或目录的默认权限。umask值通常设置为022或002,这意味着新创建的文件或目录将具有默认权限755或775。可以使用umask命令来显示或更改当前umask值。
例如,要将umask值设置为002,可以使用以下命令:
umask 002
ACL权限
除了基本权限之外,在Linux中还有ACL(访问控制列表)权限,可以更精细地控制文件和目录的访问权限。ACL权限允许管理员向文件或目录添加一个或多个附加的用户或组,并指定每个用户或组的权限。
可以使用setfacl和getfacl命令来设置和获取ACL权限。例如,要为文件file添加一个名为user1的用户,并给他读取和写入权限,可以使用以下命令:
setfacl -m u:user1:rw file
其中,-m选项表示修改ACL权限,u表示用户,user1是用户名,rw表示读取和写入权限。
要查看
文件或目录的ACL权限,可以使用以下命令:
getfacl file
此命令将显示文件或目录的当前ACL权限。
总结:
在Linux中,文件和目录的权限控制是非常重要的。基本权限包括读、写和执行权限,可以使用chmod命令来设置。chown命令用于更改文件或目录的所有者和所在组。suid和sgid权限允许在执行文件时暂时改变执行者的权限。umask权限用于确定新创建的文件或目录的默认权限。ACL权限允许更精细地控制文件和目录的访问权限。