Gnu/Linux‎ > ‎

Administración y Permisos

Cambiar el UID y GID para todos los archivos de un usuario

publicado a la‎(s)‎ 2 oct. 2016 6:25 por Juan Jose Ramirez Lama

Supongamos que queremos cambiar el UID (USER ID) y el GID (GROUP ID) para todos los archivos y directorios de un usuario.  El procedimiento es muy sencillo:
  1. Primero, asigna un nuevo UID al usuario usando el comando usermod.
  2. Segundo, asigna un nuevo GID al grupo usando el comando groupmod.
  3. Finalmente, utiliza los comandos chown y chgrp para cambiar los antiguos UID y GID respectivamente.  Puedes automatizar este proceso con la ayuda del comando find.
Por seguridad, es importante hacer una copia de seguridad de tu sistema antes de hacer esto.
Supongamos que tenemos:
  1. Nombre de usuario: foo
  2. Viejo UID de foo: 1005
  3. Nuevo UID de foo: 2005
  4. Nombre de grupo de usuario: foo
  5. Viejo GID de foo: 2000
  6. Nuevo GID de foo: 3000

Comandos

Para asignar un nuevo UID al usuario llamado foo, escribe:
# usermod -u 2005 foo
Para asignar un nuevo GID al grupo llamado foo, escribe:
# groupmod -g 3000 foo

Tan pronto como como escribes los anteriores comandos, todos los archivo ubicados en el directorio home del usuario tendrán el UID cambiado automáticamente.  Sin embargo, los archivos que se encuentran fuera del directorio home del usuario tendrán que ser cambiados manualmente. 

Para cambiar manualmente archivo con los viejos GID y UID respectivamente, escribe:
# find / -group 2000 -exec chgrp -h foo {} \;
# find / -user 1005 -exec chown -h foo {} \;

El comando -exec ejecuta el comando chgrp o chmod en cada archivo.  La opción -h pasada al comando chgrp/chmod afecta a cada enlace simbólico en vez de a cualquier archivo referenciado.

cron: Programar/Automatizar tareas en Linux

publicado a la‎(s)‎ 13 oct. 2015 7:19 por Juan Jose Ramirez Lama   [ actualizado el 13 oct. 2015 7:23 ]

Imagina que quieres programar una tarea para que se ejecute periodicamente, o en un determinado momento.Por ejemplo, hacer una copia de seguridad de tus archivos el dia 1 de cada mes, o cambiar el fondo de escritorio cada30 minutos. Para programar tareas en Linux, existe un servicio llamado “cron“.


¿Que hace este servicio?

Es un proceso que lee un archivo donde le indicamos las tareas y cuando queremos realizarlas y el se encarga de ejecutarlas por nosotros en el preciso momento que le hayamos indicado.


Pero antes un poco de culturilla. Cron viene de “cronos” y Cronos segun la mitologia griega era el Dios del tiempo.

Y eso es lo que vamos a hacer con “cron”, controlar el tiempo..


Existen utilidades graficas para programar tareas, pero antes lo veremos desde la linea de comandos, pues definir la tarea y el intervalo de ejecucion tampoco es muy complicado.


Si queremos definir una tarea para cron emplearemos el comando “crontab“. Admite los siguientes parametros:

$ crontab -l


Para mostrar un listado de las tareas actuales del usuario


Ejemplo:

root@soledad:~# crontab -l

# m h dom mon dow command

* * * * * echo `date` > /home/jose/Desktop/cron.txt


$ crontab -e


para editar este archivo de tareas que lee el servicio “cron”

$ crontab -r


elimina el archivo crontab del usuario

$ crontab


instala el archivo indicado como archivo crontab del usuario


Bueno, la opcion que nos interesa principalmente es “-e”, con esta opcion creamos (si no existia ya) o editamos el archivo crontab del usuario actual.


Estos archivos se van dejando en /var/spool/cron/crontabs


Todos estos archivos de crontab siguen la misma sintaxis. En ellos tenemos una linea por cada tarea o accion

a ejecutar y esta linea es de la forma:


minutos horas dia-del-mes mes dia-de-la-semana comando


El valor que puede tomar cada campo es como sigue:


- minutos va de 0 a 59 y representa el minuto en que se ejecuta
- horas va de 0 a 23 y representa la hora en que se ejecuta
- dia-mes va de 1 a 31 y es el dia del mes en que se ejecuta
- mes va de 1 a 12 y representa el mes que se ejecuta
- dia-semana va de 0 a 7 y el el dia de la semana en que se ejecuta (
el domingo se puede indicar con el 0 o con el 7)
- comando es el comando a ejecutar


Existe un caracter comodin que es el asterisco “*”, con el se indica “Todo” es decir todos los minutos, o todos los meses,

o todos los dias.


