为什么我无法读取文件?

为什么我无法读取文件?

请查看输出:

deploy@li445-201:~$ sudo ls -al /var/log/nginx/
total 152
drw-rw-r--  2 root     adm      4096 Mar 26 16:08 .
drwxrwxr-x 14 root     syslog   4096 Mar 26 06:25 ..
-rw-r--r--  1 root     root        0 Mar 26 16:08 access.log
-rwxrwxrwx  1 www-data adm    108849 Mar 26 06:10 access.log.1
-rw-rw-r--  1 www-data adm     14206 Mar 25 06:17 access.log.2.gz
-rw-rw-r--  1 www-data adm     14067 Mar 24 05:31 access.log.3.gz
-rw-r--r--  1 root     root        0 Mar 26 16:08 error.log
-rw-rw-r--  1 www-data adm      2522 Mar 24 17:13 error.log.1

我尝试通过部署用户读取日志文件:

deploy@li445-201:~$ cat /var/log/nginx/access.log.1
cat: /var/log/nginx/access.log.1: Permission denied

为什么我无法读取日志文件?我甚至为其设置了 777 权限

答案1

文件的权限表明任何用户都应该能够读取、写入或执行该文件。但是,该文件所在的目录限制了这种访问。

drw-rw-r--  2 root     adm      4096 Mar 26 16:08 .
# ^ /var/log/nginx 'bad'
drwxrwxr-x 14 root     syslog   4096 Mar 26 06:25 ..
# ^ /var/log 'good'

为了让用户能够列出目录中的文件,您需要读取和执行权限。有一个很好的解释说明为什么您需要执行位您可以在此处阅读。您需要能够访问 inode,这就是要求的来源。我一直以为您可以读取文件但不能列出目录,但似乎在大多数情况下您需要执行位才能读取文件。

而且这种基于目录的限制一直延伸到/。这就是为什么目录中的 777 文件/home/$USER无法被其他用户访问,因为你的主目录对“其他”没有读取或执行权限。

相关内容