我在为特定用户设置权限时遇到问题。
我有一个目录/srv/git/
其中我正在创build一个包含一个文件testfile
(由www:www-data
拥有)的子目录test
。 testfile
应该只能由用户和组以及其他人读写。
[root@bartplatak ~]# cd /srv/git [root@bartplatak git]# mkdir test && touch test/testfile [root@bartplatak git]# chown -R www:www-data test [root@bartplatak git]# chmod o= test/testfile [root@bartplatak git]# chmod -R ug=rw test [root@bartplatak git]# sync [root@bartplatak git]# su www
然而,由于某些未知的原因,我不能cd
进入目录(并列出它显示非常不完整的信息)
bash-4.1$ pwd /srv/git bash-4.1$ ls -la test ls: cannot access test/.: Permission denied ls: cannot access test/testfile: Permission denied ls: cannot access test/..: Permission denied total 0 d????????? ? ? ? ? ? . d????????? ? ? ? ? ? .. -????????? ? ? ? ? ? testfile bash-4.1$ cd test bash: cd: test: Permission denied
什么让我觉得奇怪的是,尽pipe可以访问尽pipe可以显示不完整的信息( drwxr-xr-x 6 root root 4096 Mar 1 19:02 .
)。
编辑 :我运行这个机器是与CentOS release 6.5 (Final)
的VPS。
Linux bartplatak.com 2.6.32-042stab078.28 #1 SMP Mon Jul 8 10:17:22 MSK 2013 x86_64 x86_64 x86_64 GNU/Linux
SELinux是(据我所知)被禁用
[root@bartplatak ~]# sestatus SELinux status: disabled
目录(和父母)的权限设置为
drwxr-xr-x 6 root root 4096 Mar 1 19:02 / drwxr-xr-x 5 root root 4096 Mar 1 14:16 /srv drwxr-xr-x 6 root root 4096 Mar 1 19:02 /srv/git drw-rw-rx 2 www www-data 4096 Mar 1 19:02 /srv/git/test -rw-rw---- 1 www www-data 0 Mar 1 19:02 /srv/git/test/testfile [root@bartplatak git]# stat /srv/git/test File: `/srv/git/test' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 5ae0b691h/1524676241d Inode: 404068 Links: 2 Access: (0665/drw-rw-rx) Uid: ( 497/ www) Gid: ( 496/www-data) [root@bartplatak git]# stat /srv/git/test/testfile File: `/srv/git/test/testfile' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 5ae0b691h/1524676241d Inode: 404071 Links: 1 Access: (0660/-rw-rw----) Uid: ( 497/ www) Gid: ( 496/www-data)
在su www
, id
显示uid=497(www) gid=497(www) groups=497(www),496(www-data)
显而易见的问题是/srv/git/test
没有为owner和group设置可执行的x
位。 因此不可能遍历目录 。
解决这个问题:
chmod ug+x /srv/git/test