Можно ли запускать программу от имени конкретного пользователя, но с правами суперпользователя?

2059
Sohcahtoa82

Я занимаюсь разработкой с PyCharm, занимаюсь разработкой сценария, который использует модуль scapy для Python, чтобы выполнять сканирование портов, анализировать трафик и создавать необработанные пакеты. Это, конечно, требует прав суперпользователя, и поэтому я запускаю PyCharm от имени root (да, я знаю о проблемах безопасности, которые это представляет).

Проблема в том, что когда PyCharm связывается с сервером лицензий компании, он отправляет текущее имя пользователя, которое, конечно же, оказывается «корневым», и сервер лицензий отклоняет мой запрос. Если я не запускаю PyCharm от имени пользователя root, он отправляет мое действительное имя пользователя и успешно получает лицензию, но затем я не могу запустить свой сценарий, потому что ему нужны разрешения root для выполнения своих действий.

Есть ли способ заставить PyCharm работать и передать мое действительное имя пользователя на сервер лицензий, но затем иметь права root, не редактируя мою учетную запись, чтобы дать себе права root?

2

4 ответа на вопрос

0
HalosGhost

Я думаю, sudoбыло бы идеально для этого. Как быстрый тест:

$ echo $USER halosghost $ sudo echo $USER [sudo] password for halosghost: halosghost 

То есть я увеличил разрешения, но сохранил идентичность моего пользователя. -EФлаг может также быть особенно полезным. Это гарантирует, что переменные среды сохраняются во время выполнения.

Я раньше использовал sudo, и он не работал. PyCharm запустился, но не смог получить лицензию с сервера. Я сделал это сейчас, и это сработало. Возможно, стоит упомянуть, что при выполнении команды «sudo echo $ USER» отображается мое имя пользователя, а не root, «sudo whoami» говорит мне, что я root. РЕДАКТИРОВАТЬ: Мне интересно, есть ли кто-то еще в компании, который также использует PyCharm в качестве root, и мой запрос лицензии не удался, потому что кто-то уже держал лицензию, используя «root» в качестве имени пользователя. Я не уверен, как именно работают плавающие лицензии PyCharm. Sohcahtoa82 9 лет назад 0
Было бы полезно узнать, как PyCharm определяет ваше имя пользователя. HalosGhost 9 лет назад 0
Это действительно так. Из PyCharm я открыл консоль Python и использовал ее для проверки переменных среды, а LOGNAME, USERNAME и USER - все «root». SUDO_USER - это, конечно же, мое действительное имя пользователя. Если я запускаю os.system ('echo $ USER') из этого приглашения, оно говорит мне, что я root. Похоже, он все еще сообщает серверу лицензий, что я root, и сервер по какой-то причине решил дать мне лицензию на этот раз. Sohcahtoa82 9 лет назад 0
Причина, по которой вы видите результаты, которые вы видите, заключается в том, что оболочка раскрывает переменные среды * перед * передачей их команде. Поскольку вы используете sudo, оболочка не может использовать встроенную функцию echo (что касается оболочки, echo - это просто еще один параметр для sudo). Таким образом, оболочка расширяет `$ USER` до` halosghost` (ваше имя пользователя), затем выполняет `sudo` с параметрами` echo` и `halosghost`. В свою очередь, sudo устанавливает контекст безопасности и затем выполняет echo с параметром halosghost. Поздравляем, вы только что запустили (скорее всего) `/ bin / echo` от имени root. a CVn 8 лет назад 0
0
wjv

Как насчет запуска PyCharm на вашем локальном компьютере, как и вы, и разработки в контейнере, например, в Vagrant (изначально поддерживается в PyCharm) или Docker (поддерживается через плагин)?

0
Orrin Stimpson

Это сработало для меня ( http://esmithy.net/2015/05/05/rundebug-as-root-in-pycharm/ ). По сути, вы создаете другой интерпретатор для python, который представляет собой скрипт оболочки, который вызывает python с помощью sudo. Когда речь идет о создании файла sudoers (/etc/sudoers.d/python), мне пришлось добавить строку, Defaults!/usr/bin/python2.7 !requirettyчтобы разрешить выполнение без tty.

0
Devin R

Три года опаздывают на вечеринку, но стандартная команда Linux (и BSD и MacOS) lognameдаст желаемый результат.

My-Mac:~ devin$ logname devin My-Mac:~ devin$ sudo logname devin My-Mac:~ devin$ sudo su - My-Mac:~ root# echo $USER root My-Mac:~ root# logname devin 

Я полагаю, lognameсмотрит на tty процесса запуска, поэтому я не уверен, что это будет работать для абсолютно безголовой программы (например, той, которая запускается при запуске). Это работает, если вы запустите, а затем отсоедините программу через nohup.

My-Mac:~ root# nohup logname appending output to nohup.out My-Mac:~ root# cat nohup.out devin 

Похожие вопросы