Tip: Tener un directorio compartido entre varios usuarios en Linux

Terminal

Hoy vuelvo con otro tip el cual, en lo personal, uso bastante: poder tener un directorio compartido entre varios usuarios en un Linux. Les pongo en situación, con mi mujer en casa usamos los dos la misma PC con Arch Linux pero cada uno con su propio usuario. Entonces, notamos el problema con aquellas carpetas que compartimos como la música o las fotos, dado que cada uno tenía su propios archivos, duplicando cosas.

Fue entonces que pensamos hacer una carpeta compartida, pero he ahí el problema de los permisos. Si la carpeta es mía ella no la ve, si el archivo lo creo yo, ella no lo borra y así. Al comienzo, el parche era que le dábamos permisos 777 a esos archivos cada vez que editábamos algo para que el otro accediese hasta que encontramos la solución, ¡los permisos del grupo!

¿Qué son los permisos del grupo?

Eso es lo mejor, asignarle a ese directorio compartido y a todo su contenido un grupo especial con permisos de escritura y lectura, con el cual todos los miembros del grupo tendrán acceso a dicho directorio. Esto permite entonces, que con solo agregar nuestros usuarios a dicho grupo ya podemos interactuar en ese directorio.

¿Y cómo lo configuro?

Esta es la mejor parte y procedo a comentarles como lo hice yo con mi mujer. Lo primero es crear ese directorio, que para el ejemplo llamaré «compartido«.

sudo mkdir /home/compartido

Lo creo dentro de /home y fuera de nuestras cuentas, para evitar que los directorios superiores molesten con sus propios permisos. Ahora deberemos crear el grupo, al cual le pondremos «compartidos»

sudo groupadd compartidos

Y le asignamos este grupo al directorio que creamos antes y también le cambiamos los permisos, para que todo lo que creemos dentro, ya sean directorios o archivos también pertenezcan a este grupo.

sudo chgrp -R compartidos /home/compartido
sudo chmod g+s dirname

Además, tenemos que agregar nuestros usuarios al mismo. Entonces deberemos repetir este comando por cada uno:

sudo usermod -G compartido sebastian
sudo usermod -G compartido mimujer

Hasta ahora, tenemos el directorio «/home/compartido» el cual pertenece al grupo «compartidos«, con lo que todos los usuarios miembros del mismo podrán acceder y todo lo que se cree en el directorio, pertenecerá al grupo con lo que cualquiera de nosotros podrá verlos.

Ahora solo falta un último paso, que puede ser opcional, pero es cambiar la umask de los usuarios, para asegurarnos que cada nuevo archivo que creemos, sea modificable por los otros miembros del grupo. Esto afecta a todo el usuario, no solamente al directorio, así que tienen que ver si les sirve o no. En mi caso, como solo mi mujer y yo usamos el sistema, no nos molesta y nos asignamos un umask de 002, lo que significa que todo archivo creado comienza con permisos 775.

Editando el umask

Para editar el umask, en cada usuario hay que editar el archivo .profile o .bashrc que está dentro del home del usuario y modificar el valor de umask por el número deseado. Si no está la opción debemos agregarla.

También se puede editar el archivo /etc/profile con lo que el cambio afectará a todos los usuarios

Entonces, en la consola ponemos:

sebastian@multivacs ~> vim .profile

Y veremos algo así:

vi-profile2

Entonces, vamos hasta el renglón que dice umask, apretamos la letra i para poder editar y eliminamos el # para quitar el comentario. Le cambiamos el número a 002. Si la linea no aparece, deberán agregarla.

Una vez terminado, apretamos la tecla Esc para salir del modo edición y entonces escribimos :+q+w. Lo que hace que guardemos los cambios y salgamos del Vi.

Les quedará como en esta imagen:

vi-profile

