即使没有任何权限,其他用户是否可以看到文件?

即使没有任何权限,其他用户是否可以看到文件?

如果我有一个文件具有 700 或 600 权限,其他用户可以看到该文件吗?当然,他们无法读取内容,但他们仍然能够看到它吗?存在(即使用命令查看它的文件名ls)?

另外,这是否受所在目录权限的影响?如果另一个用户对该目录有权限,他们是否仍可以查看/修改/删除该文件,即使他们没有该文件本身的权限?

答案1

要查看文件(不是其内容,只是文件本身),您需要对文件的父目录具有读取权限。没有“查看”权限。只要您可以读取目录,您就可以看到其中的所有文件。您是否可以修改文件或读取其内容取决于您是否对该目录具有执行权限(删除文件所需)。更详细地说:

  1. 如果你没有访问目录后,您可以看到其内容的名称,但看不到其特征(权限、所有者、创建日期等)。这是因为您需要读取权限才能读取该信息:

    $ ls -l
    total 4
    drw-rw-rw- 3 terdon terdon 4096 May  2 20:21 dir1
    $ ls -l dir1/
    ls: cannot access dir1/subdir1: Permission denied
    ls: cannot access dir1/file1: Permission denied
    total 0
    -????????? ? ? ? ?            ? file1
    d????????? ? ? ? ?            ? subdir1
    
  2. 如果你没有执行目录的权限,即使您具有该目录的读取权限,您也无法读取其内容,因为列出其内容需要您能够打开(“执行”)该目录:

    $ ls -l 
    total 4
    d-wx-wx-wx 3 terdon terdon 4096 May  2 20:21 dir1
    $ ls -l dir1/
    ls: cannot open directory dir1/: Permission denied
    
  3. 如果你没有访问目录,你可以看到它的文件,但不能删除/创建它们,即使你对文件有读/写权限。这是因为在目录中创建或删除文件涉及修改目录本身(因为您正在修改其内容)并且您需要写访问权限:

    $ ls -l
    total 4
    dr-xr-xr-x 3 terdon terdon 4096 May  2 20:21 dir1
    $ ls -l dir1/
    total 4
    -rwxrwxrwx 1 terdon terdon    0 May  2 20:21 file1
    drwxr-xr-x 3 terdon terdon 4096 May  2 20:19 subdir1
    $ rm dir1/file1 
    rm: cannot remove ‘dir1/file1’: Permission denied
    $ touch dir1/file2
    touch: cannot touch ‘dir1/file2’: Permission denied
    

第一步是访问文件所在的目录。如上所示,如果您没有父目录所需的权限,那么拥有文件的所有权限也是不够的。假设您拥有目录的完全访问权限,那么无论文件的权限如何,都可以看到该文件:

$ ls -l dir1/
total 0
---------- 1 bob bob 0 May  4 15:45 file1
$ cat dir1/file1 
cat: dir1/file1: Permission denied
$ echo "foo" > dir1/file1 
bash: dir1/file1: Permission denied

我对上述文件没有任何权限,但仍然可以看到它。我既不能编辑它,也不能读取它,但我可以看到它存在。但是,我可以删除它:

$ rm dir1/file1 
rm: remove write-protected regular empty file ‘dir1/file1’? y

这是因为我对父目录有写权限。因此我可以修改其内容,包括其中的任何文件。如果我从目录中删除写权限,那么我将无法删除该文件,如上所述。

因此,要对用户隐藏文件,您需要确保用户对文件的父目录没有读取权限。文件本身的权限无关紧要。

答案2

下面你可以看到我创建了一个测试文件夹,并将该文件夹的所有权更改为另一个用户。如果目录不属于我,我无法创建文件。同样,testuser我无法删除我的帐户拥有的测试文件。但正如你所见,如果用户可以运行sudo,则该用户可以更改文件夹的所有权,更改文件权限,从而查看和修改文件

$ mkdir tester
$ chown testuser:testuser tester/
chown: changing ownership of ‘tester/’: Operation not permitted

$ sudo chown testuser:testuser tester/                                 
[sudo] password for xieerqi: 

$ ls -l tester
total 0

$ touch tester/testfile                                                
touch: cannot touch ‘tester/testfile’: Permission denied

$ sudo chown xieerqi:xieerqi tester/                                   
$ touch tester/testfile                                                
$ chmod 700 tester/testfile
mksh: chmod: can't execute: Permission denied

$ sudo chmod 700 tester/testfile                                       
$ sudo su testuser

testuser@foo $ ls -l tester/testfile 
-rwx------ 1 xieerqi xieerqi 0 May  2 08:46 tester/testfile
testuser@foo $ rm tester/testfile
rm: remove write-protected regular empty file ‘tester/testfile’? 
testuser@foo $ ls -l tester/testfile 
-rwx------ 1 xieerqi xieerqi 0 May  2 08:46 tester/testfile

相关内容