Crear y configurar directorios con GID definido para la colaboración

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.

Leave a Reply

Your email address will not be published. Required fields are marked *