Portál AbcLinuxu, 20. dubna 2024 05:21


Dotaz: Spouštění příkazů ve skriptech - práva (root,user....)

10.6.2015 11:10 Pavel
Spouštění příkazů ve skriptech - práva (root,user....)
Přečteno: 750×
Odpovědět | Admin
Zdravím. Na starší PC jsem nainstaloval lubuntu 14.04.2. PC využívám pouze jako nahrávací stroj na pozemní vysílání s programem VDR verze 2.0.3.

Tento program spustí před i po záznamu tzv.recording-hook, do kterého můžu zadat nějaký příkaz. I když v souboru /var/log/syslog uvidím, že recording-hook proběhl

7:14 pavel-lubuntu recordingaction: executing /usr/share/vdr/recording-hooks/R90.custom before recording /var/lib/video.00/U_nás_na_farmě/2015-06-10.09.46.11-0.rec as shell script

Příkaz, který byl do něj vložen (třeba jen zápis datumu do souboru.txt) vykonán není. Pravděpodobně to bude asi nějakými právy, nevěděl by někdo co s tím? To samé když ve scriptu použiju Zenity, tak se okno s upozorněním Zenity spustí pouze, když je script spuštěný z terminálu (jsem root). Když je script spuštěný přes cron, tak se okno Zenity nezobrazí.

Je nastaveno automatické přihlášení jako root. V PC nic není, bezpečnost neřeším, případný hacker si může maximálně přehrát zaznamenaný Večerníček.

Zkoušel jsem hledat na webu, ale zatím bezúspěšně. Potřeboval bych nastavit, aby programy VDR a Zenity mohly vykonávat příkazy ze scriptů, které spouští cron. Cron normálně funguje, např.datum zapíše do souboru,ale nechce vykonat Zenity a ten recording-hook.

Předem díky.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 10.6.2015 12:08 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přístup k X serveru a tedy zobrazení okýnka potřebuje dvě věci. Jednak musí program vědět, kam se připojit, to mu řekne proměnná prostředí zvaná DISPLAY. Druhá věc je, že mu X server musí povolit přístup a to obvykle dělá na základě sušenky uložené v ~/.Xauthority.

Tedy pokud spustíš něco jako root a chceš, aby to ukázalo okýnko na tvém desktopu, který běží jako uživatel, musíš tyto dvě věci podstrčit ručně:
DISPLAY=:0 XAUTHORITY=/home/pavel/.Xauthority  zenity --info --text 'Funguje to'
Ale jinak je lepší root účet nepoužívat a vše dělat pod běžným uživatelským účtem. Odpadnou ti problémy s oprávněními a když něco poděláš, tak si nerozdrbeš celý systém.

Cron jako uživatel můžeš používat pomocí příkazu crontab -e. Xauthority pak nemusíš řešit, stačí nastavit DISPLAY.
Hello world ! Segmentation fault (core dumped)
10.6.2015 13:10 Vtipnéř | skóre: 38 | blog: Vtipnéřův blog | Brno
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nemám teď VDR nikde puštěno, takže si to nemůžu ověřit, ale myslím, že vše, co VDR dělá, dělá jako uživatel 'vdr'. Takže možná by stačilo nastavit jeho práva pomocí /etc/sudoers a příslušné příkazy pouštět jako 'sudo .....'.

Jirka
Opening Windows is better than washing them. Clearing Windows (e.g. erasing or deleting) is even much better.
Josef Kufner avatar 10.6.2015 13:19 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Pak jsou ještě skupiny. Pokdu se přidáš do skupiny uživatele a bude vhodně nastaven umask, aby výchozí oprávnění byla 0775 a nikoliv 0755 (tedy navíc zápis skupině), budeš moct mu hrabat do vygenerovaných souborů jako běžný uživatel, ale vdr ti nebude moct hrabat do tvých.
Hello world ! Segmentation fault (core dumped)
10.6.2015 15:01 Pavel
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Příloha:
Tedy pokud spustíš něco jako root a chceš, aby to ukázalo okýnko na tvém desktopu, který běží jako uživatel, musíš tyto dvě věci podstrčit ručně: DISPLAY=:0 XAUTHORITY=/home/pavel/.Xauthority zenity --info --text 'Funguje to'

Zenity skutečně funguje, mám script který se spouští každou minutu pomocí cronu - dal jsem do něj řádek od tebe z příspěvku - Funguje to.

Díky moc.

Další věcí jsou ty recording-hooks, už se mi podařilo vykonat příkaz před zahájením nahrávání before - zkusmo napsat datum do souboru. Dále jsou tam shutdown-hooks, to umožňuje PC vypnout dle načasovaného timeru.

Do přílohy jsem dal soubor shutdown-hooks. Nevěděl by někdo jak ho upravit, aby se před vypnutím PC zobrazila nějaká varovná zpráva, že PC bude vypnutý a tato zpráva pokud ji nezruším, tak se PC vypne.

