Forum » Programiranje » [Python / Linux] Zagon ukaza z root privilegiji
[Python / Linux] Zagon ukaza z root privilegiji
morbo ::
OK, taka je stvar; Imam skripto ki izvaja neka opravila (odpre poljubno število procesov, ki lahko trajajo poljubno dolgo). Rad bi da po končanem delu skripta izvede shutdown sistema, kar seveda zahteva root privilegij. Opravila ki jih izvaja skripta se ne smejo izvajat v root načinu, zato ob zagonu (iz konzole) uporabnik vpiše geslo, ki se ga shrani in potem na koncu uporabi za shutdown.
Primer kode:
Ob zagonu tega je rezultat isti kot da bi se 3x prijavil z nepravilnim geslom (geslo vpišem pravilno), torej je nekaj narobe s tem kako je string zapisan v tok. Ima kdo kako idejo?
Primer kode:
import sys import getpass from subprocess import Popen, PIPE if __name__ == "__main__": password = getpass.getpass("Enter password [return to skip] -> ") if not password: sys.exit(1) # izvajaj opravila v user nacinu #... # pozeni ukaz kot superuser command = "sudo ls -l" #testni ukaz proc = Popen(command, stdin=PIPE, shell=True) proc.stdin.write(password) proc.stdin.flush() print("end")
Ob zagonu tega je rezultat isti kot da bi se 3x prijavil z nepravilnim geslom (geslo vpišem pravilno), torej je nekaj narobe s tem kako je string zapisan v tok. Ima kdo kako idejo?
jiga ::
Tale parameter dodej pr sudo:
Namest da shranjujes password lahko tudi zazenes svoj python program kot root, in potem ostale programe, ki ne rabijo roota, kot nek drug user (sudo -u username).
-S The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device. The password must be followed by a newline character.
Namest da shranjujes password lahko tudi zazenes svoj python program kot root, in potem ostale programe, ki ne rabijo roota, kot nek drug user (sudo -u username).
-u user The -u (user) option causes sudo to run the specified command as a user other than root. To specify a uid instead of a user name, use #uid. When running commands as a uid, many shells require that the '#' be escaped with a backslash ('\'). Note that if the targetpw Defaults option is set (see sudoers(5)) it is not possible to run commands with a uid not listed in the password database.
Zgodovina sprememb…
- spremenil: jiga ()
morbo ::
ooo, jiga, hvala!
(silly me, ker sploh nisem pogledal v sudo dokumentacijo...)
Še delujoč primer, če koga zanima:
(silly me, ker sploh nisem pogledal v sudo dokumentacijo...)
Še delujoč primer, če koga zanima:
import sys import getpass from subprocess import Popen, PIPE, STDOUT if __name__ == "__main__": password = getpass.getpass("Enter password [return to skip] -> ") if not password: sys.exit(1) password += "\n" command = "sudo -S ls -l" proc = Popen(command, stdin=PIPE, stdout=PIPE, stderr=STDOUT, shell=True) stdout = proc.communicate(bytes(password, "utf-8"))[0] print(stdout.decode("utf-8"))
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Python3] Izvajanje ukazov po določenem časuOddelek: Programiranje | 1465 (1075) | noraguta |
» | Električno stikalo z oddaljenim nadzoromOddelek: Elektrotehnika in elektronika | 1389 (908) | Torx |
» | Kako narediti python "cmd line" programOddelek: Programiranje | 1609 (1032) | ragezor |
» | problem pri sprembi root gesla v MySQL v UbuntuOddelek: Pomoč in nasveti | 1286 (866) | killa bee |
» | Update SVN preko Apache (PHP)Oddelek: Operacijski sistemi | 1042 (984) | Karlos |