¡Y listo!, si cierran su sesión de usuario y la vuelven a abrir se tomarán los cambios, con lo que ya estará funcionando el directorio compartido.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   elav dijo

    Genial el tip.

  2.   KZKG^Gaara dijo

    Genial.

    Ya hace algunos años me vi en la necesidad de hacer esto mismo, lo que no sabía era lo del umask … yo en vez de eso puse una tarea en el crontab 🙂

    Gracias por el tip

    1.    thalskarth dijo

      Sí, la del crontab también es buena. ¿Qué le pusiste, que asignase permisos 775 al contenido?

  3.   rawBasic dijo

    Genial tip.. ..guardado en caso de ser necesario ;)..

  4.   Luis dijo

    Vale, creas la carpeta /home/compartido y le asignas el grupo «compartido» a la misma pero

    ¿A qué usuario pertenece esa carpeta? O sea ¿Quién es el propietario? ¿Yo, la otra persona o el usuario root cuya cuenta está deshabilitada ya que uso sudo?

    Por otro lado me encuentro con el siguiente problema: Los archivos que yo creo NO pueden ser borrados por la otra persona y los archivos que crea la otra persona NO los puedo borrar yo.

    ¿Qué hice mal?

    1.    thalskarth dijo

      Al crear la carpeta con sudo, debería quedar con el usuario root como owner. Igual eso lo puedes modificar con el comando chown para asignar otro usuario.

      Sobre lo otro, revisa que los archivos que creas lo hagan con permisos 775 (lo que da el umask 002). Si no tienen esos permisos, posiblemente haya alguna configuración erronea.

      Igualmente, vale aclarar que el umask afecta a todo archivo nuevo que se cree dentro del directorio, pero si mueven o copian contenido de otro lado, se mantienen los permisos originales y no los que seteamos al directorio.

      1.    Luis dijo

        ¡Hey! Tienes razón.

        He estado mirando y el problema lo causa eso último que comentas: Al mover un archivo desde otra ubicación a la carpeta compartida, se mantienen los permisos originales.

        ¿Hay solución a esto?

        Me vendría de perlas.

      2.    thalskarth dijo

        En ese caso, lo mejor sería poner un crontab como dijo KZKG^Gaara, en el cual podrías colocar un comando para que les asigne el grupo y permisos al contenido de la carpeta cada X tiempo.
        Es decir algo como esto en el crontab:
        sudo chgrp -R compartidos /home/compartido/*
        chmod -R 775 /home/compartido/*

        A fin de que todo lo nuevo, pase al grupo compartidos con permisos 775.

      3.    thalskarth dijo

        Ignoren el * al final de cada linea, estaba pensando en otra cosa al ponerlo 😛

      4.    Luis dijo

        Gracias amigo.

  5.   ernesto dijo

    Muy buen post, pero yo prefiero tener una particion aparte, en la cual puedo poner todo lo que quiero compartir. Tengo un disco generoso de 500 GB, en el cual 100GB lo uso con Linux y una particion de 400GB (ntfs) en la cual esta toda la musica, fotos, etc… En mi pc somos dos usuarios y cada uno podemos acceder a la particion ntfs y poner y sacar lo que queramos, cuando queramos. Si no quiero compartir nada, tengo algunas cosas en mi usuario. 🙂

    1.    Luis dijo

      Ya, es otra forma de hacerlo pero el problema no es dónde colocar los archivos sino configurar los permisos y controlar el acceso de los distintos usuarios.

      Puedes tenerlo en una partición NTFS, correcto pero también tienes fragmentación, más lento que EXT4 y menor seguridad aunque si te viene bien tenerlo de esa forma es igualmente válido.

  6.   Rainerhg dijo

    Ok! Buen tip, pero yo igual agregaría una tarea para que cambie los permisos a 775 de los archivos nuevos en cada inico de sesión, y solucionaría el problema de los archivos movidos desde otra carpeta.
    Igualmente, ¡muchas gracias por compartir!

  7.   Joaquin dijo

    Interesante, gracias!

  8.   anonimo dijo

    Planteo algo relativo al grupo de compartición primario de algunas distribuciones gnu/linux. Algunas distros crean el usuario con el grupo primario users y no usando un grupo primario igual al nombre del usuario.
    La diferencia es que usando el grupo primario users, por defecto se esta compartiendo todo con el grupo users al cual pertenecerán todos los usuarios creados en esa distro, si en cambio se crean con el mismo grupo que el del nombre del usuario, por defecto no se compartirá nada.

    Ejemplo:
    $ ls -l /home/usuario/*.txt
    -rw-r–r– 1 carlos carlos 126 mar 25 2012 notas.txt

    $ ls -l /home/usuario/*.txt
    -rw-r–r– 1 carlos users 126 mar 25 2012 notas.txt

    No recomiendo usar el grupo primario users, mejor crear el grupo primario propio al momento de crear el usuario.

    # groupadd carlos
    # useradd -g carlos -G lp,wheel,uucp,audio,cdrom,cdrw,usb,lpadmin,plugdev -m -s /bin/bash carlos

    El -g carlos indica que se use el grupo primario carlos.
    Se puede cambiar el grupo primario de un usuario con # usermod -g pero eso no cambiará el grupo primario de todos los archivos y carpetas que ya están en /home/carlos, habrá que cambiarlos a todos.

    Ejemplo: cambia el grupo primario users del usuario carlos al grupo primario carlos y luego cambia
    todos los permisos de archivos y carpetas del usuario carlos para que queden de carlos carlos.

    # groupadd carlos
    # usermod -g carlos users
    # cd /home
    # chown -R carlos:carlos carlos

    Respecto a compartir, se puede crear un usuario llamado compartido con su grupo primario compartido, y para que no haya problemas de permisos al copiar, primero se cambia de usuario
    con «$ su – compartido» luego se copia lo que se desee a /home/compartido, con esto ya los permisos de lo que se copie pasarán a ser del usuario compartido.
    Si ya hay archivos copias pertenecientes a otros usuarios y grupos primarios, hay que cambiarlos a todos.

    # cd /home
    # chown -R compartido:compartido compartido

    Solo queda algo en el limbo, que no se como hacer a copiar de forma gráfica como el usuario compartido o sea sin tener que hacer $ su – compartido

  9.   anonimo dijo

    Era algo muy tonto copiar de forma gráfica, jeje, uso pcmanfm aquí en openbox, pero se puede usar el administrador de archivos que tengan o deseen, total es solo ejecutado como usuario compartido y no como usuario root.

    $ su – compartido
    $ pcmanfm
    $ dolphin
    $ mc
    etc etc

    1.    thalskarth dijo

      Justo que estaba por responder eso. Sino la otra es un crontab que le cambie el owner a los archivos cada x tiempo con un
      chown -R compartido:compartido compartido

  10.   Hugo dijo

    Me parece que el comando «usermod -G elnuevogrupo elusuario» lo que hace es basicamente cambiar el grupo del usuario a «elnuevogrupo». Para agregar un usuario existente a un nuevo grupo, creo que lo correcto sería «usermod -aG elnuevogrupo elusuario»

    Otra cosa es que veo aqui que varias personas recomiendan hacer un «chmod -R 775» pero eso no solamente afecta los directorios, sino también todos los archivos (volviéndolos ejecutables), lo cual introduce un riesgo innecesario. Mejor hacer algo como «find /home/compartido -type d -print0 | xargs -0 chmod 755» y si hace falta con los archivos puede hacerse algo parecido pero usando «-type f» y otorgando permiso 664.

    Finalmente, una manera de hacer que varias cuentas tengan acceso a un archivo o carpeta independientemente de quien sea el propietario o el grupo es usando el comando «setfacl» que está en el paquete acl (si mal no recuerdo). En la página de manual viene bien explicado su uso.

  11.   Unai Martin dijo

    Yo tengo el siguiente problema. He creado 4 usuarios (web1, web2, web3, web4) y quiero crear una carpeta grupo de acceso a los usuarios del grupo web. Cuando creo el archivo .htaccess sé que tengo que poner require valid-user, pero, si pongo require valid-user web1 web2 web3 web4 para que estos puedan acceder a la carpeta con su clave, cuando intento acceder a la carpeta me pide el usuario y clave de cada uno ¿Cómo hago para que solo me pida el usuario y clave del que quiera entrar? porque se supone que uno no conoce la contraseña del otro.

  12.   Gustavo F. Paredes dijo

    Hola.

    La 4ta terminal debería tener en plural el «compartido»:

    sudo usermod -G compartidos sebastian

    sudo usermod -G compartidos mimujer

    Saludos.

    Gustavo

  13.   Iván dijo

    Saludos :

    Estamos migrando del Windows Server a CentOs 6 y aún estamos en proceso de adaptación. Mi consulta : ¿Existe una interfaz gráfica en CentOs para compartir carpetas y dar acceso a los usuarios para que modifiquen, editen y/o eliminen archivos?, o debo hacer todo el procedimiento arriba indicado.

    Gracias por la ayuda.

    1.    Rafael dijo

      Yo tambien estoy instalando un centos 6 y quiero usarlo con samba que me permite compartir archivos de linux y windows, ya me informe un poco, yo no uso mucho linux, pero en el trabajo que estoy me han pedido, como puedo hacer para compartir carpetas pero en modo grafico??.

  14.   Ricardo dijo

    Hola. ¡Por favor ayudenme!… Resulta que por estar haciendo esto en mi usuario en linux mind, ahora perdí privilegios. No puedo ejecutar nada como sudo. me sale el siguiente mensaje «Disculpe, el usuario «nombre_usuario» no está autorizado para ejecutar «comando_a_ejecutar» como root en «nombre_usuario»»

    Creo que al cambiar mi usuario al grupo compartidos, le quité privilegios, y ahora como hago para reestablecerlos???

  15.   Guillermo dijo

    Hey amigo hay alguns forma de hacer lo mismo pero compartiendo archivos con otra personas en Internet LAN

  16.   Fabian dijo

    Para esto deber usar SAMBA como File Server. Saludos

  17.   David dijo

    Hola. Cuando llegué a la orden sudo chmod g+s dirname me indica que no existe el archivo o directorio. ¿Saben cuál es el problema?

  18.   Javier Quiroga Almeida dijo

    ¿Cómo creo un grupo en otro grupo?

  19.   Rodrigo Hernan Ramos dijo

    La linea:
    sudo usermod -G compartido sebastian

    deberia ser:
    sudo usermod -a -G compartido sebastian

    de la primer forma quita el resto de los grupos del usuario.
    y si sos sudo perdes los privilegios