chown-Operation nicht zulässig

chown-Operation nicht zulässig

Ich hatte ursprünglich eineBeitrag über Stapelüberlauf.

Bei mir verursacht dieser Befehl weiter unten in meinem Jupyter-Notebook Fehler (ausführlich im SO-Beitrag):

! chown -R daemon:daemon elasticsearch-7.9.2

Viele dieser Ergebnisse:

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.

Das Anhängen sudoscheint mein Problem teilweise zu beheben, da Operation not permittedkeine Anweisungen mehr angezeigt werden:

! sudo chown -R daemon:daemon elasticsearch-7.9.2

Der Traceback bleibt jedoch SubprocessErrorbestehen.


Wie kann ich Python, dem Kernel oder AWS SageMaker Root-Berechtigungen erteilen?

Antwort1

Es gibt zwei Möglichkeiten, ein Programm oder Skript mit Root-Rechten auszuführen.

  1. Führen Sie es mit : aus. Verwenden Sie sudostatt . Es kann hilfreich sein, es so zu konfigurieren, dass für diese bestimmte Datei kein Passwort abgefragt wird. Sie können dies tun, indem Sie eine Datei (mit beliebigem Namen) in ein Verzeichnis mit folgendem Inhalt legen :/path/to/your/script.pysudo /path/to/your/script.pysudo/etc/sudoers.d

    ALL ALL=(root) NOPASSWD: /path/to/your/script.py
    
  2. benutze einenSetuid-Bit. Diese Methode wird hauptsächlich für Binärprogramme verwendet, da Linux aus Sicherheitsgründen bei Skripten (wie Ihrem Python-Skript) das Setuid-Bit ignoriert. Es ist jedoch möglich, das Skript über einenBinärer Wrapper, d. h. ein sehr kleines Binärprogramm, das nichts anderes tut, als das Skript aufzurufen. Dann sollten Sie chownIhr Binärprogramm auf root setzen und das Setuid-Bit mit setzen chmod u+s /path/to/your/binary. Programme mit einem Setuid-Bit werden mit den Berechtigungen ihres Besitzers ausgeführt – in diesem Fall also root.

    Das Wrapper-Programm kann beispielsweise in C wie folgt geschrieben werden:

    #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);
    }
    

    (Um ein C-Programm zu kompilieren, müssen Sie ein Paket installieren build-essential, da der C-Compiler unter Ubuntu nicht standardmäßig installiert ist).

verwandte Informationen