如何禁止一个用户访问文件?

时间:2016-03-09 14:39:25

标签: python

我正在尝试禁止用户打开文件。 目的是当用户尝试打开特定文件时,他将无法进行。

此外,我希望能够返回权限并让用户打开文件。

我只找到了启用提交的方法:os.chmod(path, 0444),但我无法理解如何禁用权限。

1 个答案:

答案 0 :(得分:9)

Unix许可入门:

每个文件都有user。这是系统上的用户。每个文件也有一个group。这是系统上的一个组。 user可以在一个或多个group中。一个文件只有一个user和一个group“拥有”该文件。 1

那么像0444这样的数字是什么意思?

第一个数字用于某些特殊标记,例如stickysetuidsetgid。我们现在不需要为此烦恼。请记住将其设置为0

接下来的三个数字表示三个权限:一个用于usergroupother(每个人都不是usergroup) ,按此顺序。

要设置权限,我们使用从0到7的数字(八进制数字)。这实际上是bitmask1用于execute2用于write4用于read

在表格中,它看起来像: 2

N   Description                    ls output

0   No read, no write, no execute    ---
1   No read, no write, execute       --x
2   No read, write, no execute       -w-
3   No read, write, execute          -wx
4   Read, no write, no execute       r--
5   Read, no write, execute          r-x
6   Read, write, no execute          rw-
7   Read, write, execute             rwx

readwrite应该是不言自明的。 execute表示您可以使用./ls运行文件(这不是安全措施,可以通过这种方式规避)。请注意,目录是Unix系统(如Linux)上的也是文件。如果您希望能够execute进入目录,则必须设置cd位。

您最常使用的号码是:

  • 7,完全访问
  • 6,除执行
  • 外的完全访问权限
  • 4,仅供参考。

因此,如果您查看命令os.chmod(path, 0444),我们会看到您为所有用户设置了只读访问权限。这不是你想要的。

正确的权限取决于usergroup拥有该文件的权限。如果文件属于您要禁止访问的用户,并且该文件所属的组中的不是,则可以使用:

os.chmod(path, 0440)

如果我们查看上表,我们发现它意味着:

  • user的读,写,无执行。
  • group的读,写,无执行。
  • other没有权限。

如果的文件属于您要禁止访问的用户,并且该文件所属的组中的 ,则可以使用:

os.chmod(path, 0400)

这将使user 可读。请注意,此可能有副作用,因为该组中的其他人现在也无法读取它。

但是,如果文件属于用户,则需要更改文件user。这可以使用os.chown()函数完成。 e.g:

os.chown(path, 'martin')
os.chmod(path, 0400)

1 :如果要为文件分配更多用户或组,可以使用ACL,但是> 95%则不需要,并且只会增加可能难以实现的复杂性管理。它通常默认禁用。

2 :表格从FreeBSD handbook

取消