仅允许对目录使用 ls

仅允许对目录使用 ls

如何设置文件夹的权限,以便所有不在我的组中的用户只能对其执行 ls 操作?我不明白 - 和 r 之间的区别。

答案1

重要的标志是目录上的“执行”标志,在目录上它实际上是一个“可遍历”标志。如果没有设置,则目录不能在路径中使用。因此:1) 您不能通过 CD 转到该目录,2) 您不能使用目录中的文件。

让我们使用目录和文件设置 test ritg

>>mkdir listonly
>>touch listonly/uselessfile

到目前为止,一切都很好:

>>ls listonly/
uselessfile

更改目录的可执行标志:

>>chmod -x listonly

您不能再通过 CD 访问它:

>>cd listonly
bash: cd: listonly: Permission denied

使用时ls可以看到文件:

>>ls listonly/
uselessfile

然而,在许多情况下ls,使用别名来添加一些需要查看每个文件的元数据(标志、时间戳、大小...)的选项,这是它无法做到的,因为这需要在路径中使用目录(对我来说是ls --color=auto')所以你必须使用普通格式ls,否则你会得到一个文件,但会出现难看的错误:

>>ls listonly/
ls: cannot access 'listonly/uselessfile': Permission denied
uselessfile

请注意,文件浏览器通常会将其工作目录更改为目标目录以列出其内容,因此这可能无法在 GUI 界面上正常运行。

答案2

例子:

#change current directory to /tmp/
vodka@vodka-PC:~$ cd /tmp/

#create my_folder directory in tmp
vodka@vodka-PC:/tmp$ mkdir my_folder

#chnage directory permissions to 775 
(all people can show dir content and make cd, 
but can not remove or create new files)
vodka@vodka-PC:/tmp$ chmod 775 my_folder/

#check permissions
vodka@vodka-PC:/tmp$ ls -ld my_folder
drwxrwxr-x 2 vodka vodka 4096 окт 20 11:26 my_folder

#create new test file
nano ./my_folder/test_file.txt

#chage file permission to 770 (only owner and member of groups can show file content and modify it)
vodka@vodka-PC:/tmp$ chmod 770 ./my_folder/test_file.txt

#test it. Switch to postgres user and show dir content. We see files in directory
vodka@vodka-PC:/tmp$ sudo su - postgres
postgres@vodka-PC:~$ ls -l /tmp/my_folder/
-rwxrwx--- 1 vodka vodka 4 окт 20 11:27 test_file.txt
#try to show file content, remove or create new files in dir
cat: /tmp/my_folder/test_file.txt: Permission denied
postgres@vodka-PC:~$ >/tmp/my_folder/test_file_2.txt
-bash: /tmp/my_folder/test_file_2.txt: Permission denied
postgres@vodka-PC:~$ rm /tmp/my_folder/test_file.txt
rm: remove write-protected regular file '/tmp/my_folder/test_file.txt'? y
rm: cannot remove '/tmp/my_folder/test_file.txt': Permission denied

因此,其他用户只能显示文件列表。

相关内容