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.
Entonces, en la consola ponemos:
sebastian@multivacs ~> vim .profile
Y veremos algo así:
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:
¡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.
28 comentarios, deja el tuyo
Genial el tip.
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
Sí, la del crontab también es buena. ¿Qué le pusiste, que asignase permisos 775 al contenido?
Genial tip.. ..guardado en caso de ser necesario ;)..
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?
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.
¡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.
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.
Ignoren el * al final de cada linea, estaba pensando en otra cosa al ponerlo 😛
Gracias amigo.
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. 🙂
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.
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!
Interesante, gracias!
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
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
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
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.
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.
Hola.
La 4ta terminal debería tener en plural el «compartido»:
sudo usermod -G compartidos sebastian
sudo usermod -G compartidos mimujer
Saludos.
Gustavo
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.
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??.
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???
Hey amigo hay alguns forma de hacer lo mismo pero compartiendo archivos con otra personas en Internet LAN
Para esto deber usar SAMBA como File Server. Saludos
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?
¿Cómo creo un grupo en otro grupo?
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