Skocz do zawartości

Logowanie (bash)


Ewelina

Rekomendowane odpowiedzi

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

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

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ę
×
×
  • Dodaj nową pozycję...