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