john@ubuntu01:~$ sudo ls -l /var/opt/gitlab/git-data/repositories/GL/www.git
total 25068
drwxr-xr-x 2 git git 4096 aug 14 19:58 branches
-rw-r--r-- 1 git git 66 aug 14 19:58 config
drwxrwxrwx 2 root root 4096 aug 15 14:56 custom_hooks
-rw-r--r-- 1 git git 73 aug 14 19:58 description
-rw-r--r-- 1 git git 23 aug 14 19:58 HEAD
lrwxrwxrwx 1 git git 47 aug 14 19:58 hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks
drwxr-xr-x 2 git git 4096 aug 14 19:58 hooks.old.1471193907
-rw-r--r-- 1 git git 1329 aug 15 14:48 index
drwxr-xr-x 2 git git 4096 aug 15 13:58 info
drwxr-xr-x 71 git git 4096 aug 15 14:55 objects
-rw-r--r-- 1 git git 98 aug 15 13:58 packed-refs
-rw-r--r-- 1 git git 25618530 aug 15 14:03 post-receive.log
drwxr-xr-x 5 git git 4096 aug 14 20:31 refs
john@ubuntu01:~$ ls -l /var/opt/gitlab/git-data/repositories/GL/www.git
ls: cannot access '/var/opt/gitlab/git-data/repositories/GL/www.git': Permission denied
以下是 ACL
john@ubuntu01:~$ sudo lsattr /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks
-------------e-- /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks/post-receive
我以前从未见过这种情况。即使有 777 也没有权限访问 LS?我需要共享此文件夹以便更方便地进行开发。我该如何解决?谢谢。
已编辑:(这是您的请求)
john@ubuntu01:~$ sudo ls -ld /var/opt/gitlab/git-data/repositories/GL/www.git
drwxrwxrwx 8 git git 4096 aug 15 14:48 /var/opt/gitlab/git-data/repositories/GL/www.git
john@ubuntu01:~$ sudo ls -ld /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks
drwxrwxrwx 2 root root 4096 aug 15 14:56 /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks
编辑更多
sudo ls -ld /var/opt/gitlab/git-data/repositories/GL/www.git
ls: cannot access '/var/opt/gitlab/git-data/repositories/GL/www.git': No such file or directory
嗯...这是什么?
答案1
发生这种情况的原因是,在目录树中有一个目录您没有执行权限。如果某个用户的父目录没有执行权限,那么该用户就无法访问任何子目录,无论这些子目录的权限如何。
例子:
$ ls -l cake
drwxr-xr-x 2 zanna zanna 4096 Jul 12 11:43 brownies
$ chmod 666 cake
$ ls -l cake/brownies
ls: cannot access 'cake/brownies': Permission Denied
尽管我是目录“brownies”的所有者,并且所有用户都有权读取和进入该目录,但如果其父目录没有执行权限,我就无法访问它。
最好使用群组管理权限比授予目录 777 权限要好。您确定需要这么做吗?
如何以更安全的方式解决问题:
我们假设/var/opt/gitlab
目录中有如下内容:
drwxr-x--- 5 git git 4096 aug 14 17:30 gitlab
将您自己和所有其他需要权限的用户添加到 git 组,例如:
sudo usermod -a -G john git
用户必须注销并重新登录才能使此操作生效。顺便说一句,即使子目录需要写入权限,您也不需要将其添加到父目录中,因此您根本不需要使用chmod
。您可能希望更改子目录权限以防止任何人能够写入它:
chmod 775 /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks
或者
chmod o-w /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks