chown Operação não permitida

chown Operação não permitida

Eu tinha feito um originalPostagem Stack Overflow.

Eu tenho este comando causando erros mais abaixo no meu Jupyter Notebook (detalhado na postagem do SO):

! chown -R daemon:daemon elasticsearch-7.9.2

Fornecendo muitos desses resultados:

chown: changing ownership of ‘elasticsearch-7.9.2/NOTICE.txt’: Operation not permitted
...
---------------------------------------------------------------------------
SubprocessError                           Traceback (most recent call last)
<ipython-input-25-5f043305a2ca> in <module>
      8 es_server = Popen(['elasticsearch-7.9.2/bin/elasticsearch'],
      9                    stdout=PIPE, stderr=STDOUT,
---> 10                    preexec_fn=lambda: os.setuid(1)  # as daemon
     11                   )
     12 # wait until ES has started

~/anaconda3/envs/mxnet_latest_p37/lib/python3.7/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    798                                 c2pread, c2pwrite,
    799                                 errread, errwrite,
--> 800                                 restore_signals, start_new_session)
    801         except:
    802             # Cleanup if the child failed starting.

~/anaconda3/envs/mxnet_latest_p37/lib/python3.7/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
   1550                             err_msg += ': ' + repr(err_filename)
   1551                     raise child_exception_type(errno_num, err_msg, err_filename)
-> 1552                 raise child_exception_type(err_msg)
   1553 
   1554 

SubprocessError: Exception occurred in preexec_fn.
---------------------------------------------------------------------------
SubprocessError                           Traceback (most recent call last)
<ipython-input-25-5f043305a2ca> in <module>
      8 es_server = Popen(['elasticsearch-7.9.2/bin/elasticsearch'],
      9                    stdout=PIPE, stderr=STDOUT,
---> 10                    preexec_fn=lambda: os.setuid(1)  # as daemon
     11                   )
     12 # wait until ES has started

~/anaconda3/envs/mxnet_latest_p37/lib/python3.7/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    798                                 c2pread, c2pwrite,
    799                                 errread, errwrite,
--> 800                                 restore_signals, start_new_session)
    801         except:
    802             # Cleanup if the child failed starting.

~/anaconda3/envs/mxnet_latest_p37/lib/python3.7/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
   1550                             err_msg += ': ' + repr(err_filename)
   1551                     raise child_exception_type(errno_num, err_msg, err_filename)
-> 1552                 raise child_exception_type(err_msg)
   1553 
   1554 

SubprocessError: Exception occurred in preexec_fn.

Anexar sudoparece corrigir parcialmente meu problema, pois Operation not permittedas declarações não aparecem mais:

! sudo chown -R daemon:daemon elasticsearch-7.9.2

No entanto, o SubprocessErrorrastreamento permanece.


Como posso conceder permissões de root ao Python, ao kernel ou ao AWS SageMaker?

Responder1

Existem duas possibilidades para executar um programa ou script com permissões de root.

  1. execute-o com sudo: em vez de /path/to/your/script.py, use sudo /path/to/your/script.py. Pode ser útil configurar sudopara que não solicite senha para este arquivo específico. Você pode fazer isso colocando um arquivo (com qualquer nome) em /etc/sudoers.dum diretório com o seguinte conteúdo:

    ALL ALL=(root) NOPASSWD: /path/to/your/script.py
    
  2. use umbit setuid. Este método é usado principalmente para programas binários, porque para scripts (como o script Python), o Linux, por motivos de segurança, ignora o bit setuid. No entanto, é possível executar o script através de umwrapper binário, ou seja. programa binário muito pequeno que nada mais faz do que chamar o script. Então você deve chownfazer root no seu programa binário e definir o bit setuid usando chmod u+s /path/to/your/binary. O programa com um bit setuid é executado com permissões de seu proprietário - ou seja. neste caso raiz.

    O programa wrapper pode ser escrito, por exemplo, em C, assim:

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <sys/wait.h>
    
    int main()
    {
      int rc;
      setuid( 0 );
      rc=WEXITSTATUS(system( "/path/to/your/script.py" ));
      exit(rc);
    }
    

    (para compilar um programa C, você precisa instalar build-essentialo pacote, pois o compilador C não é instalado por padrão no Ubuntu).

informação relacionada