在 Linux 中,是否可以对文件具有写入权限但没有读取权限? 如果执行权限但没有读写权限怎么办?
答案1
是的,尽管对于非二进制文件来说,执行权限而没有读取权限是没有意义的(因为您需要读取脚本才能执行它)。对于目录,执行而没有读取意味着您可以遍历目录,但不能列出它或对其内容执行任何其他操作。考虑以下路径:
/home/user/foo/bar
如果目录foo
具有模式 0711(所有者拥有完全权限,仅对组和世界执行),而目录bar
具有模式 0755(所有者拥有完全权限,其他所有人都拥有读取和执行权限),则除user
maycd /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 somefile
“r
为用户添加、x
为组减去、设置r
并w
精确地为其他人添加”。
答案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