一尘不染

os.Mkdir 和 os.Mkdir 所有权限

go

我试图在我的程序开始时创建一个日志文件。

如果/log目录没有创建目录,我需要检查它是否存在,然后继续创建日志文件。

好吧,我尝试使用os.Mkdir(以及os.MkdirAll),但是无论我在第二个参数中输入什么值,我都会得到一个没有权限的锁定文件夹。为了获得用户文件夹的读/写,这应该是什么值?我以为会是,0x700但它似乎不起作用。

谢谢!


阅读 292

收藏
2021-12-17

共2个答案

一尘不染

您可以直接使用八进制表示法:

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

权限计算器

权限计算器

一个方便的权限计算器

2021-12-17
一尘不染

Unix 权限入门:

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

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

第一个数字用于某些特殊标志,例如sticky, setuid, setgid。我们现在不需要为此烦恼。记得把它设置为0

接下来的三个数字表明三个权限:一个是usergroupother(大家不是usergroup),按照这个顺序。

要设置权限,我们使用从零到七的数字(八进制数)。这实际上是一个位掩码1是为了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

read并且write应该是不言自明的。execute意味着您可以运行文件./ls(这不是安全措施,可以顺便规避)。请注意,目录也是Unix 系统(如 Linux)上的文件。execute如果您希望能够cd进入目录,则必须设置该位。

您最常使用的号码是:

  • 7、获取完全访问权限
  • 6、对于除execute外的完全访问
  • 4、只读。

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

正确的权限取决于文件的所有者usergroup所有者。如果该文件确实属于你希望禁止访问用户,是不是该文件所属的组中,你可以使用:

os.chmod(path, 0440)

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

  • 读、写、不执行user
  • 读、写、不执行group
  • 没有权限other

如果该文件确实属于你希望禁止访问用户,并且该文件所属的组中,你可以使用:

os.chmod(path, 0400)

这将使其可读,user 只有. 请注意,这可能会产生副作用,因为组中的其他人现在也无法阅读。

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

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

1 : 如果您想为一个文件分配更多用户或组,您可以使用 ACL,但在 >95% 中没有必要,它只会增加可能难以管理的复杂性。默认情况下,它通常是禁用的。

2 : 表摘自FreeBSD 手册

2021-12-17