Подтвердить что ты не робот

Os.MkDir и os.MkDirВсе разрешение?

Я пытаюсь создать файл журнала в начале моей программы.

Мне нужно проверить, существует ли каталог "/log", если он не создает каталог, а затем перейти к созданию файла журнала.

Я попытался использовать os.Mkdir (а также os.MkDirAll), но независимо от того, какое значение я ввел во второй параметр, я получаю заблокированную папку без разрешений. Какое значение это должно быть для того, чтобы получить чтение/запись для пользовательской папки? Я думал, что это будет 0x700, но это не похоже на работу.

Спасибо!

4b9b3361

Ответ 1

Вы можете использовать восьмеричное обозначение напрямую:

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 |
+------------+------+-------+

Учебник для начинающих Unix


Общее использование разрешений

0755 Обычно используется на веб-серверах. Владелец может читать, писать, выполнять. Все остальные могут читать и выполнять, но не могут изменять файл.

0777 Каждый может читать, писать и выполнять. На веб-сервере не рекомендуется использовать разрешение 777 для ваших файлов и папок, поскольку оно позволяет любому добавлять вредоносный код на ваш сервер.

0644 Только владелец может читать и писать. Все остальные могут только читать. Никто не может выполнить файл.

0655 Только владелец может читать и писать, но не может выполнить файл. Все остальные могут читать и выполнять, но не могут изменять файл.

www.maketecheasier.com/file-permissions-what-does-chmod-777-means/


Разрешения для каталогов в Linux

При применении разрешений к каталогам в Linux биты разрешений имеют другое значение, чем в обычных файлах. (источник)

Бит чтения Пользователь может прочитать имена файлов, содержащихся в каталоге.
Бит записи Пользователь может {добавлять, переименовывать, удалять} имена файлов, если бит выполнения также установлен.
Бит выполнения Пользователь может войти в каталог и получить доступ к файлам внутри.

https://unix.stackexchange.com/a/21252

Калькулятор разрешений

permissions calculator

Удобный калькулятор разрешений.

Ответ 2

Утверждение Даниэля в его ответе не совсем корректно, а также говорит о десятичном числе, а затем использует восьмеричный, как @SashaCrofter правильно указал в своем комментарии.

В действительности, не имеет значения, в какой форме ваше значение разрешения находится до тех пор, пока оно представляет разумные разрешения Unix.

Так как биты разрешения в файловых системах POSIX входят в тройки бит — три бита для доступа к владельцу, группе и другим, плюс три бита модификаторов (например, липкие биты), — обычно использовать восьмеричные числа для представления разрешений, поскольку каждая цифра в восьмеричном номере представляет собой трехбитовое значение.

Следовательно, когда вы используете 0700 в коде Go, ведущий 0 лишается и только там, чтобы сообщить парсеру, что он видит восьмеричный литерал, а следующие три буквы соответствуют разрешениям владельца, группы и других лиц в этом заказ. Если вы, скажем, хотите также установить групповой клейкий бит, а также сделать файл файловой системы доступным для группы и выполнимым, вы должны указать 02750 и т.д.

Обратите внимание, что фактические разрешения, которые получает объект файловой системы, далее модулируются активным umask процесса, который создает объект.

Чтобы получить больше информации об этих темах, лучше всего прочитать страницы руководства chmod и общую литературу по Unix-подобным операционным системам.