Jak spustit příkaz jako jiný uživate sudo/su něco

Jak spustit příkaz jako jiný uživate sudo/su něco
« kdy: 28. 02. 2019, 18:00:16 »
Ahoj všem, prosím Vás o radu při nejspíš pro Vás banálním problému, který mě jako amatérovi dává zabrat. Prosím Vás o radu.

Máte prosím nějaký typ, jak skript spustit rootem, ale tělo skriptu se spustilo jako jiný uživatel? Myslím alternativu funkčního spouštění celého skriptu následovně: "su - postgres -c /path/to/pgbackup.sh"

Mám na CentOS skript, který potřebuji spouštět rootem, ale zároveň tam jsou části skriptu, které potřebuji spouštět jiným uživatelem, ale navzájem ty části kódu na sebe musí vidět a umět spolu spolupracovat. Jedná se například o příkazy psql a pg_dump, se kterými root neumí pracovat a zároveň ho nechci vytvářet jako roli v postgresql databázi. příkazy bych raději spouštěl uživatelem, který je pro tento účel vytvořen.

Zkoušel jsem celý obsah skriptu obalit funkcí následovně:
Kód: [Vybrat]
#!/bin/bash
function1(){
   echo `whoami`
<můj skript>
}
export -f function1
su username -c "bash -c function1"
exit 0

Také jsem zkoušel:
Kód: [Vybrat]
#!/usr/bin/env bash
whoami
sudo -i -u someuser bash << EOF
echo "In"
<můj skript>
whoami
EOF
echo "Out"
whoami

V ani z jednom příkladů skript nefungoval. Děkuji Vám všem za tipy.


Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #1 kdy: 28. 02. 2019, 19:19:57 »
Použít sudo nebo su v tom skriptu.

Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #2 kdy: 28. 02. 2019, 21:53:02 »
Citace
--preserve-env=list
                 Indicates to the security policy that the user wishes to add the comma-separated list of environment variables to those preserved from the user's
                 environment.  The security policy may return an error if the user does not have permission to preserve the environment.

D.A. Tiger

  • ****
  • 459
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #3 kdy: 28. 02. 2019, 23:40:44 »
To v zadnem pripade neni banalni zalezitost. V podani su/sudo se to dela takto:
a) su <user> -c "command"
b) sudo -u <user> ommand"

Existuji jeste moznosti jak zpristupnit xserver (neni to totez), ale to asi nechcete.


Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #4 kdy: 01. 03. 2019, 04:11:12 »
Mám na CentOS skript, který potřebuji spouštět rootem, ale zároveň tam jsou části skriptu, které potřebuji spouštět jiným uživatelem, ale navzájem ty části kódu na sebe musí vidět a umět spolu spolupracovat. Jedná se například o příkazy psql a pg_dump, se kterými root neumí pracovat a zároveň ho nechci vytvářet jako roli v postgresql databázi. příkazy bych raději spouštěl uživatelem, který je pro tento účel vytvořen.

Zde by mi přišlo asi nejjednodušší pouštět psql i pg_dump pod rootem. Na to nepotřebujete rootovi dávat roli do databáze. Stačí psql i pg_dump spustit s příkazem -U a uvést, pod jakou rolí se chcete přihlásit. Pak už je potřeba jen nastavit do pg_hba buďto trust, nebo lépe, zadat heslo do .pgpass.

Přehazovat to pomocí su / sudo je podle mě zbytečné, nepřinese to ani zblo bezpečí navíc.


Skid

Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #5 kdy: 01. 03. 2019, 07:42:39 »
Nejsem si jisty, jestli je to relevantni a dobre jsem to pochopil, ale pokud se spousti skript pod rootem, a ma se vykonat prikaz pod jinym uzivatelem, nesel by pouzi runuser?

runuser -u {user} {script.sh}
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
G! d- a s: C++ BAHSL++ P+ L++
E--- W+ N-- K- w-- O- M- V- PE Y
PGP- t--- !tv b+ DI- D+ e++ h--
------END GEEK CODE BLOCK-----

Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #6 kdy: 01. 03. 2019, 09:04:57 »
Děkuji všem za tipy.


@Filip Jirsák: Nefunguje, viz následující informace.

@OphrahHokulani: Připadá mi, že tohle mi vůbec nepomůže, ale možná jsem jen nepochopil, jak to funguje.

@D.A. Tiger: To právě nefunguje ani jedno.

V případě SU:
Kód: [Vybrat]
#!/bin/sh
EXECUTE="psql -c '\l'"
EXECUTE2="| cut -d '|' -f1 | tail -n +4 | head -n -2 | awk NF"
EXECUTE="${EXECUTE}${EXECUTE2}"
MAX="scl enable rh-postgresql95 \"${EXECUTE}\" | wc -l"
echo "$MAX"
su postgres -c "KONEC=$(eval $MAX)"  #<-------------------------------------------------------
#sudo -u postgres "KONEC=$(eval $MAX)"
echo "$KONEC"

