Unix 限制用户仅列出目录中用户拥有的文件

Unix 限制用户仅列出目录中用户拥有的文件

我有一个目录/data和 3 个用户 - user1、user2、user3

每个用户都有一个文件夹/data

[root@localhost ~]# ls -lrt /data
total 64
drwx------.  2 root        root        16384 May 19  2017 lost+found
drwx------.  2 user1       user1        4096 Jun  7  2017 user1
drwx------.  3 user2       user2        4096 Jun 12  2017 user2
drwx------.  2 user3       user3        4096 Jul 16  2017 user3

我如何设置权限,以便当用户 1 登录并cd执行/datals -lrt可能通过winscp或任何随机 ftp/sftp 软件登录时,他们将能够仅列出“用户 1”目录,其余目录对他来说是不可见的。

例如。应该如下所示

[user1@localhost ~]$ ls -lrt /data
total ??
drwx------.  2 user1       user1        4096 Jun  7  2017 user1
[user1@localhost ~]$

答案1

这是不可能的。但是你可以将其他人对 /data 的权限设置为 --x ,这样他们只能(盲目地) cd 进入他们的目录,而根本看不到 /data 的内容:

# chmod 771 /data

答案2

在 Unix 中使用传统模式权限是不可能实现这一点的。这是因为需要具有读取目录的权限才能读取该目录的内容。

例子

我将使用该su命令来说明原因。我设置了 3 个用户帐户:user1、user2 和 user3。

$ su -c 'whoami' user1
user1
$ su -c 'whoami' user2
user2
$ su -c 'whoami' user3
user3

这是我的目录结构:

$ mkdir -p /data/user{1..3}
$ for i in {1..3};do chown user${i}:user${i} /data/user${i};done

$ ls -l /data/
total 12
drwxr-xr-x 2 user1 user1 4096 Jun 30 11:35 user1
drwxr-xr-x 2 user2 user2 4096 Jun 30 11:35 user2
drwxr-xr-x 2 user3 user3 4096 Jun 30 11:35 user3

如果我们设置权限,使得没有用户可以读取,/data那么没有用户可以执行ls -l /data.

$ chmod 750 /data

$ su -c 'ls -l /data' user1
ls: cannot open directory /data/: Permission denied

为了允许不是所有者(root)或组(root)的用户,我们必须r-x为任何人启用权限(即其他权限)。

如果我们只是启用r--权限,用户可以列出目录的某些方面,但无法获取目录中内容的权限等内容。

$ chmod 754 /data

$ su -c 'ls -l /data/' user1
ls: cannot access /data/user3: Permission denied
ls: cannot access /data/user2: Permission denied
ls: cannot access /data/user1: Permission denied
total 0
d????????? ? ? ? ?            ? user1
d????????? ? ? ? ?            ? user2
d????????? ? ? ? ?            ? user3

如果我们尝试授予用户仅执行权限,--x他们可以访问 的子目录,/data但无法执行 的任何内容列表/data

$ chmod 755 /data

$ su -c 'ls -l /data/' user1
total 12
drwxr-xr-x 2 user1 user1 4096 Jun 30 11:35 user1
drwxr-xr-x 2 user2 user2 4096 Jun 30 11:35 user2
drwxr-xr-x 2 user3 user3 4096 Jun 30 11:35 user3

ACL 怎么样?

在这里可以使用访问控制列表 (ACL) 吗?在调查这个问题时,我认为他们不能给你任何更好的东西。

在这里,我将 的权限重置为 750 /data,并将 user1 的 ACL 添加到/data--x

$ chmod 750 /data
$ setfacl -m u:user1:x /data

$ ls -ld /data
drwxr-x---+ 5 root root 4096 Jun 30 11:35 /data

我们的用户 user1 现在无法再访问/data

$ su -c 'ls -l /data' user1
ls: cannot open directory /data: Permission denied

但仍然可以看到子目录/data/user1

$ su -c 'ls -l /data/user1' user1
total 0    

这是对权限的影响setfacl

    $ getfacl /data
    # file: data
    # owner: root
    # group: root
    user::rwx
    user:user1:--x
    group::r-x
    mask::r-x
    other::---

有什么问题吗?

问题是,为了能够访问列出目录的内容,主要是/data用户需要r--权限才能执行此操作。我们无法明确给出其中的“部分”,在 Unix 模式权限的世界中,它要么全部,要么全无。

相关内容