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

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

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

如果是的话,我该怎么做?

答案1

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

答案2

假设你的文件被调用file_name,尝试

chmod a-r file_name

答案3

这可能无法以可移植的方式实现(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 的用户)运行它,并将三个参数传递给脚本:目标用户 ID、要保护的文件的(基本)名称及其完整路径。

例如

# ./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+r a/b
$ cat a/b
Tue Sep 18 23:05:39 CEST 2012
$ chmod a+r a/special
$ cat a/special
cat: cannot open a/special

当然,这是一种黑客行为,完全不能代表 dtrace 的设计初衷,而且肯定存在竞争条件和其他缺陷,因此并不完全可靠,但无论如何,它是一种实现您想要的方法。

相关内容