Tambien se admiten rangos, p.ej: 0-30 indicaria todos los valores de 0 hasta 30, o 15,30,45 indicaria tres valores: 1530 y 45


Como comando podemos poner un comando o la ruta a un shell script que queramos ejecutar.


¿Parece complicado?. No, no lo es. Quedara mas claro cuando veamos un ejemplo:


Imagina el siguiente caso:

30 10 * * * tar -cvf /tmp/documentos.tar /home/juaramir/documentos


Esta linea ejecutaria el comando

tar -cvf /tmp/documentos.tar /home/juaramir/documentos

Todos los dias (*), todos los meses (*), todos los dias de la semana (*) a las 10:30

y me serviria para sacar una copia de seguridad de mi carpeta “documentos”.


¿Empiezas a ver las posibilidades?

Podemos programar tareas que se ejecuten cada hora, o cierto dia del mes, o todos los meses, o todos los dias, o solo los

sabados, o miercoles, etc.

Todo depende de la combinacion de valores que pongas en esos campos.


Asi que, todas esas tareas periodicas que realizas ocasionalmente (un script para que me limpie de fi archivo heros no necesarios, copias de seguridad, recordatorios, etc) podrian ser programados para ejecutarse de manera automatica.


Vamos a hacer un ejemplo sencillo para que veas como funciona el “mecanismo” de este reloj.


Con tu usuario ejecuta el siguiente comando:

$ crontab -e


aparece un pequeño editor que te permite modificar el archivo crontab actual.


Desplazate hasta la linea por debajo de:

# m h dom mon dow command


y escribe lo siguiente:

* * * * * echo `date` > /home/juaramir/Desktop/cron.txt


Sustituyendo “jose” por el nombre de tu usuario. Lo que acabamos de hacer es “programar” una tarea para el cron. Podriamos ir añadiendo tareas nuevas (siempre 1 en una linea nueva) y se ejecutarian cuando correspondiese.


Con Control+O guardas los cambios y con Control+X terminas.


Asegurate de que la linea escrita siga el formato que vimos arriba (minuto, hora, mes, etc…) pues en otro caso “cron”

no la entendera, te dara un error y no la ejecutara.


¿Y que estamos haciendo con esta tarea?

Pues algo muy tonto, pero para que compruebes in “situ” sus posibilidades.


con echo `date` estamos obteniendo la fecha actual y la estamos enviando “>” a un archivo llamado cron.txt que
se guardara en nuestro escritorio.


Como estamos ejecutando ese comando, todos los minutos(*), todas las horas(*), todos los dias(*), etc..
El efecto sera que cada minuto, cambiara el valor almacenado en ese archivo y lo puedes ver facilmente
editando el archivo “cron.txt” que se estara guardando en tu escriotorio cada minuto.


Si todo ha ido bien, podras ver como cada minuto se modifica el contenido de ese archivo con el instante de tiempo actual.


Si te complicas con la linea de comandos, puedes hacer esto mismo con utilidades graficas como son Kcron (en KDE) , o grontab y  gnome-schedule en Gnome.


Te voy a poner ahora otro ejemplo mas interesante. Sacar un backup de tu carpeta home.


Para ello emplearemos este comando:

$ tar -jcvf /tmp/CopiaTotal_etc-home_`date +%d%b%y`.tar.bz2 /home /etc

Que nos comprime y empaqueta a .tar.bz2 nuestras carpetas /home y /etc dejandonos en el directorio /tmp con el nombre

“CopiaTotal_etc-home y la fecha”. Este comando seria para una copia “total”, si ya tuvieramos un backup realizado y solo

quisieramos añadir los archivos nuevos o modificados, ejecutariamos un backup diferencial:

$ tar -jcvf /tmp/CopiaDiferencial_etc-home_01`date +%b%y`-`date +%d%b%y`.tar.bz2 /home /etc -N 01`date +%b%y`

Bueno, esto esta muy bien para comandos simples, pero ¿y si quiero hacer algo mas complejo?


Pues como te he dicho antes. En la linea de “comando” del cron no solo puedes poner un comando.

Tambien puedes, programarte un shell script que hiciera lo que tu quisieras y despues lo llamas.


Podria ser algo como esto:

15,30,45 11-12 1,2,3 * * /home/jose/scripts/cambia_wallpaper.sh > /tmp/out.txt 2>/tmp/error.txt


que es:


cada dia 1,2 y 3 de todos los meses.
Para las horas 11 a 12
y minutos 15, 30 y 45
ejecutame el script:


/home/juaramir/scripts/cambia_wallpaper.sh


A este ejemplo le añado 2 redirecciones, que suelen ser utiles cuando estas depurando y quieres guardar trazas

de lo que esta pasando.


> /tmp/out.txt

