Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: straka.peter 20 Července 2014, 20:11:47
-
Zdravím, potřeboval bych spouštět skripty vždy buď po kliknutí na něj z plochy nebo z terminálu pod právy roota. SetUID bit jsem nastavil, ale program stále běží pod právy uživatele který skript spustil, respektive, nedělá co má. Ve skriptu se odkazuju na program rsync - nevím jestli to náhodou nemůže být tím,že když ze skriptu s SetUID volám jiný program - spustí se stejně pod právy uživatele, který jej spustil?
Díky.
-
fakeroot?
-
na skript se setuid nastavit neda, nastav si ho pres sudo - dej si do etc/sudoers
jmeno_uzivatele ALL=NOPASSWD: /cesta/ke/skriptu
potom ho budes moct poustet pomoci sudo bez zadavani hesla
-
Pulhodiny zabavy a tohle se mi rozjet nepodarilo.
-
Pulhodiny zabavy a tohle se mi rozjet nepodarilo.
v tom pripade bych se zamyslel, jestli je pro tebe linux to prave orechove, protoze stravit pulhodinu vkladanim textu copy&paste metodou do nejakeho souboru (apropos musis jeste nahradit "jmeno_uzivatele" za nejake opravdove jmeno a "/cesta/ke/skriptu" za nejakou skutecnou cestu) s negativnim vysledkem je alarmujici ..
-
Pulhodiny zabavy a tohle se mi rozjet nepodarilo.
Co konkrétně? Ten script se pak musí spouštět přes sudo - spustí se s právy roota, jen se nezeptá na heslo.
-
No zkousel sem snad secko
sudo bash /home/grafen/.SUDOskripty/FTPskript.sh
bash /home/grafen/.SUDOskripty/FTPskript.sh
bash sudo /home/grafen/.SUDOskripty/FTPskript.sh
cd /home/grafen/.SUDOskripty/
bash FTPskript.sh
Uvnitr skriptu se sudo a ibez sudo, a ruzne variace v sudoers
grafen ALL=NOPASSWD: /home/grafen/.SUDOskripty
grafen ALL=(ALL )NOPASSWD: /home/grafen/.SUDOskripty
grafen ALL=(root )NOPASSWD: /home/grafen/.SUDOskripty
root ALL=NOPASSWD: /home/grafen/.SUDOskripty
root ALL=(ALL) NOPASSWD:/bin/bash /home/grafen/FTPskript.sh
i primo nazev skriptu napr.
grafen ALL=NOPASSWD: /home/grafen/.SUDOskripty/FTPskript.sh
Samozrtejme si tezko zapamatovat secky kombinace co sem zkousel, vysledek bud to chtelo heslo, nebo to bezelo bez opravneni, no standartne spoustim prez "gksudo bash /home/grafen/FTPskript.sh" ale skript je sam osobe a mozna v tom je problem zakazany k zapisu, ale to mi pride zase jako dira, mit skript spousteny root volne editovatelny.
Jeste pridam pro rejpaly ze to zabralo tolik casu, po uprave restart.
-
v tom pripade bych se zamyslel, jestli je pro tebe linux to prave orechove, protoze stravit pulhodinu vkladanim textu copy&paste metodou do nejakeho souboru (apropos musis jeste nahradit "jmeno_uzivatele" za nejake opravdove jmeno a "/cesta/ke/skriptu" za nejakou skutecnou cestu) s negativnim vysledkem je alarmujici ..
No strasne vtipne.
-
v tom pripade bych se zamyslel, jestli je pro tebe linux to prave orechove, protoze stravit pulhodinu vkladanim textu copy&paste metodou do nejakeho souboru (apropos musis jeste nahradit "jmeno_uzivatele" za nejake opravdove jmeno a "/cesta/ke/skriptu" za nejakou skutecnou cestu) s negativnim vysledkem je alarmujici ..
No strasne vtipne.
no tedka vazne, berme to jako lehkou ironii, ale skoro bych rekl, ze jsi se netrefil ani v jednom z pokusu :D .. dyk tam proste nemas co jsem ti napsal ..
ad.sudoers) bud si tam dej cestu primo k tomu jednomu skriptu a nebo tu cestu - pokud je to adresar - musis mit s "/" na konci .. ono je to nekde v manualu .. sice nevim kde, ale proste je to tak ..
grafen ALL=NOPASSWD: /home/grafen/.SUDOscripty/
ad.spousteni)
kdyz spoustis `sudo bash $nejakej_argument', tak musis mit v sudoers celej bash (coz je kravina) .. kdyz to spoustis bez sudo, tak je samozrejme, ze to pod rootem nepobezi
musis to proste spoustet bud `sudo /home/grafen/.SUDOskripty/FTPskript.sh' a nebo `sudo FTPskript.sh' pokud mas tu cestu s tema skriptama v $PATH .. sudo si tu cestu vezme z $0 takze ji bude mit vzdy spravne ..
-
musis mit samozrejme ale vyresena rizika, ktere to prinasi .. tzn, ze musis mit ty skripty s pravy 755 a jejich vlastnikem musi byt root .. pokud by tomu tak nebylo, tak ze tveho uctu by slo ziskat generickej pristup na roota, protoze by sis do nich jako majitel tech skriptu mohl dat co uplne co chces ..
ty navic do sudoers muzes dat i celej ten prikaz, vc. argumentu, tzn nemusis tam davat jenom ten prikaz .. napriklad (ja to tam sice nemam, ale klidne si to tam dam :P):
%users ALL=NOPASSWD: /usr/bin/zypper -vv ref
^^ tohle dovoli u me v pocitaci vsem clenum skupiny users vykonat jen tenhle jeden prikaz s temahle argumentama .. tedy refreshnout cache s balicky (eg apt-get update u vas)
-
Sudo visudo a nic
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
grafen ALL=NOPASSWD: /home/grafen/.SUDOscripty/
grafen@grafen-MS-7758:~$ sudo /home/grafen/.SUDOskripty/FTPskript.sh
[sudo] password for grafen:
grafen@grafen-MS-7758:~$ cd /home/grafen/.SUDOskripty
grafen@grafen-MS-7758:~/.SUDOskripty$ sudo FTPskript.sh
[sudo] password for grafen:
grafen@grafen-MS-7758:~/.SUDOskripty$ sudo bash FTPskript.sh
[sudo] password for grafen:
grafen@grafen-MS-7758:~/.SUDOskripty$ ls FTPskript.sh -g
-rwxr-xr-x 1 grafen 1650 čec 31 16:30 FTPskript.sh
grafen@grafen-MS-7758:~/.SUDOskripty$ bash FTPskript.sh
[sudo] password for grafen:
-
a nemas to sudo i v tom skriptu ?
navic ono se to nepta na heslo roota, ale na heslo grafena ?
btw, neni nahodou potreba povolit v ubu roota tady na to ? ubuntu ma naprosto divnej setup a toho roota nema defaultne povolenyho
-
Sudo je i v skriptu a jak sem psal kdyz ho odtamat smazu prikazy se samozrejme neprovadi pod pravy a nejsou funkcni, pta se na grafena, jako pri kazdem sudo, sak to tam vidis.
Dalsi pokus nefunguje
%users ALL=NOPASSWD:/home/grafen/.SUDOscripty/sudo bash FTPskript.sh
-
Sudo je i v skriptu a jak sem psal kdyz ho odtamat smazu prikazy se samozrejme neprovadi pod pravy a nejsou funkcni, pta se na grafena, jako pri kazdem sudo, sak to tam vidis.
Dalsi pokus nefunguje
%users ALL=NOPASSWD:/home/grafen/.SUDOscripty/sudo bash FTPskript.sh
sudo nemas mit ve skriptu !! a navic si myslim, ze skupina users snad ani neni v ubuntu defaultni pro uzivatele .. ted uz me zacalo zajimat co je obsahem toho skriptu samotnyho ..
-
muzes prosim zadat do konsole tyhle prikazy:
# prihlasis se jako root
sudo -i
# vytvoris adresar a das do nej soubor se skriptem a nastavis prava na spousteni - vse pod rootem
mkdir -p /var/tmp/bin
echo -e '#!/bin/bash\necho $USER:$EUID\nexit 0' > /var/tmp/bin/hmmm
chmod +x /var/tmp/bin/hmmm
# ted sudoers
cp -v /etc/sudoers /etc/sudoers.1
echo -e 'grafen\t\tALL=NOPASSWD: /var/tmp/bin/hmmm' >> /etc/sudoers
# ted se odhlasis od z roota z zkusis to spustit:
exit
([ "grafen" == "$USER" ] && sudo /var/tmp/bin/hmmm) || echo omg
potom po sobe uklidis, tzn odstranis ten radek ze sudoers ..
-
sudoers jsem nějak pořádně nepochopil, ale v ubuntu se opravdu po sudo objevuje dotaz na heslo usera a ne roota
asi bych místo
grafen ALL=NOPASSWD: /home/grafen/.SUDOscripty/zkusil
grafen ALL=(root:root) NOPASSWD:/home/grafen/.SUDOscripty/
-
sudoers jsem nějak pořádně nepochopil, ale v ubuntu se opravdu po sudo objevuje dotaz na heslo usera a ne roota
asi bych místo
grafen ALL=NOPASSWD: /home/grafen/.SUDOscripty/zkusil
grafen ALL=(root:root) NOPASSWD:/home/grafen/.SUDOscripty/
at nejdriv prosim udela to co mu pisu .. podle me to dela furt spatne ..
-
grafen ALL=(root:root) NOPASSWD:/home/grafen/.SUDOscripty/
nejde
sudoers zalohovane mam, a kod sem vkladal prez visudo
grafen ALL=NOPASSWD: /var/tmp/bin/hmmm
muzes prosim zadat do konsole tyhle prikazy: ....
grafen@grafen-MS-7758:~$ sudo -i
[sudo] password for grafen:
root@grafen-MS-7758:~# mkdir -p /var/tmp/bin
root@grafen-MS-7758:~# echo -e '#!/bin/bash\necho $USER:$EUID\nexit 0' > /var/tmp/bin/hmmm
root@grafen-MS-7758:~# chmod +x /var/tmp/bin/hmmm
root@grafen-MS-7758:~# exit
odhlášení
grafen@grafen-MS-7758:~$ ([ "grafen" == "$USER" ] && sudo /var/tmp/bin/hmmm) || echo omg
root:0
grafen@grafen-MS-7758:~$ echo $USER:$EUID
grafen:1000
Tak jeste to otestuju.
-
grafen@grafen-MS-7758:~$ sudo -i
[sudo] password for grafen:
root@grafen-MS-7758:~# mkdir -p /var/tmp/bin
root@grafen-MS-7758:~# echo -e '#!/bin/bash\necho $USER:$EUID\nexit 0' > /var/tmp/bin/hmmm
root@grafen-MS-7758:~# chmod +x /var/tmp/bin/hmmm
root@grafen-MS-7758:~# exit
odhlášení
grafen@grafen-MS-7758:~$ ([ "grafen" == "$USER" ] && sudo /var/tmp/bin/hmmm) || echo omg
root:0
grafen@grafen-MS-7758:~$ echo $USER:$EUID
grafen:1000
Tak jeste to otestuju.
normalne naprosto vsechno funguje a akorat tady plasis :D
pokud mas ve svym skriptu dalsi sudo, tak je jasny co se tady deje .. nemusis tam vubec davat co pise jmp
-
Tak nevim proc bych mel plasit, testuju chmod coz je prvni prikaz v ftp skriptu a v tom hmmm fara bez dotazu, jedno jeslti "sudo chmod 755 -R /srv/ftp" nebo "chmod 777 -R /srv/ftp", coz zatim neslo.
grafen@grafen-MS-7758:~$ ls -g /srv
celkem 4
drwxr-xr-x 2 ftp 4096 čec 29 19:01 ftp
grafen@grafen-MS-7758:~$ sudo /var/tmp/bin/hmmm
root:0
grafen@grafen-MS-7758:~$ ls -g /srv
celkem 4
drwxrwxrwx 2 ftp 4096 čec 29 19:01 ftp
grafen@grafen-MS-7758:~$ sudo /var/tmp/bin/hmmm
root:0
grafen@grafen-MS-7758:~$ ls -g /srv
celkem 4
drwxr-xr-x 2 ftp 4096 čec 29 19:01 ftp
I cely ftp skrip v hmmm fara, no byt v nazvu diakritika tak se nedivim, ale takhle.
-
Tak nevim proc bych mel plasit, testuju chmod coz je prvni prikaz v ftp skriptu a v tom hmmm fara bez dotazu, jedno jeslti "sudo chmod 755 -R /srv/ftp" nebo "chmod 777 -R /srv/ftp", coz zatim neslo.
grafen@grafen-MS-7758:~$ ls -g /srv
celkem 4
drwxr-xr-x 2 ftp 4096 čec 29 19:01 ftp
grafen@grafen-MS-7758:~$ sudo /var/tmp/bin/hmmm
root:0
grafen@grafen-MS-7758:~$ ls -g /srv
celkem 4
drwxrwxrwx 2 ftp 4096 čec 29 19:01 ftp
grafen@grafen-MS-7758:~$ sudo /var/tmp/bin/hmmm
root:0
grafen@grafen-MS-7758:~$ ls -g /srv
celkem 4
drwxr-xr-x 2 ftp 4096 čec 29 19:01 ftp
ceho o.O ? co tim chces docilit ? co od toho cekas ?
povazuju za vyreseny .. prosim nehraj si s tim sudo dokud si nebudes jisty, ze delas presne to, co si myslis ze delas a ze to skutecne chces .. sudo funguje naprosto spravne, jak spustit skript s jeho pomoci uz ted vis .. obsah skriptu neni predmetem tehle diskuse a nijak se sudo netyka a zadne dalsi sudo ve skriptu nepotrebujes .. pokud chces pod rootem pustit neco (treba skript) jako jinej uzivatel, tak to udelej pomoci su -c
-
Uz to jede, zacalo to davat hlasku "/home/grafen/FTPskript.sh: 2: /home/grafen/FTPskript.sh: Syntax error: "(" unexpected" proc takova zmena najednou nevim,a tuhle hlasku sem opravil prekvapivym zpusobem, #!/bin/sh zmenil na #!/bin/bash, by me taky zajimalo odkad sem tohle prevzal.
prosim nehraj si s tim sudo dokud si nebudes jisty, ze delas presne to, co si myslis ze delas a ze to skutecne chces
Uzil sem pod dosem, winem tak nevim proc bych ted mel davat ruce pryc od za svoje prachy koupeneho pocitace kvuli sudo.
aktualni uprava sudoers
grafen ALL=NOPASSWD: /home/grafen/FTPskript.sh
grafen ALL=NOPASSWD: /home/grafen/RAMdisk.sh
A spoustet se to ma ciste "sudo /home/grafen/FTPskript.sh" a ne "sudo bash /home/grafen/FTPskript.sh".
Zadavani hesla to chtelo kvuli bash prikazu, ikdyz bylo sudoers sprave, a bash sem tam asi zaca davat kvuli chybejicimu parametru spustitelny , a nebo spatne hlavicce #!/bin/sh .
-
bash !== sh
existuje více shellů (http://cs.wikipedia.org/wiki/Unixov%C3%BD_shell) ... :)
-
Uz to jede, zacalo to davat hlasku "/home/grafen/FTPskript.sh: 2: /home/grafen/FTPskript.sh: Syntax error: "(" unexpected" proc takova zmena najednou nevim,a tuhle hlasku sem opravil prekvapivym zpusobem, #!/bin/sh zmenil na #!/bin/bash, by me taky zajimalo odkad sem tohle prevzal.
Výchozím shellem Ubuntu je Dash:
gdh@gdh:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 úno 19 13:13 /bin/sh -> dashDash je lehčí a rychlejší, než Bash, který je s ním kompatibilní, ale umí plno věcí navíc.
Když skript spustíš z shellu přímo, jen zapsáním cesty, třeba takto:
./skriptnahlédne shell do souboru, zda není na prvním řádku cesta k interpreteru, kterému by ho předal, jinak ho zkusí interpretovat sám. Pokud tam najde #!/bin/sh, spustí skript takto:
/bin/sh ./skriptAle v případě, že pro spuštění použiješ příkaz
bash skriptnemá shell žádný důvod zjišťovat, komu skript předat a při vlastní interpretaci je ten první řádek jen pouhým komentářem.