for (( c=1; c<=$KONEC; c++ ))
do 
...

Zpětná vazba:
Kód: [Vybrat]
scl enable rh-postgresql95 "psql -c '\l'| cut -d '|' -f1 | tail -n +4 | head -n -2 | awk NF" | wc -l
psql: FATAL:  database "root" does not exist

/usr/local/sbin/postgresql_backup.sh: line 28: ((: c<=: syntax error: operand expected (error token is "<=")
[root@postgresc3 ~]#

V případě SUDO:
Kód: [Vybrat]
#!/bin/sh
EXECUTE="psql -c '\l'"
EXECUTE2="| cut -d '|' -f1 | tail -n +4 | head -n -2 | awk NF"
EXECUTE="${EXECUTE}${EXECUTE2}"
MAX="scl enable rh-postgresql95 \"${EXECUTE}\" | wc -l"
echo "$MAX"
#su postgres -c "KONEC=$(eval $MAX)"
sudo -u postgres "KONEC=$(eval $MAX)" #<-------------------------------------------------------
echo "$KONEC"

for (( c=1; c<=$KONEC; c++ ))
do
...
Zpětná vazba:
Kód: [Vybrat]
scl enable rh-postgresql95 "psql -c '\l'| cut -d '|' -f1 | tail -n +4 | head -n -2 | awk NF" | wc -l
psql: FATAL:  database "root" does not exist
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user]
            [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...

/usr/local/sbin/postgresql_backup.sh: line 28: ((: c<=: syntax error: operand expected (error token is "<=")
[root@postgresc3 ~]#

@Miroslav Šilhavý: To už mi zase přijde jako složité řešení, navíc, myslel jsem, že jste propagoval, aby se takové věci nedělaly uživatelem postgres na tož rootem.

@Skid: To by nebyl splněn požadavek spuštění skriptu rootem.


Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #7 kdy: 01. 03. 2019, 09:06:40 »
Jses si jistej, ze opravdu roota potrebujes?

Tyhle veci se vetsinou resi tak, ze skript se pousti pod neprivilegovanym userem a pouze na dilci casti, ktere roota nutne potrebuji se spousteji pres sudo.

Jinak samozrejme pg_dump muze pracovat s libovolnym postgres uzivatelem (parametr -U), ten nema s OS userem nic spolecneho, akorat bez specifikace to defaultne podstrci aktualni loginname.

Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #8 kdy: 01. 03. 2019, 09:14:57 »
Apropos, ve starem threadu jsi tusim resil instalaci postgresu na CentOS.
Verze 9.5 je uz hodne zastarala, ted je verze 11, ktera je mnohem lepsi.

Postgres je vhodnejsi instalovat primo s Poistgres repozitare a vykaslat se na redhatem pribalenou archeologickou vykopavku.

https://yum.postgresql.org/

Postup je prosty, stahne se specificke rpm, co to centosu prida postgre repozitar, pak se z tohoto repozitare instaluje.

Skid

Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #9 kdy: 01. 03. 2019, 09:43:27 »
@Skid: To by nebyl splněn požadavek spuštění skriptu rootem.

Myslim si ze byl - pochopil jsem to tak, ze pod rootem spustim skript, a v nem bude dle toho prikladu v uvodu:

#!/bin/bash
function1(){
   echo `whoami`
<můj skript>
}
export -f function1
runuser -u username "bash -c function1"
exit 0
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
G! d- a s: C++ BAHSL++ P+ L++
E--- W+ N-- K- w-- O- M- V- PE Y
PGP- t--- !tv b+ DI- D+ e++ h--
------END GEEK CODE BLOCK-----

Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #10 kdy: 01. 03. 2019, 11:02:29 »
Odhlásil mě web a neodeslal se příspěvek, tak sem naštvanej a nechce se mi ho psát, znovu, tak to shrnu:

Ano, musím spouštětscript rootem, ano potřebu SC, mám pro to svoje důvody.

Děkuji všem a hlavně uživatelům @Miroslav Šilhavý a @Standa Blábol za tip přidání k psql a pg_dump parametr "-U", easy vyřešení mého problému.

Mějte všichni hezký den.

Re:Jak spustit příkaz jako jiný uživate sudo/su něco
« Odpověď #11 kdy: 01. 03. 2019, 12:30:07 »
@Miroslav Šilhavý: To už mi zase přijde jako složité řešení, navíc, myslel jsem, že jste propagoval, aby se takové věci nedělaly uživatelem postgres na tož rootem.

To propaguji dál, ale vy jste položil jako podmínku, že script je rootem spuštěný. Tj. vyšší oprávnění už nejdou získat.