viernes, 2 de agosto de 2013

Compartiendo archivos/directorios en linux

Hola :),

Nadie vive en el vació, y yo tampoco :P, de menos en mi Linux hay 2 usuarios (en realidad somos 3 :p ), yo y un tal root que a veces de pasada me dice cosas como root:Oye!!!, revisando tu home encontré unas cosas interesantes y te las copie, ¿no te importa?, verdaaaaad. Yo pensando: demonios, y ése, ¿quien se cree?, ni siquiera se lo que me pirateo el muy ...., pues bueno, también en algunas ocasiones mi compañera (usuario) de uso de la pc me dice "Oye, tengo un vídeo que es taaaan lindo que quiero que lo veas", y pues, o voy a ver el vídeo que es taaan lindo, o lo copio desde su home a mi home con sudo ya que no lo puede poner en algún lugar desde donde yo lo pueda copiar, o ella dejármelo para que vea luego, de cualquiera de las 2 formas tengo que dejar de hacer lo que estoy haciendo para ir a atender su petición y ver ese vídeo taaan lindo. La cosa es que ya no hay más, tengo que poner una carpeta donde otros usuarios puedan tener acceso a archivos, ya sea de solo lectura o lectura/escritura, pues en mi usuario no va a ser, ¿verdad?.

En realidad resolver esto no es complicado, la gente de UNIX diseño el esquema para lograr esto desde hace mucho, para resolver esto existen los Permisos de archivos, sus dueños y grupos, lo cual no voy a explicar aquí, para eso esta el link anterior :P.

Manos a la obra, a chambiar.

La idea es tener un directorio en algún lugar donde toooodos puedan, leer archivos y también poner cosas para los demás, también tener algun directorio donde solo uno (o un grupo) pueda poner cosas y los demás tener acceso de lectura para ello.

Basado en lo dicho en el párrafo anterior, el directorio donde estará todo lo necesario lo pondremos en /home, ¿por que ahí y no en raiz (/)?, muy simple, si reinstalo el sistema no quiero volver a hacer esto :P, además de que ahí se encuentran todos los directorios de los usuarios :). Lo primero será crear un directorio el directorio Public en /home, en el directorio Public nadie podrá ni crear directorios, ni crear archivos, ni borrar nada (claro que si, root, como siempre, podrá hacer de todo ahí, ¿si no?, ¿quien administra?, necesitamos un gato, ¿no?) pero si podrán ver lo que hay, ese será el inicio de la estructura para compartir, así su administración será mas fácil. En Public habrá una carpeta donde todos puedan leer y escribir, y por su puesto borrar, esa será tierra de nadie, todos ponen cosas, las borran y así, está se llamará allcanwrite (¿pus si no así?, ¿como?). Otro directorio que crearé en Public será uno llamado bin, en el cual pondré la mayoría (si no todos) mis scripts/programas de automatización para que cualquiera los pueda usar (a ver si ya ese tal root deja de entrar a mi home, ¡se que lo hará!, pero creo que al menos será menos), los usuarios comunes no podrán borrar nada ahí, solo será de lectura (para que no borren cosas que ni entienden), pero para el usuario/grupo que desarrolla scripts/programas será de lectura/escritura, para que puedan poner ahí sus cosas que automatizan. Con lo anterior construiremos una estructura como sigue:

/home (aquí solo root puede leer/escribir y todos pueden leer)
    allcanwrite (aquí todos pueden leer/escribir/grabar/borrar, etc.).
    bin (aquí todos pueden leer y solo los desarrolladores pueden grabar/escribir).

Así quedará la cosa (zzzzz, ¿tanto rollo para solo eso?).

Manos a la obra:

Creamos la estructura (necesitamos usar sudo, ya que solo root puede hacer cosas en /home):
  1. sudo mkdir -p /home/Public/allcanwrite
  2. sudo mkdir /home/Public/bin
Nota: la opción -p en la instrucción 1 hace que mkdir cree todos los directorios padre que falten para poder crear /home/Public/allcanwrite, así que después de crear /home/Public, creará /home/Public/allcanwrite

Damos privilegios para que todo mundo haga y deshaga como quiera en allcanwrite:
  • sudo chmod a+w /home/Public/allcanwrite
Nota: a+w = all can write

Creamos el grupo de los desarrolladores (de momento solo yo :P) y los asignamos al grupo:
  1. sudo groupadd publicdeveloper
  2. sudo usermod -G publicdeveloper yo
Nota: si el usuario (yo), está en otros grupos, la instrucción 2 eliminará los otros grupos y solo lo dejará en el grupo publicdeveloper, para evitar esto se puede utilizar la opción -a, quedando la instrucción así:

     sudo usermod -a -G publicdeveloper yo


Cambiamos el grupo del directorio bin y los derechos que tiene el grupo sobre el directorio:
  1. sudo chgrp publicdeveloper /home/Public/bin
  2. sudo chmod g+w /home/Public/bin

Solo queda copiar mis scripts/programas a la carpeta /home/Public/bin, como me encuentro en el grupo de publicdeveloper, no requiero privilegios de root para grabar en dicho directorio, por lo que no necesito sudo, la instrucción queda así:

    cp ~/bin/* /home/Public/bin

Listo, ahora si, todo quedo como esperaba y así sufriré menos :).

Hasta luego.

Vicx.