Рейтинг:0

chown Операция не разрешена

флаг th

я сделал оригинал Сообщение о переполнении стека.

У меня есть эта команда, вызывающая ошибки в моем блокноте Jupyter (подробно в сообщении SO):

! chown -R демон: демон elasticsearch-7.9.2

Давая многие из этих выходов:

chown: смена владельца «elasticsearch-7.9.2/NOTICE.txt»: операция не разрешена
...
--------------------------------------------- -------------------------
SubprocessError Traceback (последний последний вызов)
<ipython-input-25-5f043305a2ca> в <модуле>
      8 es_server = Popen(['elasticsearch-7.9.2/bin/elasticsearch'],
      9 stdout=PIPE, stderr=STDOUT,
---> 10 preexec_fn=lambda: os.setuid(1) # как демон
     11 )
     12 # дождаться запуска ES

~/anaconda3/envs/mxnet_latest_p37/lib/python3.7/subprocess.py в __init__(self, args, bufsize, исполняемый файл, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, createflags, restore_signals, start_new_session, pass_fds, кодировка, ошибки, текст)
    798 c2pread, c2pwrite,
    799 ошибиться, ошибиться,
--> 800 restore_signals, start_new_session)
    801, кроме:
    802 # Очистка, если дочерний не запустился.

~/anaconda3/envs/mxnet_latest_p37/lib/python3.7/subprocess.py в _execute_child(self, args, исполняемый файл, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, createflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
   1550 err_msg += ': ' + repr(err_filename)
   1551 поднять child_exception_type (errno_num, err_msg, err_filename)
-> 1552 поднять child_exception_type (err_msg)
   1553 
   1554 

SubprocessError: Исключение произошло в preexec_fn.
--------------------------------------------- -------------------------
SubprocessError Traceback (последний последний вызов)
<ipython-input-25-5f043305a2ca> в <модуле>
      8 es_server = Popen(['elasticsearch-7.9.2/bin/elasticsearch'],
      9 stdout=PIPE, stderr=STDOUT,
---> 10 preexec_fn=lambda: os.setuid(1) # как демон
     11 )
     12 # дождаться запуска ES

~/anaconda3/envs/mxnet_latest_p37/lib/python3.7/subprocess.py в __init__(self, args, bufsize, исполняемый файл, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, createflags, restore_signals, start_new_session, pass_fds, кодировка, ошибки, текст)
    798 c2pread, c2pwrite,
    799 ошибиться, ошибиться,
--> 800 restore_signals, start_new_session)
    801, кроме:
    802 # Очистка, если дочерний не запустился.

~/anaconda3/envs/mxnet_latest_p37/lib/python3.7/subprocess.py в _execute_child(self, args, исполняемый файл, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, createflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
   1550 err_msg += ': ' + repr(err_filename)
   1551 поднять child_exception_type (errno_num, err_msg, err_filename)
-> 1552 поднять child_exception_type (err_msg)
   1553 
   1554 

SubprocessError: Исключение произошло в preexec_fn.

Добавление судо кажется, частично решить мою проблему как операция не разрешена заявления больше не появляются:

! sudo chown -R демон: демон elasticsearch-7.9.2

Однако SubprocessError трассировка остается.


Как предоставить права root для Python, ядра или AWS SageMaker?

raj avatar
флаг cn
raj
Кажется, вы изменили UID в своем коде, используя `os.setuid()`, и это место, где указана ошибка. Чтобы изменить UID, код должен быть запущен от имени пользователя root. Он работает с root-правами? КСТАТИ. Я не понимаю, как изменение неизменяемого атрибута (`chattr -i`) может помочь вам в этом.
StressedBoi69420 avatar
флаг th
Он работает в **AWS SageMaker Jupyter Labs**. Это хорошее понимание, которое вы сделали @raj
StressedBoi69420 avatar
флаг th
Я удалил ссылку на использование `chattr -i` в качестве решения из поста.
Рейтинг:0
флаг cn
raj

Есть две возможности запустить программу или скрипт с правами суперпользователя.

  1. запустить его с судо: вместо /путь/к/вашему/script.py, использовать sudo /путь/к/вашему/script.py. Может поможет настроить судо чтобы он не запрашивал пароль для этого конкретного файла. Вы можете сделать это, поместив файл (с любым именем) в /etc/sudoers.d каталог со следующим содержимым:

    ВСЕ ВСЕ=(корень) NOPASSWD: /path/to/your/script.py
    
  2. использовать установленный бит. Этот метод используется в основном для двоичных программ, потому что для скриптов (таких как ваш скрипт Python) Linux из соображений безопасности игнорирует бит setuid. Однако можно запустить скрипт через бинарная оболочка, т.е. очень маленькая бинарная программа, которая не делает ничего, кроме вызова скрипта. Тогда вы должны чаун ваша двоичная программа для root и установите бит setuid, используя chmod u+s /путь/к/вашему/двоичному файлу. Программа с битом setuid запускается с правами владельца, т.е. в данном случае корень.

    Программа-оболочка может быть написана, например, на C, например так:

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <sys/wait.h>
    
    основной ()
    {
      инт рс;
      сетуид(0);
      rc=WEXITSTATUS(system( "/path/to/your/script.py" ));
      выход(рс);
    }
    

    (чтобы скомпилировать программу на C, вам нужно установить построить-необходимый package, так как компилятор C не установлен по умолчанию в Ubuntu).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.