在 Linux 中对文件有写入权限但没有读取权限

在 Linux 中对文件有写入权限但没有读取权限

在 Linux 中,是否可以对文件具有写入权限但没有读取权限? 如果执行权限但没有读写权限怎么办?

答案1

是的,尽管对于非二进制文件来说,执行权限而没有读取权限是没有意义的(因为您需要读取脚本才能执行它)。对于目录,执行而没有读取意味着您可以遍历目录,但不能列出它或对其内容执行任何其他操作。考虑以下路径:

/home/user/foo/bar

如果目录foo具有模式 0711(所有者拥有完全权限,仅对组和世界执行),而目录bar具有模式 0755(所有者拥有完全权限,其他所有人都拥有读取和执行权限),则除usermaycd /home/user/foo/bar和 find 之外的帐户的bar行为与任何普通目录一样;但是,whilecd /home/user/foo可以正常工作,ls而该目录中的任何其他命令都将由于权限不足而失败(即,您无法读取目录以列出其内容)。

文件的写入权限没有读取权限,其含义就是:您可以写入文件,但无法读取已写入的内容。当多个帐户下的进程写入单个日志文件时,这可能很有用,但属于一个用户的进程不能读取属于另一个用户的进程的(可能敏感的)日志条目。

答案2

[benji@laptop ~]$ ./hello
Hello world!
[benji@laptop ~]$ chmod 000 hello #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello #make it executable
[benji@laptop ~]$ cat hello #try to read it, but can't
cat: hello: Permission denied
[benji@laptop ~]$ ./hello #try to run it, it works!
Hello world!
[benji@laptop ~]$

[benji@laptop ~]$ cat hello.sh
#!/usr/bin/bash
echo 'Hello world!'
[benji@laptop ~]$ chmod 000 hello.sh #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello.sh #make it executable
[benji@laptop ~]$ cat hello.sh #try to read it; FAIL
cat: hello.sh: Permission denied
[benji@laptop ~]$ ./hello.sh #try to run it, but the shell interpreter (bash) cannot read it; FAIL
/usr/bin/bash: ./hello.sh: Permission denied
[benji@laptop ~]$ 

仅当文件不是 shell 脚本时才可能具有仅执行权限;shell 脚本需要由 shell 解释器读取(因此需要读取权限)。否则,对于二进制可执行文件,不需要读取权限;只需执行权限。

[benji@laptop ~]$ echo hello >file
[benji@laptop ~]$ chmod 000 file #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +w file #write-only permissions
[benji@laptop ~]$ cat file #cannot read it
cat: file: Permission denied
[benji@laptop ~]$ echo hello again >file #but *can* write it

因此是的,有可能对文件具有写入权限但没有读取权限。

答案3

Unix 中的读、写、执行权限通常是完全独立的。

Unix 区分用户权限(针对文件所有者)、组权限(针对属于文件组的任何用户)和其他权限。权限严格按照此顺序检查;即,如果用户尝试访问,则应用用户权限,不检查其他权限;如果不是用户但属于组,则应用组权限;如果以上都不是,则应用其他权限。

ls(1)权限以rwx三次 (用户、组、其他人)表示。因此r--表示只读,rw-是读写,并且--x是只执行。该命令chown(1)通常输入八进制数来提供权限,但您也可以使用上述符号,即表示chown u+r,g-x,o=rw somefiler为用户添加、x为组减去、设置rw精确地为其他人添加”。

答案4

接近 chmod 的一种方法是使用 chmod math,其中 read=4 write=2 execute=1。您想要的数字的定位按 U=user G=group O=Others 的顺序进行,命令“chmod UGO”将设置权限。

如果你想用户要拥有完全权限,则将是读取(4)+写入(2)+执行(1)=7

如果你想团体读取并执行它将是 read(4)+execute(1)=5

如果你想其他无法访问则为 0

设置这些权限的命令是:chmod 750 file

相关内容