me guarda la salida del shell script (p.ej las lineas que imprima con un “echo”) en el archivo /tmp/out.txt


y


2> /tmp/error.txt

me envia los errores que se produzcan al archivo error.txt (si estas programando un cron que no te funciona, no estariade mas generar una salida de error y consultarla para ver que esta pasando).


Es un ejemplo ficticio, pero solo para que puedas ver el juego que da crontab a la hora de definir rangoshorarios. Si necesitas el script “cambia_wallpaper.sh”, puedes mirar el post que escribi ayer.


Esto solo ha sido una pequeña introduccion a “cron”, en internet podras encontrar muchos mas tutoriales sobre esta “pequeña”, “precisa” y “potente” herramienta.


!!!Cuidado!!!, Cuidado con el demonio del tiempo!!!


fuente: http://ubuntulife.net

Cambiar Permisos con chmod

publicado a la‎(s)‎ 13 oct. 2015 7:17 por Juan Jose Ramirez Lama

Chmod viene del ingles “change mode” (cambiar modo); y es un comando de los sistemas Unix que permite cambiar los permisos de acceso a un archivo o carpeta.

Cambiar los permisos Usando Números

La idea basicamente es que vamos a cambiar los permisos nuestros, de nuestro grupo, y del resto usando solo una combinación de un número de 3 cifras. Pero para entenderlo bien hay que saber que significa cada numero

4 = lectura
2 = escritura
1 = ejecución

Ahora que sabemos esto podemos entender las posibles combinaciones de estos números

1 = ejecución
2 = escritura
3 (1+2) = escritura y ejecución
4 = lectura
5 (4+1) = lectura y ejecución
6 (4+2) = lectura y escritura
7 (4+2+1) = lectura, escritura y ejecución


Con esto ya sabemos que según la combinación que armemos serán los permisos que asignemos. Bien, pero estos permisos se los podremos aplicar a 3 “grupos”: a nuestro usuario, a nuestro grupo de usuario, y al resto de los usuarios. Para entender bien como funciona esto veamos el siguiente ejemplo:

$ chmod 775 archivo

lo que hicimos en este ejemplo fue aplicar los siguientes cambios:


A nuestro usuario le dimos permisos de ejecución, lectura y escritura; al igual que a nuestro grupo. En cambio al resto de los usuarios solo les dimos permisos de lectura y escritura. Como se esto? mirando el numero “775″ del comando. La primer cifra corresponde a nuestro usuario (el primer “7″). La segunda cifra corresponde a nuestro grupo, y la tercer cifra corresponde al resto de los usuarios. Entonces sabiendo esto ahora es solo cuestion de “jugar” con las combinaciones de números y ver que es lo que pasa.


Otro ejempo más, le daremos permisos de solo lectura a un archivo

$ chmod 444 archivo

y ahora le daremos a nuestro usuario todos los derechos y al resto solo permisos de lectura

$ chmod 744 archivo

Como ven es muy facil, solo hay que aprender para que sirve cada número, y de ahi en más solo ir probando.


Una último tip, lo mismo que vimos anteriormente sirve también para las carpetas. Pero si trabajamos con carpetas querremos aplicar una regla para todo su contenido, entonces para no repetir la operación muchas veces solo lo hacemos una vez pero de forma recursiva, usando la ocpion -R asi:

$ chmod -R 777 carpeta

Ah y no se olviden que para usar el comando chmod deberan estar como root o usar sudo.

Cambiar permisos sin usar los numeros

Vamos a utilizar unas opciones segun nuestras necesidades, y estas seran “u” para el usuario dueño“g” para el grupo dueño“o” para el resto de los usuarios, y “a” para todos los usuarios, incluyendo usuarios de sistema, usuario y grupo dueños. Sabiendo esto estamos en condiciones de entender esta forma de usar chmod, que seria asi:

$ chmod [quien][+/-][permiso] [archivo o carpeta]

donde en [quien] es alguno de los parametros anteriormente explicados (u,g,o,a)[+/-] es para asignar o quitar el permiso que elijamos. En [permiso] podremos colocar: lectura (r), ejecución (x), escritura (w). Veamos un ejemplo

$ sudo chmod a+x archivo

aqui le hemos asignado permisos de ejecución para todos los usuarios en el archivo de prueba que utilizamos. Ademas como en el método anterior, la opcion -R sigue disponible en caso que deseemos hacerlo recursivamente para una carpeta, ejemplo:

$ chmod -R a+rwx carpeta/

aqui le asignamos, en forma recursiva, a todos los usuarios permisos de lectura, escritura y ejecución sobre el fichero “carpeta”.


Fuente: http://www.tinchio.com

Grupos y Usuarios con chown

publicado a la‎(s)‎ 13 oct. 2015 7:15 por Juan Jose Ramirez Lama

