Skip to content

Jumpstart: losowe hasło roota

Solarisowy Jumpstart po oswojeniu jest całkiem niezłym rozwiązaniem. Zwłaszcza, jeśli instaluje się całą masę jednakowych maszyn. W przypadku różnorodnego sprzętu i różnych środowisk w pierwszej chwili można dostać białej gorączki, jak się pomyśli o tym, że dla każdego typu maszyny może być potrzebny osobny profil. Ale jeśli mamy mniej więcej jasne zasady – da się to wszystko fajnie oskryptowić. Dość ciekawym rozwiązaniem są profile tworzone dynamicznie przez skrypt zaczynający instalację – przy odrobinie wysiłku można zrobić niezłe cuda.
Małym minusem może być sysidcfg z parametrem “root_password” – o ile w warunkach domowych zazwyczaj nie jest to problem, to w większym środowisku zdecydowanie nie najszczęśliwszym pomysłem jest posiadanie tego samego hasła na -nastu czy -dziesięciu maszynach. Oczywiście, że można (trzeba) po instalacji je zmienić – tylko kto o tym zawsze pamięta? W zależności od przyjętej jakiejś tam polityki bezpieczeństwa, hasło to prędzej czy później pewnie ulegnie zmianie. Oczywiście można nic nie ustawiać – instalator wtedy poprosi o wklepanie odpowiedniego hasła. Ale to też nie jest fantastyczne rozwiązanie.

A gdyby tak generować losowe hasło w skrypcie kończącym instalację i zapisywać je gdzieś w bezpiecznym miejscu/wyświetlać/cokolwiek sobie użytkownik wymyśli? Pomysł genialny, wydaje się prosty i… się sporo naszukałem, jak wygenerować odpowiedni “hash” hasła na etapie instalacji systemu. Oświecenie przyszło trochę później – przecież w tym momencie w /a mam już zainstalowany system. Powstał w związku z tym kawałek takiego przykładowego (o dziwo działającego), chociaż niezbyt ładnego kodu do skryptu kończącego instalację:

### Password generation

while [ "X${inst_name}" = "X" ]; do
    printf "*** Enter /etc/nodename: "
    read inst_name
done

echo ${inst_name} > /a/etc/nodename

inst_date=`date +"%Y/%m/%d %H:%M"`

echo "Generating password for ${inst_name}.."
PASS=`dd if=/dev/urandom bs=512 count=100 2> /dev/null | digest -a md5 | awk ´{print substr($1,2,10)}´`
HASH=`/a/usr/sfw/bin/openssl passwd -1 ${PASS}`

echo "hostname                  inst. date       password  "
echo "-----------------------------------------------------"

printf "%-25s %-16s %-10s\n" "${inst_name}" "${inst_date}" "${PASS}"

ed -s /a/etc/shadow <<EOF
,s#^root:[^:]*#root:$HASH#
w
q
EOF

# set the flag so sysidroot won't prompt for the root password
ed -s ${SI_SYS_STATE} <<EOF
g/# root password/s/^./1/
w
q
EOF

Co z tym dalej? A to już Twoja, czytelniku, inwencja…

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*

Captcha
Enter the letters you see above.