Non è una polemica sterile: tu ti fidi di rkhunter, ma sei sicuro che sia bug-free? Ok, nessun programma (o quasi) lo è, nemmeno sshd, ma perché credere a rkhunter?Beh, polemica sterile, così la disabilitazione funziona.............
In linea di principio ha ragione cacao74 a fidarsi di più del manuale di sshd, in ogni caso non sarebbe una polemica inutile, perché ci sarebbe un errore o nel manuale o, peggio ancora, nell'implementazione di sshd, da segnalare agli sviluppatori.
In ogni caso la soluzione migliore è provare (It may be so, there is no arguing against facts and experiments, disse il saggio I. Newton): volevo farlo io, ma vedo che l'ha già fatto anycolouryoulike da The dark side of the Moon ( ).
Ho poco tempo a disposizione, ma mi son letto la parte di rkhunter dove fa il test di sshd: nel tuo caso dovrebbe mettere un avviso solo nel file di log, solitamente disabilitato, però stampa a schermo il messaggio scorretto per cui cui a root non è permesso il login.
Non ho avuto modo di controllare bene, potrei anche sbagliarmi, ma secondo me il baco è in rkhunter.
Due commenti sullo script supponendo che in sshd_config ci sia la riga:
#PermitRootLogin no
I commenti miei li ho racchiusi fra asterischi ****
Ho cercato con less la stringa PermitRootLogin e sono arrivato alla riga 4939, io inizio a commentare dalla riga 4930 (uso rkhunter 1.2.9):
displaytext " Searching for sshd_config... "
SSHDCONFIG_PLACES="${ROOTDIR}etc ${ROOTDIR}etc/ssh ${ROOTDIR}usr/local/etc ${ROOTDIR}usr/local/etc/ssh"
for I in ${SSHDCONFIG_PLACES}; do
*****cerca sshd_config in queste directory*******
if [ -e "${I}/sshd_config" ]
*****e se trova il file*******
then
FOUND=0
displaytext " Found ${I}/sshd_config"
displaytext -n " Checking for allowed root login... "
***** stampa il messaggio sopra*****
permitrootlogin=`cat ${I}/sshd_config | grep "PermitRootLogin" | grep -v "#"`
*****estrae una riga che contiene PermitRootLogin e non contiene "#", che indica il commento, nel nostro caso permitrootlogin=stringa vuota*****
if [ "${permitrootlogin}" = "PermitRootLogin yes" ]
***non è il nostro caso***
then
FOUND=1
logtext "Info: Found 'PermitRootLogin yes'. Unsafe for production servers..."
logtext "Tip: Change the option in your configuration file (${I}/sshd_config)."
logtext " Use normal user accounts and 'su' to obtain root permissions."
else
permitrootlogin2=`cat ${I}/sshd_config | egrep "PermitRootLogin (no|without-password)" | grep -v "#"`
***anche permitrootlogin2 è vuota per noi****
if [ "${permitrootlogin2}" = "PermitRootLogin no" -o "${permitrootlogin2}" = "PermitRootLogin without-password" ]
then
FOUND=0
logtext "Info: Found 'PermitRootLogin no' or 'PermitRootLogin without-password' in SSH configuration file ${I}/sshd_config"
else
permitrootlogin2=`cat ${I}/sshd_config | grep "PermitRootLogin forced-commands-only" | grep -v "#"`
***ancora vuota***
if [ "${permitrootlogin2}" = "PermitRootLogin forced-commands-only" ]
then
FOUND=1
logtext "Info: Found 'PermitRootLogin forced-commands-only'"
else
permitrootlogin3=`cat ${I}/sshd_config | grep "#PermitRootLogin yes"`
***e anche questa è vuota per noi***
if [ ! "${permitrootlogin3}" = "" ]
then
***permitrootlogin è vuota per noi, quindi non è il nostro caso***
FOUND=1
logtext "Info: Found no PermitRootLogin value in file ${I}/sshd_config. Default value is 'yes'."
else
****questo è il nostro caso: FOUND viene posto =0 e viene assegnata una stringa a logtext, che stampa in un file di log che, se guardi all'inizio dello script, è di default disabilitato (se ho letto bene $DEBUGFILE, $DEBUGLOG e il rinvio a /dev/null all'inizio dello script).
FOUND=0
logtext "Unknown PermitRootLogin value found in file ${I}/sshd_config"
fi
fi
fi
fi
if [ ${FOUND} -eq 1 ]
**** non è il nostro caso, FOUND=0 per noi*****
then
if [ "${ALLOW_SSH_ROOT_USER}" = "0" ]
then
displaytext "${red}Watch out ${NORMAL}Root login possible. Possible risk!"
if [ -z "${permitrootlogin}" ]; then
displaytext " info: No 'PermitRootLogin' entry found in file ${I}/sshd_config"
else
displaytext " info: \"${permitrootlogin}\" found in file ${I}/sshd_config"
fi
displaytext " Hint: See logfile for more information about this issue"
logtext "Warning: root login possible. Change for your safety the 'PermitRootLogin'"
logtext "entry in the SSH configuration file ${I}/sshd_config to 'no', and use 'su -' to become root. "
else
logtext "Remote root login permitted, but allowed by using explicit option"
SIZE=36
jump=`expr ${defaultcolumn} - ${SIZE}`
insertlayout
displaytext -e "${LAYOUT}[ ${OK}OK${NORMAL} (Remote root login permitted by explicit option) ]"
fi
****** attenzione!*******
else
***ecco l' else corrispondente a FOUND diverso da 1, come nel nostro caso in cui è 0***
SIZE=36
jump=`expr ${defaultcolumn} - ${SIZE}`
insertlayout
displaytext -e "${LAYOUT}[ ${OK}OK${NORMAL} (Remote root login disabled) ]"
fi
*****ecco che displaytext ci dice che il login a root è disabilitato quando non lo è*******
Naturalmente, avendo fatto le cose abbastanza in fretta, posso anche essermi sbagliato in qualche passaggio, nel qual caso chiedo venia.
Se altri mi confermano il baco, forse converrebbe scrivere due righe a chi sviluppa rkhunter.
Comunque quello che mi preme sottolineare è che, dal mio punto di vista, è una grave falla della sicurezza fidarsi di un programma piuttosto che di un altro (fra l'altro molto ben sviluppato e testato) quando ci sono risultati contrastanti e in aperta contraddizione con la documentazione di un programma, soprattutto se non si fa alcuna prova trascurando del tutto l'anomalia...