Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

miércoles, 13 de julio de 2016

/etc/skel; ¿Qué es y qué podemos hacer con él?

El mundo de Linux es muy basto y adentrarse en cada una de sus características no es tarea fácil; en más de una ocasión podemos ver una serie de ficheros y directorios que, sabemos que están, pero que no sabemos qué hacen... Somos conscientes de que cada fichero o directorio cumple su labor, pero no sabemos qué función pueden cumplir o qué pasaría en caso de que éstos, por el motivo que sea, acabasen corruptos. Uno de esos directorios que pueden pasar inadvertidos es el directorio skel. ¿Qué hace y por qué se encuentra dentro del directorio etc? Puede parecer un fichero poco llamativo, pero cumple una función crucial relacionada con el comando adduser. La generación de unos ficheros y directorios pre-definidos para cada nuevo usuario.

carpeta_skel

Para entenderlo bien, lo mejor sería revisar el fichero de configuración de adduser; llamado /etc/adduser.conf. Dicho fichero de configuración establece las directivas que tiene que seguir el comando adduser cada vez que se añade un nuevo usuario... Es decir que con dicho fichero podemos modificar su comportamiento. Si observáis bien el contenido del fichero en cuestión veréis la siguiente línea:

SKEL=/etc/skel

Dicha línea se encarga de definir qué directorio servirá de "plantilla" para el contenido del directorio home de cada nuevo usuario que vayamos generando. La mejor forma de comprobarlo sería ejecutando un pequeño comando sobre el directorio skel tal que así:

ls -la /etc/skel

Con dicho comando haríamos un listado detallado del contenido del directorio, incluyendo los ficheros ocultos (cuyo nombre empezaría por .), que son los que generalmente van incluidos en todo directorio home, que serían los ficheros: .profile, .bashrc y .bash_logout.  Esto de por sí nos viene muy bien, pues supongamos que queremos que todo nuevo directorio home incluya un script que, por ejemplo, expulse al resto de usuarios que no sean ellos. se podría incluir un script con el nombre expulsor.sh con el siguiente contenido:

  1. #!/bin/bash
  2. $(who |grep -v $(whoami) |awk '{print $2}' > /tmp/resto.txt)
  3. while read SESION
  4. do
  5.         sudo pkill -9 -t ${SESION}
  6. done < /tmp/resto.txt

Al script en cuestión, por cuestiones de seguridad, haríamos que únicamente pudiese ser leído y ejecutado por el nuevo usuario pero que nadie más tuviese acceso a éste, lo cual traducido en permisos quedaría como:

chmod 500 /etc/skel/expulsor.sh

Ahora quedaría la "prueba de fuego": Basta con crear un nuevo usuario mediante el comando adduser con el fin de ver nuestro nuevo script incluido automáticamente dentro del directorio home. En mi caso en concreto he creado un usuario nuevo llamado skeletico, para después consultar el contenido del nuevo directorio home.

nuevo_usuario

Ahora cada nuevo usuario sería capaz de "expulsar" al resto de usuarios de sus sesiones activas, siempre y cuando (obviamente) tenga permisos de superusuario.

Como podéis ver, skel puede servirnos como un poderoso generador de plantillas para los nuevos usuarios que creemos, evitándonos tener que hacer tareas duplicadas y ahorrándonos un tiempo considerable; especialmente si hablásemos de un número alto de nuevos usuarios.

Espero que os haya resultado útil.

Saludos.

3 comentarios :

  1. Hola, no es exclusivamente para la hora de crear cuentas.
    Si un usuario borra su directorio en /home/ y vuelve a entrar en el entorno gráfico, se vuelve a crear una copia del esqueleto, por lo que explicaste.

    También hay un directorio
    /etc/guest-session/skel
    para cuentas volátiles de invitados.

    El problema que solo he podido resolver mediante un script, es que
    muchos archivos de configuración tienen que llevar la dirección absoluta completa es decir incluyendo el directorio $HOME, por ejemplo en los archivos .desktop llevan lo siguiente:

    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=Nombre del programa
    Exec=/ruta/programa.sh
    Icon=/ruta/icono.png
    Terminal=false

    no admiten ~ ni $HOME al menos en para Icon.
    eso pasa con otros programas que no pueden tener dirección relativa (con ~ o $HOME, en su configuración.
    Por ejemplo en firefox. No se puede copiar los archivos de una cuenta normal en el skel de guest y esperar que te funcione bien porque no va a poder abrir esos archivos lo que provoca que se congele el programa.
    Se le puede dar la vuelta de al menos 2 formas que conozco, pero me gustaría conocer la manera correcta de hacerlo para pudiera, por ejemplo, poner skel/ y automáticamente se reemplazara por /home/guest-xxxxx/ y lo mismo para cuentas permanentes nuevas.
    No encontré la documentación y ni siquiera tengo idea si eso está contemplado.
    ?Tienes alguna idea?

    ResponderEliminar