Cada cop hi ha més equips UNIX personals administrats pel propi usuari. Si bé és relativament sencill instalar el SO, sovint s'oblida fer un bon repas al procés de post-instalació.
L'objectiu d'aquest document és el de donar unes recomenacions generals per tal que els usuaris que hagin optat per instalar-se un UNIX als seu equip personal, o siguin administradors d'algún servidor UNIX puguin protegir-lo mínimament.
Cada recomenació ve acompanyada d'exemples d'aplicació en diferents SO UNIX, però cal tindre en compte que un canvi de versió d'un determinat SO pot variar el mètode d'aplicació en aquell SO, o inclús invalidar-lo.
A banda d'això, és una bona mesura el no instalar ni activar aquells serveis aplicatius que no s'hagin d'utilitzar (tftpd, httpd, ftpd, finger, rpc, nfs, ...).
Solaris, IRIX:
Editar /etc/default/login i revisar les variables CONSOLE i PASSREQ per tal que quedin tal com segueix:
# If CONSOLE is set, root can only login on that device. # Comment this line out to allow remote login by root. # CONSOLE=/dev/console # PASSREQ determines if login requires a password. # PASSREQ=YESHP/UX:
Editar /etc/securetty i definir-hi els accessos que permetrem com a root.
Exemple:
# accès limitat a la consola: consoleLinux:
Editar /etc/securetty, i per limitar els accessos a la consola cal indicar-hi:
#acces limitat a la consola i a algunes sessions X /dev/console local:0 :0 nom_maquina:0
Si necessitem accés a root encara el podem aconseguir des d'un compte d'usuari utilitzant la comanda "su -" (el hacker necessitaria conèixer 2 passwords).
SunOS, OSF/1:
Editar el fitxer /etc/group i afegir una línea amb identificador de grup 0, ón hi haurà la llista de usuaris autoritzats a fer `su - root'.
system:*:0:usuari1,usuari2,usuari3HP:
No existeix l'opció de fer-ho via el grup 0 del /etc/group però es pot fer amb les ACL.
Les Access Control List permeten donar permisos sobre un fitxer especificant una llista de usuaris o grups. Així es pot limitar qui utilitza el binari "su", però la limitació serà per fer su a qualsevol usuari. No sols a root.
La manera de fer-ho seria:
chacl `(%.g1,r-x)(%.g2,r-x)' /bin/suAixí sols podrien utilitzar "su" els dels grups g1 i g2.
Solaris, IRIX:
No funciona aquesta opció del /etc/group. Es pot fer que la comanda /bin/su pertanyi a un determinat grup de usuaris, que serien els únics amb dret a utilitzar-la.
Adicionalment utilitzant el fitxer /etc/default/su es pot enviar un avís a consola cada cop que algú utilitzi amb èxit la comanda "su" per obtindre accès a root:
# CONSOLE determines whether attempts to su to root should be logged to the named device # CONSOLE=/dev/consoleLinux:
La utilitat "sudo" ens permet executar comandes de superusuari desde un usuari qualsevol. Es configura en el fitxer /etc/sudoers i allí especificarem quins programes es podran utilitzar en modus root als usuaris autoritzats.
Aquesta utilitat la combinariem amb un "chmod o-x /bin/su", i després, fent "sudo su", els usuaris autoritzats podran fer "su root".
Limitarem aquest cas a les hores laborables, durant les que quals amb mètodes que explicarem més endavant podrem advertir aquests accessos.
#!/bin/sh
# NOM FITXER: nom_script_que_treu_la_prohibicio
# Eliminar la possibilitat de que es pugui fer "su root" a base de
# canviar la llista de usuaris autoritzats a sols "root".
# S'executa amb un cron a les 20:00 dels dies laborables
#
\cp -f /etc/group /etc/group.bak
cat /etc/group |
sed 's/system:\*:0:root,usuari1,usuari2/system:\*:0:root/g'
> /etc/group.1
\mv /etc/group.1 /etc/group
#!/bin/sh
# NOM_FITXER: nom_script_que_prohibeix_utilitzar_su
# Donar dret de fer "su root" a un grup de usuaris a base de canviar
# "root" per la llista de usuaris que ens interessi.
# S'activa amb un cron a les 8:30 dels dies laborables
#
\cp -f /etc/group /etc/group.bak
cat /etc/group |
sed 's/system:\*:0:root/system:\*:0:root,usuari1,usuari2/g'
> /etc/group.1
\mv /etc/group.1 /etc/group
I les líneas a afegir al crontab de root són:
30 8 * * 1-5 nom_script_que_treu_la_prohibicio 0 20 * * 1-5 nom_script_que_prohibeix_utilitzar_su
Una bona norma pot ser denegar l'accès de root via FTP, ja que sovint sols ens cal llegir, i si necessitem escriure la sol.lució és executar l'FTP desde root i entrar a la màquina remota com a un usuari sense privilegis.
SunOS, OSF/1, Solaris, AIX, Linux, IRIX:
/etc/ftpusers
# Llista de usuaris a qui deneguem l'entrada via FTP root usuari-malevol-1 usuari-malevol-2
Amb tcsh:
L'ordre de execució dels fitxers de configuració en SunOS, Solaris, Linux, IRIX i OSF/1 és: /etc/csh.cshrc, /etc/csh.login, $HOME/.tcshrc, $HOME/.cshrc (si no existeix el $HOME/.tcshrc) i $ HOME/.login.
# /bin/tcsh # # Autologout als 45 minuts com a variable no modificable set -r autologout = 45Amb zsh i bash:
Els fitxers de configuració són /etc/zshrc (que afecta a tots els usauris), i $USER/.zlogin.
# desconnexió després de 600 segons d'inactivitat TMOUT=600Solaris 2.X & IRIX:
Editar el fitxer /etc/default/login.
# TIMEOUT sets the number of seconds (between 0 and 900) to wait before # abandoning a login session. # TIMEOUT=300
Un exemple per permetre sols connexions -de qualsevol tipus- als ordinadors "amic1" i
"amic2" seria el que s'indica. Es important posar el nom complert (amic1.organitzacio.pais) o molt millor la adreça IP.
/etc/hosts.allow
ALL: LOCAL, amic1.etse.urv.es, amic2.etse.urv.esI deixar el /etc/hosts.deny amb ALL: ALL per denegar a tots els restants.
Ho podem aplicar també per protocols, per exemple per permetre sols connexions
ssh des de determinats ordinadors
/etc/hosts.allow
sshd: ord1.etse.urv.es, ord2.etse.urv.es
I amés podem utilitzar el /etc/hosts.deny per fer log de les connexions denegades:
ALL: ALL: ( /usr/bin/logger -p local1.notice "%a - %c -%u" ) &
(xdm-config)
...
DisplayManager*startup: /usr/openwin/lib/xdm/Xstartup
#!/bin/sh
#
# Xstartup
# This program is run as root after the user is verified
# ----- --------
if [ -f /etc/nologin ]; then
exit 1
fi
#
/usr/ucb/logger -p local1.info "(XLogin) $USER desde $DISPLAY"
if [ $USER = "root" ] && [ $DISPLAY <> ":0" ]
then
# Sovint aquest logger NO surt, problemes amb el "exit 1" (?)
/usr/ucb/logger -p local1.info "(XLogin Frustrat) $USER desde $DISPLAY"
exit 1
fi
#
exit 0
Solaris, Linux:
La instalació del SO ja genera un /etc/shadow per /etc/passwd.
Cal revisar que tant els fitxers generats com el /etc/syslog.conf estan protegits contra escriptura per a la resta del mon.
Exemples:
# Per rebre informació d'errors de "su" a la primera, de "telnet" a # la cinquena i alguns errors de ftp daemon,auth,user,kern,*.emerg;*.alert;*.crit /security/nom-maquina daemon,auth,user,kern,*.emerg;*.alert;*.crit root,usuari1,usuari2 # Avís quan algú es connecta com a root amb èxit (no avisar a root!) auth.notice user1, user2 # Definició d'alarmes locals que s'activaran amb : # % logger -p local0.info "....." # pot servir també per enviar avisos als usuaris. local0.info /security/locals local1.info usuari1,usuari2,usuari3 # Els avisos del sendmail sols es rebran si s'engega el # sendmail amb l'opció de debugger "-dX" ón X és un numero. # L'exemple següent envia les logs al fitxer de la maquina # declarada com a `loghost'. I aquella els redistribueix. # atenció al bug de Solaris 2.4 sobre els "loghost". mail.debug ifdef(`LOGHOST', /var/log/syslog, @loghost)Com a protecció adicional és interessant protegir el fitxer de syslog:
chmod 640 syslog.conf
# Alias del `ls' per tal de detectar fitxers `ocults' # alias ls = 'ls -F'Aquest codi cal posar-lo al .login, .cshrc, /etc/csh.cshrc, .zlogin ... o qualsevol altre fitxer similar.
# cerca de fitxers amb user ID en execució find / -name root -perm +4000 -print # cerca de qualsevol fitxer amb la `s' en un file system ncheck -s /dev/...