Próbowałem utworzyć użytkownika z hasłem za pośrednictwem ssh (z uprawnieniami roota) w następujący sposób:
ssh [email protected] useradd -p $(openssl passwd -1 1234) newuser
W ten sposób mogłem pomyślnie utworzyć konto o nazwie newuser
, ale nie mogłem zalogować się przy użyciu oczekiwanego hasła (które jest 1234
)
Nie ma znaczenia, jeśli dodam podwójne cudzysłowy:
ssh [email protected] "useradd -p $(openssl passwd -1 1234) newuser"
A potem zastanawiałem się, czy mogę wygenerować zaszyfrowane hasło i zapisać je jako zmienną lokalnie, ale nadal bez powodzenia.
password=$(openssl passwd -1 1234)
ssh [email protected] "useradd -p $password newuser"
Czy jest coś, za czym tęsknię? Z góry dziękuję!
command-line
ssh
password
users
amigcamel
źródło
źródło
Odpowiedzi:
Jest to klasyczny problem cytowania.
Problem: Bez cudzysłowu lub podwójnego cudzysłowu zastępowanie poleceń (
$()
) i rozwijanie zmiennych ($
zwrócony hasłem sopenssl
są traktowane jako wskaźnik zmiennej) są wykonywane w środowisku lokalnym, a nie w zdalnej powłoce.Rozwiązanie: użyj pojedynczych cudzysłowów wokół
useradd
polecenia używanego zssh
lokalną powłoką, aby zapobiec zastępowaniu komend i rozszerzaniu zmiennych w środowisku lokalnym, pozwól, aby ekspansje odbywały się w zdalnej nie-logującej się, nieinteraktywnej powłoce:Zwróć uwagę na cytaty.
Problemy z bezpieczeństwem:
root
Logowanie SSH powinno być wyłączone, jeśli musisz je włączyć, dozwolone powinno być tylko uwierzytelnianie oparte na kluczachMD5 jest już zepsuty i bez soli zostajesz poddany prostemu atakowi na tęczową tablicę (nawet nie wymaga brutalnego forsowania / ataku słownikowego);
openssl passwd
jednak generuje losową sól. W każdym razie powinieneś naprawdę rozważyć użycie SHA-2 z soleniemHasła przekazywane jako argumenty do poleceń mogą być widoczne dla innych procesów w (zdalnym) systemie; zależy to od sposobu
procfs
zamontowania twojego (spójrz nahidepid
), i jeśli polecenie przepisuje się samo (prawdopodobnie w tym przypadku tak nie jest)źródło
crypt(3)
system Linux i oznaczony$1$
identyfikatorem nie jest taki sam jak zwykły algorytm skrótu MD5, podobnie jak skróty hasła$5$
i$6$
skróty hasła nie są zwykłe SHA-256 i SHA-512 . Metoda oparta na MD5 ma stałą liczbę iteracji, co jest największym problemem z nią.Jak zauważył @heemayl, algorytm skrótu hasła MD5 jest przestarzały, a obecne systemy mają nowsze skróty hasła oparte na SHA-2, które mają konfigurowalny współczynnik pracy. Ale narzędzie wiersza poleceń OpenSSL nie obsługuje tych.
chpasswd
Narzędzie , jednak pozwoli Ci zmienić hasło użytkownika w zależności od ustawień systemowych.Powinno to pozwolić Ci utworzyć nowego użytkownika i zmienić jego hasło na zdalnym końcu.
chpasswd
pobiera nazwę użytkownika i hasło ze standardowego wejścia, a nie z wiersza poleceń. Jest to w rzeczywistości zaleta, ponieważ argumenty wiersza poleceń są widoczne dla wszystkich innych procesów w systemie, więc jeśli zostaną uruchomioneopenssl passwd
na pilocie, hasło będzie na chwilę widoczne dla wszystkich procesów w systemie.Nie jestem pewien, czy istnieje gotowe narzędzie wiersza poleceń do generowania skrótów haseł znane z
crypt(3)
funkcji systemowej . Perl ma wbudowanącrypt
funkcję , ale nadal trzeba wygenerować odpowiednią sól.źródło