请查看输出:
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
无法被其他用户访问,因为你的主目录对“其他”没有读取或执行权限。