Вопрос или проблема
Я пытался установить CrackMapExec (CME) на Ubuntu сегодня днем, и документация CME предложила установить pipx и управлять установкой CME через pipx, чтобы избежать проблем с зависимостями. Я пытался установить pipx как пользователь с низкими привилегиями, но это не удалось. Затем я установил pipx с помощью sudo, и это, похоже, нарушило права доступа, так что я больше не могу запускать pip3 как пользователь с низкими привилегиями:
user@box:/usr/lib/python3/dist-packages/pip$ pip3 --version
Traceback (most recent call last):
File "/usr/local/bin/pip3", line 5, in <module>
from pip._internal.cli.main import main
File "/usr/lib/python3/dist-packages/pip/_internal/cli/main.py", line 10, in <module>
from pip._internal.cli.autocompletion import autocomplete
File "/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
from pip._internal.cli.main_parser import create_main_parser
File "/usr/lib/python3/dist-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
from pip._internal.cli import cmdoptions
File "/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py", line 24, in <module>
from pip._internal.exceptions import CommandError
File "/usr/lib/python3/dist-packages/pip/_internal/exceptions.py", line 10, in <module>
from pip._vendor.six import iteritems
File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 79, in <module>
vendored("pkg_resources")
File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 36, in vendored
__import__(modulename, globals(), locals(), level=0)
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap>", line 618, in _load_backward_compatible
File "<frozen zipimport>", line 259, in load_module
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3252, in <module>
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3235, in _call_aside
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3264, in _initialize_master_working_set
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 574, in _build_master
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 567, in __init__
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 623, in add_entry
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 2065, in find_on_path
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 2127, in distributions_from_metadata
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.8/dist-packages/yarl-1.7.0.dist-info'
Однако, если я использую ранее созданный виртуальный окружение или создаю новое виртуальное окружение, у меня нет проблем:
user@box:/opt/Tools$ cd spiderfoot/
user@box:/opt/Tools/spiderfoot$ virtualenv .spiderfoot
создано виртуальное окружение CPython3.8.10.final.0-64 за 264мс
создатель CPython3Posix(dest=/opt/Tools/spiderfoot/.spiderfoot, clear=False, no_vcs_ignore=False, global=False)
посевщик FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/bleiden/.local/share/virtualenv)
добавлены посевные пакеты: pip==21.2.4, setuptools==58.1.0, wheel==0.37.0
активаторы BashActivator, CShellActivator, FishActivator, NushellActivator, PowerShellActivator, PythonActivator
user@box:/opt/Tools/spiderfoot$ source .spiderfoot/bin/activate
(.spiderfoot) user@box:/opt/Tools/spiderfoot$ pip3 --version
pip 21.2.4 из /opt/Tools/spiderfoot/.spiderfoot/lib/python3.8/site-packages/pip (python 3.8)
(.spiderfoot) user@box:/opt/Tools/spiderfoot$ deactivate
user@box:/opt/Tools/spiderfoot$ pip3 --version
Traceback (most recent call last):
File "/usr/local/bin/pip3", line 5, in <module>
from pip._internal.cli.main import main
File "/usr/lib/python3/dist-packages/pip/_internal/cli/main.py", line 10, in <module>
from pip._internal.cli.autocompletion import autocomplete
File "/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
from pip._internal.cli.main_parser import create_main_parser
File "/usr/lib/python3/dist-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
from pip._internal.cli import cmdoptions
File "/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py", line 24, in <module>
from pip._internal.exceptions import CommandError
File "/usr/lib/python3/dist-packages/pip/_internal/exceptions.py", line 10, in <module>
from pip._vendor.six import iteritems
File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 79, in <module>
vendored("pkg_resources")
File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 36, in vendored
__import__(modulename, globals(), locals(), level=0)
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap>", line 618, in _load_backward_compatible
File "<frozen zipimport>", line 259, in load_module
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3252, in <module>
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3235, in _call_aside
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3264, in _initialize_master_working_set
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 574, in _build_master
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 567, in __init__
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 623, in add_entry
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 2065, in find_on_path
File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 2127, in distributions_from_metadata
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.8/dist-packages/yarl-1.7.0.dist-info'
Я пытался удалить и переустановить python3-pip через apt, но это не решило проблему. Изменение владельца папки dist-packages на мой идентификатор пользователя, вероятно, не является вариантом, так как я не единственный пользователь на этой машине, кому нужен python. Любая помощь, которую вы можете предоставить, будет очень ценна.
У меня была такая же проблема, и sudo chmod a+r -R /usr/local/lib/python3.8/dist-packages/
сработало для меня.
Ответ или решение
Решение проблемы с ошибками разрешений при использовании pip3 вне виртуальной среды на Ubuntu
Когда вы работаете с Python и pip (или pip3), ошибки разрешения могут значительно затруднить установку и управление пакетами. Ваша ситуация с установкой CrackMapExec (CME) и subsequent проблемами, связанными с правами доступа, является довольно распространенной. Давайте подробно разберем эту проблему и предложим возможные решения.
Проблема
Вы столкнулись с ошибкой разрешений, когда пытались использовать pip3 после установки pipx с правами администратора (sudo):
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.8/dist-packages/yarl-1.7.0.dist-info'
Эта ошибка указывает на то, что ваша учетная запись не имеет достаточных прав для доступа к файлам, находящимся в directory /usr/local/lib/python3.8/dist-packages/
, которые, вероятно, были изменены в результате установки pipx с помощью sudo.
Причины
-
Учетные записи с различными привилегиями: Установка pipx с использованием sudo создает файлы и директории, принадлежащие пользователю root, и поэтому обычные пользователи не могут их редактировать.
-
Изменение прав доступа: Если pipx или pip3 используют разные наборы пакетов, то недоступные пути могут вызвать проблемы.
-
Установка зависимостей: Процесс установки может зависеть от файлов, принадлежащих другой учетной записи, нарушая целостность окружения Python.
Возможные решения
Метод 1: Изменение прав доступа
Как уже упоминалось в вашем обсуждении, изменение прав доступа к каталогу может решить вашу проблему. Вот команда, которая может помочь:
sudo chmod a+r -R /usr/local/lib/python3.8/dist-packages/
Эта команда изменит права доступа на чтение для всех пользователей. Это может быть достаточно для решения ваших проблем с разрешениями, но следует помнить, что это изменяет безопасность, поэтому используйте этот метод с осторожностью.
Метод 2: Переустановка pip
Если изменение прав доступа не решает проблему, вы можете попробовать полностью удалить и затем переустановить pip, чтобы восстановить его первоначальные права доступа:
sudo apt remove python3-pip
sudo apt install python3-pip
Этот процесс может помочь восстановить правильные права доступа к файлам и директориям.
Метод 3: Установка в виртуальной среде
Использование виртуальных окружений — это лучший способ изолировать ваши проекты Python. Если pip3 работает корректно в виртуальной среде, но не вне ее, это означает, что ваша основная установка Python имеет конфликты или проблемы с правами доступа.
Создайте новое виртуальное окружение и активируйте его:
virtualenv myenv
source myenv/bin/activate
Мы настоятельно рекомендуем использовать виртуальные окружения для каждого проекта. Это не только помогает избежать проблем с зависимостями, но и предотвращает конфликты между пакетами.
Метод 4: Профилактика в будущем
Чтобы избежать будущих проблем с установкой пакетов и правами доступа, следуйте этим рекомендациям:
- Используйте pipx для установки Python приложений программного обеспечения, чтобы избежать конфликта версий и прав. Убедитесь, что pipx установлен для вашего пользователя, а не с использованием sudo.
- Избегайте установки пакетов в систему с использованием sudo, если это возможно. Всегда старайтесь использовать виртуальные окружения или pipx для управления пакетами.
Заключение
Ошибки разрешений при использовании pip3 на Ubuntu могут привести к значительным последствиям в управлении проектами на Python. Подводя итог, лучше всего использовать виртуальные окружения, чтобы минимизировать подобные проблемы. Если вы столкнулись с конкретными ошибками, не стесняйтесь делиться ими, чтобы получить более целенаправленное решение.