我试图在我的程序开始时创建一个日志文件。
如果/log目录没有创建目录,我需要检查它是否存在,然后继续创建日志文件。
/log
好吧,我尝试使用os.Mkdir(以及os.MkdirAll),但是无论我在第二个参数中输入什么值,我都会得到一个没有权限的锁定文件夹。为了获得用户文件夹的读/写,这应该是什么值?我以为会是,0x700但它似乎不起作用。
os.Mkdir
os.MkdirAll
0x700
谢谢!
您可以直接使用八进制表示法:
os.Mkdir("dirname", 0700)
权限位
+-----+---+--------------------------+ | rwx | 7 | Read, write and execute | | rw- | 6 | Read, write | | r-x | 5 | Read, and execute | | r-- | 4 | Read, | | -wx | 3 | Write and execute | | -w- | 2 | Write | | --x | 1 | Execute | | --- | 0 | no permissions | +------------------------------------+ +------------+------+-------+ | Permission | Octal| Field | +------------+------+-------+ | rwx------ | 0700 | User | | ---rwx--- | 0070 | Group | | ------rwx | 0007 | Other | +------------+------+-------+
常见权限用法
0755常用于网络服务器。所有者可以读、写、执行。其他人都可以读取和执行但不能修改文件。
0777每个人都可以读写和执行。在 Web 服务器上,不建议对您的文件和文件夹使用“777”权限,因为它允许任何人向您的服务器添加恶意代码。
0644只有所有者可以读写。其他人只能阅读。没有人可以执行该文件。
0655只有所有者可以读写文件,不能执行文件。其他人都可以读取和执行,但不能修改文件。
Linux 上的目录权限
在 Linux 上对目录应用权限时,权限位与普通文件的含义不同。(来源)
读取位用户可以读取目录中包含的文件名。 写位如果执行位也被设置,用户可以{添加、重命名、删除}文件名。 执行位用户可以进入目录,访问里面的文件。
https://unix.stackexchange.com/a/21252
权限计算器
一个方便的权限计算器。
Unix 权限入门:
每个文件都有一个user. 这是系统上的用户。每个文件也有一个group. 这是系统上的一个组。Auser可以在一个或多个groups 中。一个文件恰好有user一个group“拥有”该文件。1
user
group
那么像这样的数字0444是什么意思呢?
0444
第一个数字用于某些特殊标志,例如sticky, setuid, setgid。我们现在不需要为此烦恼。记得把它设置为0
sticky
setuid
setgid
0
接下来的三个数字表明三个权限:一个是user,group和other(大家不是user或group),按照这个顺序。
other
要设置权限,我们使用从零到七的数字(八进制数)。这实际上是一个位掩码。1是为了execute,2是为了write,4是为了read。
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进入目录,则必须设置该位。
./ls
cd
您最常使用的号码是:
因此,如果您查看您的命令,os.chmod(path, 0444)我们会看到您为所有用户设置了只读访问权限。这不是你想要的。
os.chmod(path, 0444)
正确的权限取决于文件的所有者user和group所有者。如果该文件确实不属于你希望禁止访问用户,是不是该文件所属的组中,你可以使用:
os.chmod(path, 0440)
如果我们查看上表,我们会发现这意味着:
如果该文件确实不属于你希望禁止访问用户,并且是该文件所属的组中,你可以使用:
os.chmod(path, 0400)
这将使其可读,user 只有. 请注意,这可能会产生副作用,因为组中的其他人现在也无法阅读。
但是,如果文件属于用户,则需要更改文件user. 这可以通过os.chown()函数来完成。例如:
os.chown()
os.chown(path, 'martin') os.chmod(path, 0400)
1 : 如果您想为一个文件分配更多用户或组,您可以使用 ACL,但在 >95% 中没有必要,它只会增加可能难以管理的复杂性。默认情况下,它通常是禁用的。
2 : 表摘自FreeBSD 手册