常见的文件类型
-
在Linux系统中,文件类型常见的有以下几种: 1. 普通文件(Regular File):普通文件是指存储数据的文件,如文本文件、二进制文件、图像文件等。 2. 目录文件(Directory File):目录文件是指存储其他文件或目录的文件,它作为文件系统的目录结构的一部分。 3. 符号链接文件(Symbolic Link File):符号链接文件是指一个指向其他文件或目录的文件,类似于Windows系统中的快捷方式。 4. 设备文件(Device File):设备文件是指与计算机硬件设备相对应的文件,它允许应用程序通过文件系统来访问设备资源。设备文件分为字符设备文件和块设备文件两种类型。 5. 套接字文件(Socket File):套接字文件是指允许应用程序之间通信的文件,它们可用于在同一台计算机上或网络上的不同计算机之间进行进程间通信。 6. 管道文件(FIFO or Named Pipe File):管道文件也被称为命名管道文件,它是一种可以在进程间传递数据的特殊类型的文件,位于文件系统中。
在命令行中,可以使用file
命令来查看一个文件类型,例如:file /path/to/file
。
常见的文件类型:普通文件-,目录文件d,链接文件l,管道文件p,块设备文件b,字符设备文件c
Linux文件系统中每个文件和目录都有所谓的权限和归属。文件权限分为读(r)、写(w)和执行(x)三种权限。归属包括文件或目录所有者,所属群组以及其他用户。
文件权限和归属可以通过命令ls -l
查看,输出中会显示文件的详细信息,如下所示:
-rw-r--r-- 1 user user 12345 May 20 10:30 example.txt
上面的example.txt
文件的权限为-rw-r--r--
,所属用户为user
,所属组也为user
。
读权限(r)使得用户可以读取文件中的内容。写权限(w)允许用户编辑文件并保存更改。执行权限(x)允许用户执行文件作为脚本或程序。
归属指定了文件的所有者和所属组。在Linux中,每个用户都属于至少一个组。文件权限的组部分指定该组的访问权限。其他用户部分指定了其他所有用户的访问权限。
文件权限和归属可以使用命令chmod
和chown
进行更改。例如,命令chmod u+x example.txt
将给当前用户添加执行权限。命令chown user:group example.txt
将把文件所有者更改为user
,并把所属组更改为group
。
文件 | 目录 | |
---|---|---|
r | cat | ls |
w | vim | touch |
x | ./script | cd |
文件最大权限 7777 -rwsrwsrwt-
SUID
临时拥有属主的权限
suid(Set User ID)是一种特殊权限标记,用于在执行程序时提供该程序的所有者的权限。如果将SUID标记设置在一个可执行文件上,那么该文件将始终使用文件所有者的权限运行,而不是当前用户的权限。
通常情况下,只有系统管理员才会使用SUID标记。因为使用SUID标记的程序可能会执行需要root权限的操作,如果不小心编写可能会导致系统安全问题。
对于SUID标记的文件,使用ls -l
命令可以看到文件权限中的“s”字母,它替换了文件的执行权限。例如,一个具有SUID标记的可执行文件会显示为-rwsr-xr-x,其中文件所有者的执行权限由“x”更改为“s”。
要设置一个文件的SUID标记,可以使用chmod u+s
命令。示例如下:
chmod u+s /path/to/file
取消SUID标记可以使用chmod u-s
命令。示例如下:
chmod u-s /path/to/file
请注意,SUID标记也可以应用在目录上,这会使得在该目录下创建的所有文件都具有目录所有者的权限。但是,在实践中,这种设置很少使用。
SGID
临时拥有属组的权限
sgid(Set Group ID)是一种特殊权限标记,用于在执行程序时提供一个与文件所有者不同的组的权限。通过设置sgid标记,可以确保在同一组中的用户之间共享文件,并且它们可以相互执行,即使其中一些用户不是文件所有者。
对于sgid标记的文件,使用ls -l
命令可以看到文件权限中的“s”字母,它替换了文件所属组的执行权限。例如,一个具有sgid标记的可执行文件会显示为-rwxr-sr-x,其中文件所属组的执行权限由“x”更改为“s”。
要设置一个文件的sgid标记,可以使用chmod g+s
命令。示例如下:
chmod g+s /path/to/file
取消sgid标记可以使用chmod g-s
命令。示例如下:
chmod g-s /path/to/file
需要注意的是,在大多数情况下,sgid标记只对目录有用。当在一个目录上设置sgid标记时,新创建的文件将会继承该目录的组所有权,并且将允许组中的其他成员访问该文件。
特殊权限
SUID 4
-
可以对二进制程序进行设置的一种特殊权限,能够让二进制文件的执行者临时具有属主的权限
-
设置suid权限
chmod u+s 文件
-
取消suid权限
chmod u-s 文件
-
rw---x--- 该目录中没有可执行权限
-
rwS--x--- 该目录中有可执行权限
SGID 2
-
一般应用在目录上,当一个目录拥有sgid权限时,任何用户在该目录下创建的文件的属组都会继承该目录的属组
-
设置sgid权限
chmod g+s 文件
-
设置sgid权限
chmod g-s 文件
-
rws--S--- 该目录中没有可执行权限
-
rws--S--- 该目录中有可执行权限
SBIT 1
-
粘滞位 防止文件被篡改,目录下的文件只有属主本身可以删除
-
设置sbit权限
chmod o+t 文件
-
设置sbit权限
chmod o-t 文件
-
rws--x--t 该目录中没有可执行文件
-
rws--x--T 该目录中有可执行文件
-
rwxr-xr-t=rwx "+" r-x "+" SBIT =1755
-
rwsrwSr-- 6764
setfacl 隐藏权限
在Linux系统中,可以使用chmod命令来设置文件或目录的访问控制权限。文件或目录的权限包括三种类型:读、写、执行,即r、w和x。通常情况下,权限设置为公有权限,表示文件或目录的权限是公开的,所有用户都可以使用和操作。但是,有时候需要将文件或目录的权限设置为隐藏权限,只允许特定用户或特定用户组访问和操作。
在Linux中,可以使用setfacl命令来为文件或目录设置ACL(访问控制列表)以实现隐藏权限。ACL是一种更高级别的权限控制,可以精确地控制文件或目录的访问和操作权限。使用setfacl命令可以为文件或目录中指定的用户或用户组设置ACL,并指定哪些权限可以赋予给它们。
例如,假设我们要为目录/home/user1/mydir
设置隐藏权限,只允许用户user2
访问和操作该目录。可以使用以下命令来完成此操作:
setfacl -m user:user2:rwx /home/user1/mydir
上面的命令将针对目录/home/user1/mydir
设置ACL,并授予用户user2
读、写、执行权限。这意味着只有用户user2
才能访问和操作该目录。
要删除ACL并将目录恢复为默认公有权限,可以使用以下命令:
setfacl -b /home/user1/mydir
这将删除目录/home/user1/mydir
的ACL,并将其恢复为默认权限配置。
需要注意的是,setfacl命令需要使用root权限才能执行,因为ACL可能包含系统关键文件和目录的访问控制策略。