[SOLVED] sudo w programie skryptowym

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

[SOLVED] sudo w programie skryptowym

Post autor: LukAs »

Witam.

sudo i grupa poleceń, operacji wymagających praw administratora

Mam taki problem, że

Kod: Zaznacz cały

sudo aptitude updatee && sudo aptitude upgrade -y
działa tak jak powinno, a poniższy kod w skrypcie pyta dwa razy o hasło

Kod: Zaznacz cały

sudo cp -p /etc/apt/sources.list /etc/apt/sources.list-$(date +%d.%m.%Y_%X) 
sudo tee <repozytoria_ubuntu /etc/apt/sources.list 1>/dev/null 
Gdzie problem???
Więcej o mnie znajdziesz na: http://ospulse.pl
Awatar użytkownika
f00sek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 109
Rejestracja: 18 kwie 2009, 15:54
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: sudo w programie skryptowym

Post autor: f00sek »

Może spróbuj napisać skrypt całkowicie bez sudo a uruchamiać go z sudo - ja tak robię i działa śpiewająco;)

Kod: Zaznacz cały

sudo ./skrypt
System.out.println ("Java programmer");
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: sudo w programie skryptowym

Post autor: LukAs »

Problemem jest tee. Widzę, że to nie jest odpowiednie narzędzie, ponieważ tee:
dane, które dostanie na standardowe wejście, wysyła na standardowe wyjście, ale przy okazji zapisuje do podanego pliku.
Podstawowa funkcja tego programu to wyświetlanie wejścia na ekranie, a przy okazji, kiedy potrzebujemy zrobić kopie danych, możemy podać plik, ścieżkę do pliku jako argument.

Bez przekierowania wyjścia na ekran do kosza (1> /dev/null) tee nie pyta dwa razy o hasło. Ale za to robi się smietnik na ekranie bo wiersze z adresami repo. są długie i wszystko się rozwala. Musiałbym wymusić, żeby okno terminala było większe.
Więcej o mnie znajdziesz na: http://ospulse.pl
Awatar użytkownika
dk75
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1142
Rejestracja: 07 mar 2007, 22:59
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: sudo w programie skryptowym

Post autor: dk75 »

sudo jest narzędziem interaktywnym, wymagającym dostępu do wiersza poleceń w celu potwierdzenia przez administratora i jego używanie w skryptach jest raczej problematyczne
do tego wszędzie tam gdzie następuje przekierowanie strumienia danych przez potoki sprawia problemy ( w końcu skoro wymaga dostępu użytkownika a ten dostęp się przekierowuje gdzie indziej to nie dziwne ) i dlatego lepiej w skrypcie nie używać sudo tylko uruchomić cały skrypt przez sudo jak napisał f00sek@
Linux Mint Debian Edition x86_64/2.6.39, Conky 1.8.0, Xorg 7.6/1.10.4 - GNOME 2.30.2, nVidia 285.03
Lenovo T61p, HITACHI HTS722010K9SA00 100GB, ST9250827AS 250GB
http://linuxcounter.net/user/483055.html
bart86
Piegowaty Guziec
Piegowaty Guziec
Posty: 14
Rejestracja: 07 lip 2009, 23:33
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: sudo w programie skryptowym

Post autor: bart86 »

moze nie znam się za bardzo na skryptach ale ja zawsze inaczej używam tej komędy

ja to robie w en sposób

sudo echo "tekst" | sudo tee /ścieżka do pliku

ewentualnie tee z parametrem -e który powoduje dopisanie tekstu i nie kasuje zawartaości pliku

w ten sposób skrypt pyta sie mnie tylko raz o hasło

jak dlamnie źle użyłeś komęde tee bo służy ona do przekierowania ze standardowego wejścia (ekranu) do wybranej lokalizacji (np. pliku) ale musi mieć co przekierować u ciebie prze tee nie ma nic
początkujący ale szybko się uczę :)
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: sudo w programie skryptowym

Post autor: LukAs »

jak dlamnie źle użyłeś komęde tee bo służy ona do przekierowania ze standardowego wejścia (ekranu)
bart86, wejście może pochodzić z: klawiatury, pliku, od wyniku działania programu, wbudowanego w powłokę polecenia czy potoku, przekierowania. Napisać to mogę na wiele sposobów, ale chcę to zrobić tak jak powinno się to robić i żeby kod był zrozumiały.
do wybranej lokalizacji (np. pliku) ale musi mieć co przekierować u ciebie prze tee nie ma nic

Kod: Zaznacz cały

sudo tee <repozytoria_ubuntu /etc/apt/sources.list
< - Odczytuje standardowe wejście z pliku a nie z klawiatury
Działa to tak:
Dla tee za pośrednictwem < zostaje przekazane wejście z pliku repozytoria_ubuntu i zapisane (nadpisanie) do pliku sources.list, który jest parametrem tee. Problemu z podwójnym hasłem występuje tylko wtedy gdy chcę wyjście na ekran przekierować do kosza. Inaczej wszystko działa poprawnie. Użycie echo dla repozytoriów jest niewygodne i zgodne tylko z jedną dystrybucją i jej wersją. Wczytanie adresów z pliku pozwala programowi być zgodnym z każdą dystrybucją opartą na Debianie.
ewentualnie tee z parametrem -e który powoduje dopisanie tekstu i nie kasuje zawartaości pliku
W moim programie repozytoria pochodzą z tego fourm, więc nie ma sensu dublować adresów czyli dodawać je do oryginalnych. A twój kod też wymusza podwójne podanie hasła. Może to być spowodowane złą interpretacją basha lub tak jak pisałem wyżej, tee ma właśnie tak działać tj. paramet zapisu wyjścia do pliku jako kopia danych.
Więcej o mnie znajdziesz na: http://ospulse.pl
bart86
Piegowaty Guziec
Piegowaty Guziec
Posty: 14
Rejestracja: 07 lip 2009, 23:33
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: sudo w programie skryptowym