Como sabrán en Unix los archivos y carpetas se manejan con un usuario y grupo propietario, lo que permitirá que algunos tengan más derechos que otros; por ejemplo para acceder al archivo, modificarlo, etc.


El comando chown lo que nos va a permitir es establecer este usuario y grupo propietario. Su uso es muy sencillo y lo explico a continuación:


La sintaxis de uso es la siguiente

chown [OPCIONES] [DUEÑO]:[GRUPO] [ARCHIVO O CARPETA]

por ejemplo si escribimos lo siguiente

$ sudo chown juaramir:admin Archivo


lo que hacemos es establecer como usuario propietario de Archivo a juaramir y como grupo dueño a admin. Esto es válido tanto para archivos como para carpetas. Pero para estas últimas una opción que nos será de gran utilidad ser la recursividad, “-R“, que hará que los cambios afecten a la carpeta y sus subcarpetas; su uso seria de la siguiente forma

$ sudo chown -R juaramir:admin Carpeta


Claro que no es necesario establecer si o si un usuario o grupo dueño, podemos establecer solo uno de los 2 y su uso no varia, por ejemplo

$ sudo chown juaramir Archivo 


Y por último decir que tambien tenemos disponible el comodin, “*“, que nos servira para indicar “todo“. Por ejemplo si yo estoy situado en el directorio /home y hago lo siguiente

$ sudo chown -R juaramir *


lo que hará será establecer al usuario “juaramir” como dueño de todas las carpetas (y subcarpetas) y archivos que se encuentren en /home


Este comando combinado con el chmod nos darán una gran posibilidad para establecer permisos y restricciones a los usuarios, grupos, archivos y carpetas.


Fuente: http://www.tinchio.com/

Cómo cambiar o renombrar tu usuario en Linux

publicado a la‎(s)‎ 13 oct. 2015 7:06 por Juan Jose Ramirez Lama

Abre un terminal y escribe:

$ sudo usermod -c "Tu Nombre Verdadero Completo" -l Nuevo_Nombre_Usuario Viejo_Nombre_Usuario.


Por ejemplo, podría quedar:

$ sudo usermod -c "Juan Ramirez" -l juaramir juan. 
  • En este caso, cambiamos el usuario de Juan Ramirez, que antes era juan, por juaramir.
  • Recuerda que para hacer esto la cuenta con la que te loguees debe tener permisos de administrador; de otro modo, no podrás ejecutar el comando sudo. 
  • Para verificar los cambios, puedes ir a Sistema > Administración > Usuarios y Grupos.

Deshabilitar el uso de discos USB para un usuario en Linux

publicado a la‎(s)‎ 17 jun. 2014 20:39 por Juan Jose Ramirez Lama   [ actualizado el 5 ene. 2015 6:16 ]

Una de los problemas de seguridad mas comunes en una empresa es la fuga de información, esto se da generalmente por el acceso irrestringido al uso de dispositivos de almacenamiento masivo tales como memorias y discos USB, quemadores de CD/DVD, Internet, etc.


Esta vez, les voy a enseñar como podemos restringir el acceso de un usuario a los dispositivos de almacenamiento masivo USB en Linux, de modo que no se pierda el acceso al puerto en caso de tener que conectar un mouse USB o cargar una batería por medio de este.


Nota: todo tipo de dispositivo de almacenamiento masivo USB será deshabilitado, incluyendo reproductores de música, cámaras fotográficas, etc.


Lo primero que debemos hacer es sacar al usuario del grupo plugdev, para esto, ejecutamos la siguiente linea en la terminal:

# gpasswd -d [usuario] plugdev

Esto servirá para que una vez iniciada la sesión, Linux no permita el acceso a estos dispositivos USB, pero no funcionará en caso de que el dispositivo se encuentre conectado desde antes de iniciar el sistema.


Para evitar estas situaciones, debemos hacer un blacklist el modulo usb_storage en el archivo /etc/modprobe.d/blacklist.conf, de la siguiente manera:

# gedit /etc/modprobe.d/blacklist.conf

Agregamos las siguientes lineas al final del archivo abierto:

# Restricción de acceso a dispositivos de almacenamiento masivo USB por Ubunlog.com


blacklist usb_storage

Guardamos y cerramos el archivo editado.


Ahora solo tenemos que reiniciar nuestro sistema para que los cambios surtan efecto.


En caso de que tus puertos USB sigan montando automáticamente los medios de almacenamiento aun después de seguir estos pasos, te recomiendo leer la entrada en Ubuntizando el planeta denominada “Deshabilitar carga de discos USB en Ubuntu (Extreme Edition)“, en ella puedes encontrar algunos pasos a seguir un poco mas drásticos para asegurar la correcta desactivación de los puertos USB para medios de almacenamiento.

1-6 of 6