我正在尝试禁止用户打开文件。 目的是当用户尝试打开特定文件时,他将无法进行。
此外,我希望能够返回权限并让用户打开文件。
我只找到了启用提交的方法:os.chmod(path, 0444)
,但我无法理解如何禁用权限。
答案 0 :(得分:9)
Unix许可入门:
每个文件都有user
。这是系统上的用户。每个文件也有一个group
。这是系统上的一个组。 user
可以在一个或多个group
中。一个文件只有一个user
和一个group
“拥有”该文件。 1
那么像0444
这样的数字是什么意思?
第一个数字用于某些特殊标记,例如sticky
,setuid
,setgid
。我们现在不需要为此烦恼。请记住将其设置为0
接下来的三个数字表示三个权限:一个用于user
,group
和other
(每个人都不是user
或group
) ,按此顺序。
要设置权限,我们使用从0到7的数字(八进制数字)。这实际上是bitmask。 1
用于execute
,2
用于write
,4
用于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
read
和write
应该是不言自明的。 execute
表示您可以使用./ls
运行文件(这不是安全措施,可以通过这种方式规避)。请注意,目录是Unix系统(如Linux)上的也是文件。如果您希望能够execute
进入目录,则必须设置cd
位。
您最常使用的号码是:
因此,如果您查看命令os.chmod(path, 0444)
,我们会看到您为所有用户设置了只读访问权限。这不是你想要的。
正确的权限取决于user
和group
拥有该文件的权限。如果文件不属于您要禁止访问的用户,并且该文件所属的组中的不是,则可以使用:
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
取消