我有一个目录/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
执行/data
或ls -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 模式权限的世界中,它要么全部,要么全无。