Cuando creamos un archivo o directorio este se crea con unos permisos
predeterminados, se puede cambiar el modo predeterminado para un directorio,
esto significara que todo lo que se cree dentro de este directorio lo hara
con los permisos que nosotros hemos predeterminado, la orden umask utiliza el
sistema de números para predeterminar permisos.
El valor que nosotros queramos predeterminar lo hemos de restar de 777, por
ejemplo queremos que para el directorio /root los valores predeterminados
sean, Lectura, Escritura, para el usuario. Pues lo que debemos hacer es
restar 177 de 777 y nos quedará 600 que es el valor que queremos.
Ejemplo:------umask 177 /root
Que es esto del Sticky bit ?
Cuando un ejecutable tiene este bit activado (Sticky bit) aparece con una t
situada al final del campo de permisos. Al activar este bit estamos indicando
al sistema que queremos que el programa permanezca en memoria al terminar su
ejecucion, seria parecido a los programas residentes del Dos.
Si se usa sobre un directorio este bit tiene un significado diferente, por
ejemplo:
chmod 1777 /tmp
Todo el mundo podra escribir, pero nadie podrá borrar los archivos creadores
por los demas usuarios.
3.3 eL SuiD y eL SGiD
El tener los permisos suid o sgid activados en algun programa puede resultar
bastante peligroso, muy peligroso :), ya que los exploits de buffer o Stack
Overflow se aprovechan de estos permisos, me explico:
Tener el permisos SUID activado en un programa significa que cuando un
usuario ejecute el programa lo hará como si lo hubiera ejecutado el
usuario del fichero o por el grupo si tiene el SGID activado.
Porque utilizar estos permisos ?
Hay programas que tienen que acceder a zonas donde solo tiene permiso el root
, un ejemplo es el programa passwd el cual sirve para cambiar el password de
un usuario, el propietarios de este programa es el root, si no tuviera
permisos de suid el programa no podria ( o no debería poder ) modificar el
fichero /etc/passwd ya que se hubiera ejecutado con la uid de usuario y por
tanto un usuario normal no puede modificar dicho fichero, para solucionar
esto se le dan permisos de suid, entonces el programa se ejecuta como si lo
hubiera hecho el root y puedes modificar tranquilamente el fichero.
SGID funciona igual que el SUID lo único que le programa se ejecutaria como
si lo hubiera hecho el grupo propietario de dicho programa.
EL peligro de estos permisos:
Si mientras el programa esta ejecucion pudieramos sobreescribir parte de la
pila, cambiar al direccion de retorno de alguna funcion etc... y
consiguieramos que este programa ejecutase codigo que no pertenece a este
programa, dicho codigo se ejecutaria con permisos del propietario del
programa que habitualmente es el root.
Para ver si un programa tiene activa el SUI o SGID basta con hacer un:
ls -l nombredelfichero
rwsr-xr-x root root ....
La s significa que el programa tiene activado los permisos de suid, ya que s
esta en le campo del propietario, Asi que el programa tiene permisos de suid
el propietarios es el root y el grupo propietario del programa es el grupo
root. Dicho programa puede ser ejecutado por cualquiera y cuando se ejecute
lo hara con permisos de root.
NOTA: Para encontrar todos los archivos que tengan activado suid o el sgid :
find / (-perm -004000 -o perm -002000) -type f -print
Donde find empieza a buscar en el directorio raíz (/) y mira todos los
archivos que tienen modo 002000 (sgid) o modo 004000 (suid). Donde la opcion
type f es para que solo busque ficheros normales y -printf para que lo que
encuentre lo saque por pantalla.
Si se esta usando NFS y solo se quieres buscar en el ordenador en el que
estas y que no mire en los archivos montados de otros ordenadores:
find / (-local -o -prune ) ( -perm -004000 -o -perm -002000 )
typef -print
Se ha de tener cuidado a la hora de montar archivos remotos o el floppy o el
CD-ROM ya que en el caso de archivos remotos el usuario remoto simplemente
creando un suid programa en su ordenador y haciendolo correr en la maquina en
la que se montan estos archivos podria pillar permisos de root facilmente ,
por ejemplo el usuario copia en los archivos que se van a montar de un
ordenador en el que tiene permisos una shell con suid activado cuyo
propietario es root y lo ejecuta en el ordenador donde se montan estos
ficheros...
Tb pasaria con el floppy , puedes grabar una shell con suid activado en un
floppy y luego montarlo en el ordenador y ejecutarlo.
Para que no ocurra todo esto no ocurra se ha de impedir que se monten con el
suid y sgid o que el sistema pase de todo estos permisos cuando proviene de un
disquete, archivo remoto y tal..
En los archivos remotos (NSF) se ha de configurar el ficheros /etc/exports
con las restricciones:
nodev
nosuid
Y si se quiere tb
noexec
La opcion nodev hace que el sistema ignore los archivos montados,
Si tiene el suid activado lo ignora.
En el caso de disquetes y tal:
Para unidades, archivos, flopyes etc, que se han de montar el fichero de
configuracion es el /etc/fstab se pueden usar :
nodev
nosuid