Ewelina Napisano Listopad 6, 2006 Zgłoszenie Share Napisano Listopad 6, 2006 Napisać skrypt "logowanie", który będzie symulował panel logowania systemu linux. Podawana ma być nazwa użytkownika (jawnie), a następnie hasło (ukryty text). W pliku "hasla", jeżeli jeszcze nie ma wpisu o podanym loginie i haśle należy dopisać te dane w postaci "login haslo" (różnica pomiędzy > a >>). Natomiast w pliku "informacje" należy przechowywać informacje o logowaniach tzw. logi, które posłużą do drugiej czesci zadania (forma dowolna według uznania programisty). II część Parametrami skryptu "logowanie" powinny byc informacje o tym kiedy zmienić hasło danego użytkownika (wywołać komendę passwd). Zmiana hasła następuje po upłynięciu określonego w parametrze okresu czasu przykładowe wywolanie skryptu ./logowanie -g 2 oznaczać to będzie, że jeżeli ostatnie logowanie było conajmniej 2 godziny temu to należy zaproponować użytkownikowi zmianę hasła i uruchomić polecenie passwd. Pozostałe opcje: -d - dni -g - godziny -m - minuty -s - sekundy Problem. W warunku zaznaczonym na czerwono nie wiem dlaczego nie chce mi działać funkcja read i case a moim zdaniem wszystko jest poprawnie napisane i nie wiem jak to poprawić. I jeszcze jedno w jaki sposób mogłabym zrobić nowe hasło do odpowiedniego loginu, ponieważ nie wiem jak zrobic zeby poprzednie hasło się skasowało i w jego miejsce było podane nowe hasło. Bo teraz mam zrobione poprostu że do pliku dopisywany jest ten sam login ale z innym hasłem. #!/bin/bash echo -n "Login: " read loginCtrl echo -n "Haslo: " read -s hasloCtrl #echo "$(date +%s) $loginCtrl" >> informacje; echo #sprawdza czy plik z haslami istnieje if [ ! -e hasla ]; then >hasla fi if [ ! -e informacje ]; then >informacje fi #sprawdza czy login został podany if [ "$loginCtrl" == "" ]; then echo "nieprawidlowy login" exit 1 fi #warunek ktory odczytuje dane z pliku, jeżeli nie znajdzie loginu to #wykonywana jest klauzula else grep $loginCtrl hasla | if read field1 field2; then login=$field1 haslo=$field2 if [ "$login" == "$loginCtrl" ] && [ "$haslo" == "$hasloCtrl" ]; then cat informacje | tail -n 1 | if read loginTime loginName; then now=`date +"%s"` lastlog=$(($now-$loginTime)) case "$1" in "-d") if [ $(($lastlog/86400)) -ge "$2" ]; then ./zmienhaslo fi ;; "-g") if [ $(($lastlog/3600)) -ge "$2" ]; then ./zmienhaslo fi ;; "-m") if [ $(($lastlog/60)) -ge "$2" ]; then ./zmienhaslo fi ;; "-s") if [ $(($lastlog)) -ge "$2" ]; then echo "Czy chcesz zmienic haslo?" echo "t-tak n-nie" read d case "$d" in "t") echo "Podaj nowe haslo do $loginCtrl " echo "Haslo: " read -s hasloCtrl if [ "$hasloCtrl" == "" ]; then exit 3 fi echo "$loginCtrl $hasloCtrl" >> hasla echo "Nowe haslo do $loginCtrl zostalo utworzone" ;; "n") exit 2 ;; esac fi ;; *) echo "zly parametr" ;; esac fi echo $(date +%s) $loginCtrl >> informacje fi else echo "$loginCtrl $hasloCtrl" >> hasla echo "stworzone haslo dla uzytkownika $loginCtrl" fi Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
HAL9000 Napisano Listopad 7, 2006 Zgłoszenie Share Napisano Listopad 7, 2006 Witam Swoją odpowiedź zacznę od cytatu z filmu Poranek kojota Ale jak to wydymali? a odnosi się on do logowanie -d,g,... to ma być bez nazwy użytkownika trochę to głupie! ale nie ważne. W zastepstwie login haslo do pliku hasła proponuje dodawać w formie $login\t`openssl passwd $haslo` będzie fajniej wyglądało Nie chce mi się tego sprawdzać przejrzałem pobieżnie a na czerwono nic nie ma więc ... Zmiana hasła w pliku można uzyskać w następujący sposób zmianah() { STAREH=`grep $login hasla | cut -f2` #tu pytania o nowe haslo NOWEH=`openssl passwd $nhaslo` sed -i 's|$STAREH|$NOWEH|g' hasla } Niedogodność w takim zapisie polega na tym, że jeżeli są 2 lub > identycznych hasel wszystkie zostaną zmienione (można oczywiście zamianiać całe wpisy czyli login + hasło) i pola w pliku mają być rozdzielone tabulatorem można oczywiście spacją lub czymkolwiek innym ale wówczas należy użyć opcji -d z cut. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@WalDo Napisano Listopad 7, 2006 Zgłoszenie Share Napisano Listopad 7, 2006 Chodzi o fragment umieszczony miedzy znacznikami [ color=#FF0000 ] a [ /color ] co akurat wewnatrz znaczników code czy codebox nie jest interpretowane. Wewnatrz "case" ponizej badania wartosci "-s". Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Ewelina Napisano Listopad 7, 2006 Autor Zgłoszenie Share Napisano Listopad 7, 2006 Tak chodzi mi to ten fragment umieszczony między [ color=#FF0000 ] a [ /color ] Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Ewelina Napisano Listopad 9, 2006 Autor Zgłoszenie Share Napisano Listopad 9, 2006 W jaki inny sposób mogłabym zapisać ten kod nie używając read. grep $loginCtrl hasla | if read field1 field2; then login=$field1 haslo=$field2 fi Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się