Отказано в разрешении при попытке создать каталог с os.makedirs на Mac

#python #python-3.x #reactjs #macos-high-sierra

#python #python-3.x #reactjs #macos-high-sierra

Вопрос:

Я работаю с чужим кодом, и я не могу запустить его локально (я также не могу спросить человека, который в данный момент недоступен). У меня есть main.py файл со следующим кодом:

 import os
from tiger_server import constants
from tiger_server.web_server import WebServer

if not os.path.exists(constants.RESULTS_PATH):
    os.makedirs(constants.RESULTS_PATH)

WebServer.start_web_server()
  

RESULTS_PATH является "/usr/share/tiger/instance"

Когда я пытаюсь запустить main.py из своей командной строки, я получаю следующую ошибку:

 File "main.py", line 6, in <module>
    os.makedirs(constants.RESULTS_PATH)   File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/os.py",
line 213, in makedirs
    makedirs(head, exist_ok=exist_ok)   File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/os.py",
line 213, in makedirs
    makedirs(head, exist_ok=exist_ok)   File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/os.py",
line 223, in makedirs
    mkdir(name, mode) PermissionError: [Errno 13] Permission denied: '/usr/share/tiger'
  

Кажется, код пытается создать новый каталог, но как я могу найти его, чтобы разобраться с его разрешениями? Связано ли это с его разрешениями для начала?

У меня есть эти разрешения на main.py файл и его каталог (ME — это мое имя пользователя, поэтому кажется, что файл принадлежит мне):

 -rw-r--r--   1 ME  staff   211 Aug 13 14:40 main.py
  

Я попытался отключить SIP с помощью csrutil disable . Прежде чем я это сделал, я получал другую ошибку:

 PermissionError: [Errno 1] Operation not permitted: '/usr/share/tiger'
  

Может кто-нибудь сказать мне, как действовать, чтобы иметь возможность запускать файл?

Комментарии:

1. Пользователи обычно не имеют прав на запись /usr/share . Вы могли бы сделать ls -ld /usr/share , чтобы проверить и посмотреть, существует ли группа, отличная от root. Для создания каталога вам понадобятся какие-то повышенные права. Возможно, этот другой пользователь добавил эти права или находится в группе с этими правами. getfacl /usr/share может отображаться, были ли добавлены дополнительные элементы управления доступом к каталогу.

2. @tdelaney Когда я запускаю, ls -ld /usr/share что я получаю drwxr-xr-x 47 root wheel 1504 Dec 16 2019 /usr/share . Что это значит? getfacl /usr/share возвращает команду, которая не найдена. Я клонировал код из репозитория проекта, поэтому создатель кода не работал на моей машине.

3. Это означает, что каталог принадлежит пользователю «root», у которого есть полные разрешения, и группе «wheel», у которой есть только разрешения на чтение и сканирование. Это традиционные разрешения unix, но системы обычно имеют более сложные системы разрешений, которые можно использовать. getfacl — это «получить список управления доступом к файловой системе», который наряду с setfacl можно использовать для предоставления мелкозернистого доступа пользователя. Но это работает не на всех системах, и я не знаю конкретно macos. Вы можете найти справку о разрешениях macos на superuser.com

4. Но в результате у вашего пользователя нет разрешений на создание подкаталога в /usr / share.

5. Работает ли это, если вы запускаете свой скрипт от имени root? Это определенно должно произойти после выключения SIP. Кроме того, вы пытались создать каталог вручную с помощью mkdir, чтобы посмотреть, что произойдет?