El objetivo practico de la creacion de un directorio para la colaboracion, es para un grupo de usuarios los cales pertenecen a un mismo grupo puedan modificar, crear, eliminar y compartir documentos entre ellos.
Pero dejando a un lado la introccion, vamos a comenzar con la exaplicacion de como lograr esto. En el siguinte ejercicio vamos a pertir de los siguientes datos:
Nombre del grupo: sysadmins Usuarios miembros del grupo "sysadmins": carlos, roberto, karina Usuario que no pertenece al grupo: teresa Directorio a compartir: /datos/admins
Vamos a comenzar con la creacion del grupo y usuarios. Para esot voy a utilizar el siguientes comandos:
groupadd sysadmins for usuarios in carlos roberto karina teresa; do useradd $usuarios; done for usuarios in carlos roberto karina teresa; do echo "password" | passwd $usuarios --stdin; done for usuarios in carlos roberto karina; do usermod -aG sysadmins $usuarios; done
Una vez ya creado el grupo y este agregado como grupo suplementario a los usuarios correspondientes, pues procedemos a crear el directorio.
Pero antes de eso vamos a verificar que todo es correcto:
getent group sysadmins for usuarios in carlos roberto karina teresa; do id $usuarios; done groupmems -lg sysadmins grep sysadmins /etc/group
Estos son algunos ejemplos de como puede verificar su trabajo.
[root@class2 ~]# getent group sysadmins sysadmins:x:1001:carlos,roberto,karina [root@class2 ~]# for usuarios in carlos roberto karina teresa; do id $usuarios; done uid=1001(carlos) gid=1002(carlos) groups=1002(carlos),1001(sysadmins) uid=1002(roberto) gid=1003(roberto) groups=1003(roberto),1001(sysadmins) uid=1003(karina) gid=1004(karina) groups=1004(karina),1001(sysadmins) uid=1004(teresa) gid=1005(teresa) groups=1005(teresa) [root@class2 ~]# groupmems -lg sysadmins carlos roberto karina [root@class2 ~]# grep sysadmins /etc/group sysadmins:x:1001:carlos,roberto,karina [root@class2 ~]#
Ahora bien, vamos a crear el directorio para comenzar con lo que realmente importa:
[root@class2 ~]# mkdir -p /datos/admins [root@class2 ~]# ls -ld /datos/admins drwxr-xr-x. 2 root root 6 Apr 25 08:36 /datos/admins [root@class2 ~]#
Como ven, los permisos de este directorio han sido definidos por la “umask”. Pero esto lo vamos a cambiar ahora.
Si queremos que solo los usuarios que pertenecen al grupo “sysadmins” tengas permisos de lectura, escritura y ejecucion sobre este directorio; entonces debemos cambiar el grupo del directorio y los permisos(es de entender que el usuario root tiene acceso total):
[root@class2 ~]# chown :sysadmins /datos/admins [root@class2 ~]# chmod 770 /datos/admins [root@class2 ~]# ls -ld /datos/admins drwxrwx---. 2 root sysadmins 6 Apr 25 08:36 /datos/admins [root@class2 ~]#
Ya habiendo realizado este cambio pueden ver que los usuarios que pertenec al grupo “sysadmins” tienen acceso total, peroaun no terminamos. Porque tambien queremos que los archivos y directorios se creen dentro de este direcotrio automaticamente pertenescan al grupo “sysadmins”; como logramos esto?
[root@class2 ~]# chmod g+s /datos/admins [root@class2 ~]# ls -ld /datos/admins drwxrws---. 2 root sysadmins 6 Apr 25 08:36 /datos/admins [root@class2 ~]#
Tambien se puede hacer este cambio de esta forma:
[root@class2 ~]# ls -ld /datos/admins drwxrwx---. 2 root sysadmins 6 Apr 25 08:36 /datos/admins [root@class2 ~]# chmod 2770 /datos/admins [root@class2 ~]# ls -ld /datos/admins drwxrws---. 2 root sysadmins 6 Apr 25 08:36 /datos/admins
Verificando que estos cambios esten bien aplicados, pues podemos proceder a iniciar como uno de los usuarios que pertenecen al grupo y crear un archivo y directorio:
[root@class2 ~]# su - carlos Last login: Tue Apr 25 08:31:51 PDT 2017 on pts/1 [carlos@class2 ~]$ cd /datos/admins/ [carlos@class2 admins]$ touch 1 ; mkdir 2 [carlos@class2 admins]$ ll total 0 -rw-rw-r--. 1 carlos sysadmins 0 Apr 25 08:44 1 drwxrwsr-x. 2 carlos sysadmins 6 Apr 25 08:44 2 [carlos@class2 admins]$
Ahora vamos a intentar editar el archivo creado por el usuario “carlos” con el usuario “karina”
[carlos@class2 admins]$ ls -ls total 0 0 -rw-rw-r--. 1 carlos sysadmins 0 Apr 25 08:44 1 0 drwxrwsr-x. 2 carlos sysadmins 6 Apr 25 08:44 2 [carlos@class2 admins]$ su - karina Password: Last login: Tue Apr 25 08:31:58 PDT 2017 on pts/1 [karina@class2 ~]$ cd /datos/admins/ [karina@class2 admins]$ ls -ls total 0 0 -rw-rw-r--. 1 carlos sysadmins 0 Apr 25 08:44 1 0 drwxrwsr-x. 2 carlos sysadmins 6 Apr 25 08:44 2 [karina@class2 admins]$ echo "Karina paso por aqui" >> 1 [karina@class2 admins]$ cat 1 Karina paso por aqui [karina@class2 admins]$ ls -las total 4 0 drwxrws---. 3 root sysadmins 24 Apr 25 08:44 . 0 drwxr-xr-x. 3 root root 20 Apr 25 08:36 .. 4 -rw-rw-r--. 1 carlos sysadmins 21 Apr 25 08:47 1 0 drwxrwsr-x. 2 carlos sysadmins 6 Apr 25 08:44 2 [karina@class2 admins]$
Como ven, el usuario “karina” fue capaz de editar el archivo creado anteriormente. Pero que pasa si intentamos eliminar este archivo?
[karina@class2 admins]$ rm -rvf 1 removed ‘1’ [karina@class2 admins]$ ls -ls total 0 0 drwxrwsr-x. 2 carlos sysadmins 6 Apr 25 08:44 2 [karina@class2 admins]$
El archivo fue eliminado. Ahora para terminar este ejercicio; vamos a agregar otro regla o permiso. En este caso queremos que solamente los usuarios que crearon el archivo o directorio pueden eliminarlos. Esto se traduce a que el usuario “karina” no va poder eliminar nada creado por el usuario “carlos”.
Para esto debemos agragar un “sticky bit” al directorio:
[root@class2 ~]# ls -ld /datos/admins/ drwxrws---. 3 root sysadmins 15 Apr 25 08:48 /datos/admins/ [root@class2 ~]# chmod o+t /datos/admins/ [root@class2 ~]# ls -ld /datos/admins/ drwxrws--T. 3 root sysadmins 15 Apr 25 08:48 /datos/admins/ [root@class2 ~]#
O bien pueden hacerlo de esta forma:
[root@class2 ~]# ls -ld /datos/admins/ drwxrws---. 3 root sysadmins 15 Apr 25 08:48 /datos/admins/ [root@class2 ~]# chmod 3770 /datos/admins/ [root@class2 ~]# ls -ld /datos/admins/ drwxrws--T. 3 root sysadmins 15 Apr 25 08:48 /datos/admins/ [root@class2 ~]#
Ahora vamos a probar si estos cambios estan funcionando como esperamos:
[root@class2 ~]# su - carlos Last login: Tue Apr 25 08:44:33 PDT 2017 on pts/1 [carlos@class2 ~]$ cd /datos/admins/ [carlos@class2 admins]$ touch archivo1 ; mkdir directorio2 [carlos@class2 admins]$ ls -las total 0 0 drwxrws--T. 4 root sysadmins 50 Apr 25 08:53 . 0 drwxr-xr-x. 3 root root 20 Apr 25 08:36 .. 0 drwxrwsr-x. 2 carlos sysadmins 6 Apr 25 08:44 2 0 -rw-rw-r--. 1 carlos sysadmins 0 Apr 25 08:53 archivo1 0 drwxrwsr-x. 2 carlos sysadmins 6 Apr 25 08:53 directorio2 [carlos@class2 admins]$ su - karina Password: Last login: Tue Apr 25 08:46:50 PDT 2017 on pts/1 [karina@class2 ~]$ cd /datos/admins/ [karina@class2 admins]$ ls -las total 0 0 drwxrws--T. 4 root sysadmins 50 Apr 25 08:53 . 0 drwxr-xr-x. 3 root root 20 Apr 25 08:36 .. 0 drwxrwsr-x. 2 carlos sysadmins 6 Apr 25 08:44 2 0 -rw-rw-r--. 1 carlos sysadmins 0 Apr 25 08:53 archivo1 0 drwxrwsr-x. 2 carlos sysadmins 6 Apr 25 08:53 directorio2 [karina@class2 admins]$ rm -rvf archivo1 rm: cannot remove ‘archivo1’: Operation not permitted [karina@class2 admins]$ rm -rvf directorio2/ rm: cannot remove ‘directorio2/’: Operation not permitted [karina@class2 admins]$ echo "pero si puedo escribir" >> archivo1 [karina@class2 admins]$ cat archivo1 pero si puedo escribir [karina@class2 admins]$
Esta es una rapida vferificacion. Ahora bien, no hemos intentado acceder a este directorio con el usuario “teresa”
[root@class2 ~]# su - teresa [teresa@class2 ~]$ cd /datos/admins/ -bash: cd: /datos/admins/: Permission denied [teresa@class2 ~]$ cd /datos/ [teresa@class2 datos]$ ls -als total 0 0 drwxr-xr-x. 3 root root 20 Apr 25 08:36 . 0 dr-xr-xr-x. 18 root root 246 Apr 25 08:36 .. 0 drwxrws--T. 4 root sysadmins 50 Apr 25 08:53 admins [teresa@class2 datos]$ cd admins/ -bash: cd: admins/: Permission denied [teresa@class2 datos]$
Como ven no puede acceder, lo cual quiere decir que hemos terminado nuestra configuracion perfectamente.