拒绝对用户拥有的目录授予权限

拒绝对用户拥有的目录授予权限

我有类似的问题这里,因为用户无法访问他们拥有的目录的内容。快速搜索显示了很多其他类似的问题,但问题似乎总是目录上的执行位未设置。也许我因为盯着这个问题看了这么久而错过了什么,但这似乎不是我的问题。

与其他问题一样,可能更容易证明的是:

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

相关内容