Také jsem chtěl upravit soubor /etc/sudoers, aby vdr mohl vykonávat všechny činnosti - bohužel nevím jak.

Do souboru /etc/lightdm/lightdm.conf jsem napsal autologin-user=root a už není potřeba vyplňovat root a heslo. Dále jsem musel upravit soubor /root/.profile a místo mesg n napsat if `tty -s`; then mesg n fi.

Josef Kufner avatar 11.6.2015 11:12 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
step=5
for i in `seq 1 $step 100`
do
    echo $i
    sleep 1
done \
| zenity --progress --auto-close \
    --text '\n<b>Počítač bude vypnut!</b>\n' --time-remaining 2>/dev/null

if [ "$?" = "0" ]
then
    echo shutdown
fi
($step je krok, jak rychle se blížit ke 100%.)
Hello world ! Segmentation fault (core dumped)
11.6.2015 15:36 Pavel
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Díky moc, vyzkoušel jsem to a je to přesně to co jsem potřeboval. Funguje mi spouštění z terminálu, zatím nevím do jakého místa vložit to DISPLAY=:0 XAUTHORITY=/home/pavel/.Xauthority aby se to spouštělo i v cronu. Musel jsem smazat --time-remaining, psalo to Tento přepínač není k dispozici. Ale i bez něj to funguje a zobrazuje se na "teploměru" ubíhající čas.

Recording-hooks mi už fungují i before i after.

12.6.2015 10:41 Pavel
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Podařilo se mi zprovoznit výše uvedený script zenity, funguje přesně tak jak jsem potřeboval, ale bohužel jen když je spuštěný z terminálu nebo spuštěný automaticky cronem. Vytvořil jsem zkušební soubor Test.sh, který spouští cron každou minutu. V tomto případě zenity funguje jak má ( i výše uvedený script s ukazatelem času i třeba když do Test.sh dám jen informační okno zenity ).

Ale pokud script se zenity nechám spustit Recording-hooks_after (spustí Test.sh), tak se příkazy v Test.sh vykonají, ale okno zenity není zobrazeno.

Bude to určitě zase nějakými právy, jsem automaticky přihlášený jako root, potřeboval bych povolit úplně všechno všem, v PC nic na zcizení není.

Mohl by někdo poradit ? Zatím jsem se ničeho nedopátral. Díky moc.

Josef Kufner avatar 12.6.2015 13:59 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Říct ti o příkazu xhost by bylo poněkud nezodpovědné, takže takto: Vykašli se na roota, pracuj pod běžným uživatelem a případné spouštění pod jiným uživatelem řeš přes sudo.
Hello world ! Segmentation fault (core dumped)
12.6.2015 14:53 Pavel
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Když Recording-hooks spustím z účtu uživatele, tak se nevykoná a v /var/log/syslog dostanu chybu

Jun 12 14:44:01 pavel-lubuntu recordingaction: executing /usr/share/vdr/recording-hooks/R90.custom before recording /var/lib/video.00/CT_1_HD/2015-06-12.14.44.1-0.rec Jun 12 14:44:01 pavel-lubuntu recordingaction: error when executing /usr/share/vdr/recording-hooks/R90.custom

Proto jsem našel na webu tu úpravu, abych byl automaticky přihlášený jako root. Potom se Recording-hooks vykonají a v logu chyba není. Zkoušel jsem i do scriptu napsat cestu k zenity /usr/bin/zenity a v souboru zenity změnit v záložce Práva na třikrát Kdokoliv.

Josef Kufner avatar 12.6.2015 19:20 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Hlavně by to chtělo zjistit tu chybu a ne jen hlášku, že se stala.
Hello world ! Segmentation fault (core dumped)
13.6.2015 17:01 Pavel
Rozbalit Rozbalit vše Re: Spouštění příkazů ve skriptech - práva (root,user....)
Příloha:
Já jsem to vyřešil tím, že místo spouštění Zenity ve scriptu recording-hooks after jsem tímto scriptem nechal zapsat hodnotu 180 do souboru VDR_vypnuti.txt. Tento script Lubuntu_vypnuti.sh spouští cron každé tři minuty a pokud se nasčítá hodnota 180, tj.tři hodiny, tak se PC vypne. Je to proto, když by se náhodou stalo, že by se PC nevypnul dle timeru, tak je tu tato pojistka a po třech hodinách PC vypne. To se mi teď hodilo, tak jsem tu hodnotu 180 nechal zapsat scriptem Recording-hooks_after.sh a PC se začne vypínat, zobrazí se "teploměr" s ubíhajícím časem a pokud po nastaveném timeoutu není vypnutí zrušeno, PC se vypne.

Můj výtvor v příloze. Berte to s nadhledem, terminál i linux jsem poprvé viděl o něco více než před rokem.

Tímto chci ještě jednou poděkovat za ten script vypínání Zenity, funguje perfektně.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.