如何设置文件夹的权限,以便所有不在我的组中的用户只能对其执行 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
因此,其他用户只能显示文件列表。