Cambiar permisos y propietarios
De la figura anterior vemos que los permisos se pueden cambiar con chmod. Hay tres categorías de propiedad para cada archivo y directorio:
u: un usuario válido con una entrada en /etc/passwd
g: un grupo válido con una entrada en /etc/group
o: otros
Ejemplo:
-rw-rw-r-- 1 jade sales 24880 25 Oct 17:28 libcgic.a
Cambio de permisos con chmod:
Cambio de usuario y grupo con chown y chgrp:
Nota: Una opción útil para chmod, chown y chgrp es -R que cambia recursivamente la propiedad y los permisos a través de todos los archivos y directorios indicados.
Notación simbólica y octal
Los permisos se pueden leer=r, escribir=w y ejecutar=x. Los valores octales de estos permisos se enumeran en la tabla siguiente.
Permisos octales y simbólicos.
Los permisos se aplican al usuario, al grupo y a otros. Un elemento tiene un conjunto de 3 permisos agrupados para cada una de estas categorías.
Cómo leer un permiso de 755 o -rwxr-xr-x
El permiso estándar
El sistema UNIX crea archivos y directorios con permisos estándar de la siguiente manera:
Permiso estándar para:
Files 666 -rw-rw-rw-
Directories 777 -rwxrwxrwx
Umask
Cada usuario tiene una umask definida que altera los permisos estándar. El umask tiene un valor octal y se resta (*) de los permisos octal estándar para otorgar permiso a los archivos (este permiso no tiene un nombre y podría llamarse permiso efectivo del archivo).
(*) Mientras que la resta funciona en la mayoría de los casos, debe notarse que técnicamente los permisos estándar y de umask se combinan de la siguiente manera:
En sistemas donde los usuarios pertenecen a grupos separados, la umask puede tener un valor de 002.
Para los sistemas que colocan a todos los usuarios en el grupo de usuarios, el umask es probable que sea 022.
Permisos SUID
A un ejecutable se le puede asignar un permiso especial que siempre lo hará funcionar como el propietario de este archivo. Este permiso se denomina SUID que significa 'establecer ID de usuario'. Tiene un valor simbólico s o un valor numérico 4000.
Las herramientas administrativas pueden tener establecido el bit SUID para permitir que los usuarios no root cambien los archivos del sistema.
Por ejemplo, el comando passwd puede ser ejecutado por cualquier usuario y cambiará interactivamente su contraseña actual. Esta contraseña se guardará en /etc/passwd o /etc/shadow. Sin embargo ambos archivos pertenecen al usuario raíz con permisos típicos de 644 y 600 respectivamente.
Este problema se ha solucionado estableciendo el bit SUID en passwd, forzándolo a ejecutar como usuario root con los permisos correctos para modificar /etc/passwd o /etc/shadow.
El SUID en passwd
Nota: El bit SUID se muestra en forma simbólica en el comando anterior. Es posible obtener más información acerca de un archivo usando stat, así como ver la representación octal de los permisos de la siguiente manera:
Advertencia
El permiso de SUID a menudo se asocia con problemas de seguridad. Aquí hay un ejemplo que ilustra esto.
1. Un usuario quiere leer el correo de root del usuario. Para ello cambia la variable ambiental de la siguiente manera:
2. El usuario entonces usa el comando mail, esperando ver algo!
Hasta ahora no funciona. ¡Esto sería demasiado fácil!
Pero si se puede convencer a root para que establezca el bit SUID en el correo, los comandos anteriores permitirían a cualquier usuario leer el correo de cualquiera (incluido a root).
Los siguientes ejemplos son peligrosos. ¿Por qué?
Permisos SGID
El SGID es un permiso similar al SUID que se establece para los miembros del grupo. El valor simbólico es s y el valor octal de 2000.
La configuración de SGID en un directorio cambia la propiedad de grupo utilizada para los archivos creados posteriormente en ese directorio a la propiedad del grupo de directorios. No es necesario usar newgrp para cambiar el grupo efectivo del proceso antes de la creación del archivo.
Ejemplos:
El sticky bit
El permiso de sticky bit con el valor 1000 tiene el siguiente efecto:
- Se aplica a un directorio que evita que los usuarios eliminen archivos a menos que sean el propietario (ideal para directorios compartidos por un grupo)
- Se aplica a un archivo utilizado para hacer que el archivo o ejecutable se cargue en la memoria y haga que el acceso o ejecución posterior sea más rápido. El valor simbólico para un archivo ejecutable es t mientras que para un archivo no ejecutable esto es T. Como el caché del sistema de archivos es más genérico y más rápido, los sticky bit en archivos no suelen ser soportados.
Atributos de archivo
Junto con los permisos estándar existe otro sistema que puede usarse para cambiar la forma en que se puede usar un archivo. Las Atributos de archivo no aparecen en el comando 'ls'. El comando 'lsattr' debe ser usado en su lugar. El comando 'chattr' se utiliza para establecer y eliminar estos atributos.
Los siguientes atributos están disponibles. Tenga en cuenta el caso.
'A' Cuando se accede a un archivo con el conjunto de atributos 'A', su registro atime (tiempo de acceso) no se modifica. Esto evita una cierta cantidad de E/S de disco, normalmente para archivos temporales. Tenga en cuenta que algunas herramientas, como tmpwatch, se basan en el registro atime para determinar si el archivo se ha utilizado recientemente. Si el registro atime no se está actualizando, el estado del archivo podría ser mal interpretado.
'a' Un archivo con el conjunto de atributos 'a' sólo puede estar abierto en el modo de agregación para escritura. Sólo el superusuario o un proceso que posea la capacidad CAP_LINUX_IMMUTABLE puede establecer o borrar este atributo. Esto es probablemente más efectivamente utilizado en los archivos de registro del sistema, para evitar que los intrusos quiten la evidencia de su paso. Tenga en cuenta que para que el intruso tenga alguna posibilidad de editar estos archivos de registro, deben tener acceso root. Con el acceso root podrían eliminar el atributo 'a', realizar las modificaciones y restablecer el atributo 'a'.
'c' El kernel comprimirá automáticamente un archivo con el conjunto de atributos 'c' en el disco. Una lectura de este archivo devuelve datos sin comprimir. Una escritura en este archivo comprime los datos antes de almacenarlos en el disco. Nota: Tristemente, mientras el atributo está establecido en el archivo y es mostrado por el comando lsattr, los controladores del kernel del sistema de archivos ext2 o ext3 no lo honran todavía.
'D' Cuando se modifica un directorio con el conjunto de atributos 'D', los cambios se escriben de forma sincrónica en el disco; Esto es equivalente a la opción de montaje 'dirsync' aplicada a un subconjunto de los archivos. Cuando este atributo está en funcionamiento contra un directorio, las siguientes operaciones son síncronas dentro de ese directorio: create, link, unlink, symlink, mkdir, rmdir, mknod y rename.
'd' Un archivo con el conjunto de atributos 'd' no es candidato a la copia de seguridad cuando se ejecuta el programa dump (8).
'i' No se puede modificar un archivo con el atributo 'i' (inmutable): no se puede borrar o renombrar, no se puede crear ningún vínculo a este archivo y no se pueden escribir datos en el archivo. Sólo el superusuario o un proceso que posea la capacidad CAP_LINUX_IMMUTABLE puede establecer o borrar este atributo.
'j' Un archivo con el atributo 'j' tiene todos sus datos escritos en el diario ext3 antes de ser escritos en el propio archivo, si el sistema de archivos está montado con las opciones "data=ordered" o "data=writeback". Cuando el sistema de archivos está montado con la opción "data=journal", todos los datos del archivo ya están registrados y este atributo no tiene ningún efecto. Sólo el superusuario o un proceso que posea la capacidad CAP_SYS_RESOURCE puede establecer o borrar este atributo.
's' Cuando se elimina un archivo con el conjunto de atributos 's', sus bloques se ponen a cero y se vuelven a escribir en el disco. NOTA Al igual que con el atributo 'c', este atributo es honrado por todo excepto por el controlador del sistema de archivos del kernel.
'S' Cuando se modifica un archivo con el conjunto de atributos 'S', los cambios se escriben de forma sincrónica en el disco; Esto es equivalente a la opción de montaje 'sync' aplicada a un subconjunto de los archivos. Se utiliza más a menudo para los "archivos cooked" utilizados por los programas de base de datos para mantener sus datos. Cuando se utiliza de esta manera se evita la adición de dos sistemas de almacenamiento en caché diferentes juntos. El sistema de caché de la base de datos, que está optimizado para que el uso de los sistemas de datos, se permite escribir directamente en el disco.
'T' El atributo 'T' sólo es utilizable cuando se utiliza el kernel 2.6.x. El atributo 'T' está diseñado para indicar la parte superior de las jerarquías de directorios, diseñado para ser utilizado por el asignador de bloques Orlov. Las políticas de asignación de archivos más recientes de los sistemas de archivos ext2 y ext3 colocan los subdirectorios más cerca, permitiendo un uso más rápido de un árbol de directorios si ese árbol de directorios fue creado con un kernel 2.6.
't' Un archivo con el atributo 't' no tendrá un fragmento de bloque parcial al final del archivo fusionado con otros archivos (para aquellos sistemas de archivos que admitan la fusión de colas). Esto es necesario para aplicaciones como LILO que leen directamente los sistemas de archivos y que no entienden los archivos fusionados. Nota: A partir de esta escritura, los sistemas de archivos ext2 o ext3 no (aún, excepto en parches muy experimentales) soportan la fusión de la cola.
'u' Cuando se elimina un archivo con el conjunto de atributos 'u', se guarda su contenido. Esto permite al usuario solicitar su eliminación. Este es otro atributo que está soportado por todo excepto por el propio kernel.
Ejemplo:
0 Comentarios