Post autor: bart86 »

ok to rozumiem

a < nie powinno zostać użyte przed tee

składnia polecenia tee wygląda tak tee "opcja" "ścieżka do pliku"

czyli że znak < nie powinien się tam znajdować
początkujący ale szybko się uczę :)
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: sudo w programie skryptowym

Post autor: LukAs »

Obrazek
Obrazek

A próba użycia innego narzędzia nawet z sudo kończy się:
bash: /etc/apt/sources.list: Permission denied
Ps. Chyba będę musiał przebudować Menu i użyć clear.
Więcej o mnie znajdziesz na: http://ospulse.pl
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: sudo w programie skryptowym

Post autor: хur »

jedno sudo wywołujące subshella ? (sh -c). Popróbował bym inaczej ale niestety nie mam sudo zainstalowanego :>
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: sudo w programie skryptowym

Post autor: LukAs »

xur, miałem to cały czas pod nosem w książce (jeśli mówimy o tym samym). Pierwsze zdanie pochodzi własnie z książki, ale chyba coś źle robiłem bo na wyjściu dostawałem błędy;)
Problem.
Posługując się kontem zwykłego użytkownika, trzeba czasami wykonać za jednym razem kilka poleceń objętych działaniem mechanizmu sudo lub zastosować przekierowanie, które odnosi się do właściwych poleceń, a nie do instrukcji sudo.
Rozwiązanie.
Mechanizm sudo należy wykorzystać do uruchomienia podpowłoki, w której będzie można wywołać grupę poleceń lub przekazać dane za pomocą potoku
sudo bash -c 'polecenie1 && polecenie2 || polecenie3'
Po wprowadzeniu instrukcji typu sudo polecenie1 && polecenie2 || polecenie3 można się przekonać, że drugie i trzecie polecenie są wykonywane z prawami danego uzytkownika, a nie z prawami root. Wynika to z faktu, że program sudo obejmuje swoim działaniem jedynie pierwsze polecenie, a powłoka użytkownika obejmuje operacje przekierowania danych.
Tak powinno to wyglądać

Kod: Zaznacz cały

sudo bash -c 'cp -p /etc/apt/sources.list /etc/apt/sources.list-$(date +%d.%m.%Y_%X) \
&& tee <repozytoria_ubuntu /etc/apt/sources.list 1>/dev/null'
Powyższy tekst pochodzi z ksiązki Bash Receptury. Autor książki nie ma nic przeciwko cytowaniu treści, kodu o ile podane zostanie źródło.

Widzę, że jeszcze długa droga przede mną ;D Dziekia za pomoc.
Więcej o mnie znajdziesz na: http://ospulse.pl
clansman5
Sędziwy Jeż
Sędziwy Jeż
Posty: 77
Rejestracja: 06 sty 2009, 10:59
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [SOLVED] sudo w programie skryptowym

Post autor: clansman5 »

zaloz na skrypt parametr +s, czyli:

Kod: Zaznacz cały

sudo chmod +s skrypt.sh
bedzie uruchamiany z prawami roota
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [SOLVED] sudo w programie skryptowym

Post autor: LukAs »

Dzięki za info, ale robie to z myślą o zwykłych uzytkownikach. Ma 2x kliknąc, a reszte zrobi skrypt. Często o czymś zapominam albi mi się nie chce i muszę się z tym jakoś uporać.
Więcej o mnie znajdziesz na: http://ospulse.pl
clansman5
Sędziwy Jeż
Sędziwy Jeż
Posty: 77
Rejestracja: 06 sty 2009, 10:59
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [SOLVED] sudo w programie skryptowym

Post autor: clansman5 »

LukAs pisze:Dzięki za info, ale robie to z myślą o zwykłych uzytkownikach. Ma 2x kliknąc, a reszte zrobi skrypt. Często o czymś zapominam albi mi się nie chce i muszę się z tym jakoś uporać.
No to dokladnie temu sluzy parametr +s.
Awatar użytkownika
хur
Sędziwy Jeż
Sędziwy Jeż
Posty: 79
Rejestracja: 15 sty 2008, 23:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne

Odp: [SOLVED] sudo w programie skryptowym

Post autor: хur »

clansman5, a skąd ty wziąłeś informację że to będzie działać ? w każdym *nikso-podobnym systemie który widziałem setuid na skryptach jest od bardzo dawna (tudzież od zawsze) wyłączony. Nie mam ubuntu żeby to sprawdzić ale był bym bardzo zdziwiony gdyby w przypadku tej dystrybucji setuid na skryptach działał. Naprawdę nie podejrzewam deweloperów canonicala o aż tak reformatorskie zapędy.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości