Strona 1 z 1

[SOLVED] sudo w programie skryptowym

: 02 wrz 2009, 18:40
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???

Odp: sudo w programie skryptowym

: 02 wrz 2009, 21:56
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

Odp: sudo w programie skryptowym

: 05 wrz 2009, 11:28
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.

Odp: sudo w programie skryptowym

: 05 wrz 2009, 21:13
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@

Odp: sudo w programie skryptowym

: 05 wrz 2009, 23:22
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

Odp: sudo w programie skryptowym

: 06 wrz 2009, 16:58
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.

Odp: sudo w programie skryptowym

: 06 wrz 2009, 17:12
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ć

Odp: sudo w programie skryptowym

: 06 wrz 2009, 17:18
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.

Odp: sudo w programie skryptowym

: 06 wrz 2009, 21:20
autor: хur
jedno sudo wywołujące subshella ? (sh -c). Popróbował bym inaczej ale niestety nie mam sudo zainstalowanego :>

Odp: sudo w programie skryptowym

: 07 wrz 2009, 09:59
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.

Odp: [SOLVED] sudo w programie skryptowym

: 09 wrz 2009, 09:51
autor: clansman5
zaloz na skrypt parametr +s, czyli:

Kod: Zaznacz cały

sudo chmod +s skrypt.sh
bedzie uruchamiany z prawami roota

Odp: [SOLVED] sudo w programie skryptowym

: 09 wrz 2009, 20:47
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ć.

Odp: [SOLVED] sudo w programie skryptowym

: 10 wrz 2009, 10:26
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.

Odp: [SOLVED] sudo w programie skryptowym

: 10 wrz 2009, 11:25
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.