Правильно ли настроен umask для Unix.mkdir?

Я звонил Unix.mkdir "test" 0o000 и ожидаемый каталог с rwxrwxrwx разрешения, но имели -------w-, После звонка Unix.mkdir "test" (Unix.umask 0o000) У меня такой же результат.

Я не могу понять почему.

Как создать каталог с rwx разрешения для всех с OCaml Unix модуль?

1 ответ

Решение

Значение, которое вы указываете для Unix.mkdir это разрешения, которые вы хотите иметь в каталоге, в соответствии с вашими текущими umask, Если вы укажете 0o000 вы должны ожидать создания каталога без разрешений никому. Так как umask может только отрицать некоторые дополнительные разрешения, ваш заявленный результат невозможен, по крайней мере, в Unix.

Обратите внимание, что второй параметр Unix.mkdir это не значение umask, это значение разрешений. Причина, по которой документация OCaml гласит: umask так что вы понимаете, что указанное значение будет изменено вашим umask, Это работает так: каталог будет создан с указанными вами разрешениями, за исключением того, что любой бит, установленный в вашем umask будет понятно в результирующих разрешениях. Другими словами, umask определяет доступы, которые вы хотите запретить по умолчанию.

Если вы действительно хотите создать каталог со всеми разрешениями, доступными для всех, вам необходимо убедиться, что ваш umask это 0. Вот что происходит с разумным umask ценность 0o022:

$ umask
0022
$ ocaml
        OCaml version 4.02.1

# #load "unix.cma";;
# Unix.mkdir "testing1" 0o777;;
- : unit = ()
# ^D
$ ls -ld testing1
drwxr-xr-x  2 jeffsco  staff  68 Jul 30 13:43 testing1

Полученный каталог имеет все разрешенные разрешения, кроме 0o022 разрешений umask. (Нет разрешения на запись для группы или другого.)

Вот что произойдет, если вы установите umask до 0 до создания каталога:

$ ocaml
        OCaml version 4.02.1

# #load "unix.cma";;
# Unix.umask 0o000;;
- : int = 18
# Unix.mkdir "testing2" 0o777;;
- : unit = ()
# ^D
$ ls -ld testing2
drwxrwxrwx  2 jeffsco  staff  68 Jul 30 13:45 testing2

Когда umask установлено в 0, разрешения созданного каталога будут точно такими, как указано в вызове Unix.mkdir,

Другие вопросы по тегам