我有类似的问题这里,因为用户无法访问他们拥有的目录的内容。快速搜索显示了很多其他类似的问题,但问题似乎总是目录上的执行位未设置。也许我因为盯着这个问题看了这么久而错过了什么,但这似乎不是我的问题。
与其他问题一样,可能更容易证明的是:
me@docker-host:~$ docker exec -it sp-rsync-1 bash
root@sp-rsync-syn-send:/# su --login sync_user
sync_user@sp-rsync-syn-send:~$ ls -al
total 24
drwxr-xr-x 6 sync_user sync_user 4096 Feb 9 20:24 .
drwxr-xr-x 6 root root 4096 Feb 9 20:24 ..
-rw-r--r-- 1 sync_user sync_user 220 Apr 9 2014 .bash_logout
-rw-r--r-- 1 sync_user sync_user 3637 Apr 9 2014 .bashrc
-rw-r--r-- 1 sync_user sync_user 675 Apr 9 2014 .profile
drwx------ 2 sync_user sync_user 4096 Feb 9 20:24 .ssh
如您所见,.ssh 目录的所有者是具有sync_user
权限0700
的。但是:
sync_user@sp-rsync-syn-send:~$ ls -al .ssh/
ls: cannot open directory .ssh/: Permission denied
但看起来该用户拥有该目录:
sync_user@sp-rsync-syn-send:~$ chmod 0777 .ssh
sync_user@sp-rsync-syn-send:~$ ls -al
total 28
drwxr-xr-x 7 sync_user sync_user 4096 Feb 9 21:23 .
drwxr-xr-x 7 root root 4096 Feb 9 21:05 ..
-rw------- 1 sync_user sync_user 58 Feb 9 21:05 .bash_history
-rw-r--r-- 1 sync_user sync_user 220 Apr 9 2014 .bash_logout
-rw-r--r-- 1 sync_user sync_user 3637 Apr 9 2014 .bashrc
-rw-r--r-- 1 sync_user sync_user 675 Apr 9 2014 .profile
drwxrwxrwx 2 sync_user sync_user 4096 Feb 9 20:24 .ssh
这没什么帮助:
sync_user@sp-rsync-syn-send:~$ ls -al .ssh/
ls: cannot open directory .ssh/: Permission denied
了解更多信息:
sync_user@sp-rsync-syn-send:~$ ls -ain
total 24
885 drwxr-xr-x 6 1200 1200 4096 Feb 9 20:24 .
852 drwxr-xr-x 6 0 0 4096 Feb 9 20:24 ..
905 -rw-r--r-- 1 1200 1200 220 Apr 9 2014 .bash_logout
890 -rw-r--r-- 1 1200 1200 3637 Apr 9 2014 .bashrc
889 -rw-r--r-- 1 1200 1200 675 Apr 9 2014 .profile
904 drwx------ 2 1200 1200 4096 Feb 9 20:24 .ssh
sync_user@sp-rsync-syn-send:~$ id sync_user
uid=1200(sync_user) gid=1200(sync_user) groups=1200(sync_user)
回到根目录并列出目录权限:
root@sp-rsync-syn-send:/# ls -ail /home/sync_user/.ssh/
total 16
904 drwx------ 2 sync_user sync_user 4096 Feb 9 20:24 .
885 drwxr-xr-x 6 sync_user sync_user 4096 Feb 9 21:05 ..
917 -rw------- 1 sync_user sync_user 394 Feb 9 18:51 authorized_keys
916 -rw------- 1 sync_user sync_user 1679 Feb 9 18:51 id_rsa
/home
此外,和的权限为/
0755,其中 root 为所有者和组。
root@sp-rsync-syn-send:/# ls -al /home
total 12
drwxr-xr-x 7 root root 4096 Feb 9 21:05 .
drwxr-xr-x 88 root root 4096 Feb 9 21:17 ..
进一步了解背景信息后,该用户已作为构建过程的一部分在 docker 容器中创建,因此我怀疑这要么与我如何起诉该用户有关(因此明确使用)su --login
,要么这可能是 AUFS 文件系统的问题。
更新
只是为了证明我是在正确的地方:
sync_user@sp-rsync-syn-send:~$ pwd
/home/sync_user
2016 年 2 月 19 日更新
我不认为这算是一个解决方案,因为我回避了最初的问题,所以我不会把它作为答案发布。对我来说,我不再使用 mkdir 注释明确创建 .ssh 目录,而是通过将 .ssh 放入 /etc/skel 来设置它的创建。
Richard 在下面的评论中指出,AUFS 文件系统中存在一个 Docker 错误,我认为这很可能是导致此问题的原因;不幸的是,我没有时间进一步研究它的真正原因或是否有解决方案。
对于遇到此问题的其他人来说,可能有一些相关事实:Docker 版本:1.9.1