在Unix中,我可以拥有一个我无法读取的文件吗?

在Unix中,我可以拥有一个我无法读取的文件吗?

如果是这样,我该怎么办?

答案是肯定的,你可以取消你的文件的读取标志。 但作为一个所有者,你(和一个运行你的权利的程序)可以再次设置标志。 但是对于不能自动执行的程序,您可以通过这种方式禁止读取访问。

假设您的文件名为file_name ,请尝试

 chmod ar file_name 

这可能是不可能的(POSIX)。 但是,如果您运行的是Solaris 10或更新版本,则可以使用dtrace脚本来阻止用户持久地设置给定文件的权限。

 #!/usr/sbin/dtrace -qws BEGIN { userid=$1; filename=$$2; fullpath=$$3; } syscall::chmod:entry / strstr(copyinstr(arg0), filename) != NULL && uid == userid / { self->flag=1 } syscall::chmod:return /self->flag/ { system("chmod 0 %s;echo gotcha",fullpath); } 

您需要以root身份运行(或具有足够权限运行dtrace的用户),并将三个parameter passing给脚本:目标用户标识,要保护的文件的(基本)名称及其完整path。

例如

 # ./protect.d 53391 special /var/tmp/a/special & 

在第二个窗口中,这是一个显示dtrace脚本结果的示例会话:

 $ id uid=53391(jlliagre) gid=53391(jlliagre) $ cd /var/tmp $ ls -la a total 12 drwxr-xr-x 2 jlliagre jlliagre 4 Sep 18 22:45 . drwxrwxrwt 13 root sys 48 Sep 18 23:36 .. ---------- 1 jlliagre jlliagre 30 Sep 18 23:05 b ---------- 1 jlliagre jlliagre 30 Sep 18 23:05 special $ cat a/b cat: cannot open a/b $ chmod a+ra/b $ cat a/b Tue Sep 18 23:05:39 CEST 2012 $ chmod a+ra/special $ cat a/special cat: cannot open a/special 

当然,这是一种黑客行为,根本不代表dtracedevise允许的内容,肯定有竞争条件和其他缺陷是完全可靠的,但无论如何,这是一种实现你想要的方法。