Mostrando las entradas con la etiqueta Ubuntu. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Ubuntu. Mostrar todas las entradas

20 febrero 2021

Permisos especiales en Linux: Sticky Bit, SUID y SGID

Existen una serie de permisos especiales en GNU/Linux, que, aunque no son habituales, es necesarios saberlos, por ejemplo, para trabajar en grupo sobre ciertos directorios que son necesarios a la hora asignar permisos a usuarios.

Permisos especiales en Linux


sticky bit

Se trata de un permiso de acceso que puede ser asignado archivos y directorios en sistemas UNIX y similares. Aunque históricamente su fin eran otro, actualmente el sticky bit se utiliza sobre directorios.

Cuando se le asigna a un directorio, significa que los elementos que hay en ese directorio solo pueden ser renombrados o borrados por su propietario o bien por root. El resto de usuarios que tengan permisos de lectura y escritura, los podrán leer y modificar, pero no borrar.

El sticky bit comúnmente es utilizado para “/tmp”

Este tipo de permisos sobre un directorio se puede otorgar de varias maneras:

1
chmod 1775 test

O bien

1
chmod +t /test #para activar sticky bit
2
chmod -t /test #para desactivar sticky bit

Si un usuario intenta borrar un fichero de una carpeta con sticky bit, recibierá el siguiente mensaje:

1
[david@servcentos]$ rm -rf hola
1
rm: cannot remove ‘hola’: Operation not permitteds


SUID

Cuando se activa el bit SUID sobre un fichero significa que el que lo ejecute va a tener los mismos permisos que el que creó el archivo. Esto es útil en algunas ocasiones, aunque hay que utilizarlo con cuidado, ya que puede acarrear problemas de seguridad

Para activarlo:

1
[david@servcentos test]$ chmod 4775 hello.sh
2
[david@servcentos test]$ ls -l hello.sh
3
-rwsrwxr-x 1 david david 26 Jun 11 19:02 hello.sh
4
[david@servcentos test]$ chmod -x hello.sh
5
[david@servcentos]$ ls -l hello.sh
6
-rwSrw-r-- 1 david david 26 Jun 12 19:02 hello.sh

Observamos que en la última línea le quitamos el servicio de ejecución al archivo y en los permisos se reemplaza la s minúscula por la S mayúsculas.


SGID

El bit SGID es lo mismo que SUID, pero a nivel de grupo. Esto es, todo archivo que tenga activo el SGID, al ser ejecutado, tendrás los privilegios del grupo al que pertenece.

Opción bastante útil si queremos configurar un directorio para colaborar diferentes usuarios. Si se aplica este bit al directorio, cualquier archivo creado en dicho directorio, tendrá asignado el grupo al que pertenece el directorio

Por ejemplo, si un usuario que tiene permiso de escritura en el directorio crea un archivo allí, ese archivo es un miembro del mismo grupo que el directorio y no el grupo del usuario. Como hemos dicho, esto es muy útil en la creación de directorios compartidos.

1
chmod g+s "directorio"

En el caso de un archivo:

1
chmod 2555 "archivo"

Espero que esta información les pueda servir en algún momento. Nos vamos leyendo.

NOTA: Fuente original del artículo:
https://www.ochobitshacenunbyte.com/2019/06/17/permisos-especiales-en-linux-sticky-bit-suid-y-sgid/

Eliminar archivos por su número de Inodo

Si alguna vez encuentras en tu equipo archivos del tipo «??!», «-aasd/a», etc. creados por error en Linux, o que posean caracteres que son difíciles de escribir en el teclado, o que no posean nombre el archivo pero si ocupan espacio en disco, te darás cuenta de que a veces no es demasiado sencillo borrarlo, ya que contienen caracteres que muchas veces ni siquiera «escapándolos» permite borrarlos.

Para ello, existe una solución, cada archivo tiene un número de Inodo, para averiguarlo:

1
[root@localhost] ls -i <archivo>

Eliminar

1
[root@localhost] ls -i *

2781528 index.php    2781559 ??!

el archivo «??!» tiene el número de inodo 2781559, y podemos borrarlo gracias al comando «find» y su opción «-inum» (inode number):

1
find . -inum 2781559 -exec rm -i {} \;

Y el archivo ya ha sido borrado.

NOTA: Fuente original del artículo:
https://rm-rf.es/eliminar-ficheros-por-su-numero-de-inodo/

29 agosto 2020

Agregar y modificar rutas al $PATH de Linux


Si usamos distribuciones como en RHEL, Centos, Debian, Ubuntu les vengo con un tutorial súper practico a la hora de agregar una linea al $PATH de Linux, las nuevas rutas permiten ejecutar en cualquier lugar o directorio programas de ejecución en Linux, a continuación le muestro una breve explicación que le será de gran ayuda a la hora de agregar o modificar nuestro $PATH

Si queremos agregar una nueva ruta al $PATH, tomando en consideración que la distribución que tome para la prueba fue CentOS 7, cabe a destacar que los cambios para agregar al $PATH son de manera permanente, antes de realizar un cambio a nuestro $PATH debemos primero mostrar y de esa forma asegurarnos que tenemos la linea original del mismo;

1
echo $PATH

Este comando permite mostrar la ruta de nuestro $PATH, les recomiendo que si vamos agregar una nueva linea guardemos de manera temporal en un bloc de notas esta línea, para agregar una nueva ruta ejecutamos;

1
export PATH=$PATH:/ruta_de_ejecucion

Un ejemplo al comando anterior, en caso que queramos agregar una ruta de ejecución, de un programa que se encuentre por ejemplo en /opt, escribimos

1
export PATH=$PATH:/opt/JAVA/bin

De esta forma agregamos esta linea de ejecución en nuestro $PATH para visualizar la nueva ruta volvemos a escribir

1
echo $PATH

Nos aseguramos en este caso que fue agregada con éxito, tratando de hacer una ejecución de un comando que se pueda encontrar en la nueva ruta, por ejemplo;

1
java --version

El comando anterior lo puse como ejemplo para mostrar la ejecución de un programa que pueda estar contenido en la nueva ruta

En caso que cometamos un error a la hora de insertar la nueva ruta, o simplemente no queramos la nueva ruta porque le hemos dado de bajo, podemos editar toda la linea de $PATH nuevamente para sustituir el error cometido o eliminar la linea agregada;

1
export PATH="/ruta_modificada_o_nueva"

De esta forma podemos arreglar los errores de insersión en el $PATH, por eso recomiendo siempre antes de agregar una nueva linea de $PATH guardar primero o capturar la linea original antes de cualquier modificación, para verificar que la misma se hizo de manera correcta ejecutamos nuevamente;

1
echo $PATH

Para finalizar si quieren que los cambios se mantenga de manera permanente en todas las cuentas a las nuevas rutas de $PATH agregadas o modificadas, realicen el cambio desde la cuenta root de nuestra distribución de Linux como indique al comienzo de esta publicación.

24 agosto 2020

Comprimir y descomprimir .tar.gz, .tar, .gz y .zip consola Linux


Archivos .tar.gz:

Comprimir: tar -czvf nombre_del_archivo.tar.gz /carpeta/a/comprimir/
Descomprimir: tar -xzvf nombre_del_archivo.tar.gz

Archivos .tar:

Comprimir: tar -cvf nombre_del_archivo.tar /dir/a/comprimir/
Descomprimir: tar -xvf nombre_del_archivo.tar

Archivos .gz:

Comprimir: gzip -9 nombre_del_archivo.formato
Descomprimir: gzip -d nombre_del_archivo.formato.gz

Archivos .zip:

Comprimir: zip nombre_del_archivo.zip /carpeta/a/comprimir/
Descomprimir: unzip nombre_del_archivo.zip

NOTA: Fuente original del artículo:

Buscar archivos en Linux con find & locate en consola Linux


A la hora de buscar un archivo en linux por consola podemos usar un comando llamado find & locate, como su traducción al español permite encontrar archivos en nuestros sistemas Linux, además funciona en todas las distribuciones ya que es un comando propio de las distribuciones y muy útil a la hora se hacer una búsqueda

Buscar archivos y mostrar sus nombres

Para buscar todos los archivos dentro de un directorio con extensión .jpg

1
find /home/miusuario -name "*.jpg"

Para encontrar un archivo en todo el sistema, podemos buscarlo desde la carpeta raiz /

1
find / -name nombre_de_archivo

Buscar archivos por nombre de usuario

Si deseamos buscar un archivo por nombre de usuario podemos escribir:

1
find / -user nombre_de_usuario

Esto mostrará todos los archivos de ese usuario a partir de la carpeta raiz / y todas sus subcarpetas.

Buscar archivos por tamaño de fichero

Para buscar archivos vacíos (el . indica el directorio en el que nos encontramos):

1
find . -size 0c

Para buscar archivos de un tamaño en kilobytes:

1
find . -size 54k

Buscar por expresiones regulares

El comando find permite buscar utilizando expresiones regulares. Esto nos ofrece una potencia considerable. Por ejemplo si deseamos buscar archivos del tipo archivo01_01.txt, archivo02_03.txt, etc, podemos utilizar: 

1
find . -regex './archivo0[1-2]_0[1-3].*'

Además podemos anidar todas las opciones para hacer consultas más complejas.

Buscando archivos con el comando Locate

También existe otra forma de buscar archivos en el índice del sistema, el comando locate.

Antes de usar este programa primero revisamos si se encuentra instalado, sino lo instalamos de la siguiente manera:

CentOS, RHEL, Fedora

1
yum -y install mlocate

Debian, Ubuntu o derivados

1
apt install mlocate

Una vez instalado actualizamos el índice del sistema usando:

1
sudo updatedb

Es recomendable ejecutarlo antes de hacer un locate para añadir las rutas recientes, por ejemplo si acabamos de instalar un programa.

Este comando funciona de la siguiente forma

1
locate nombre_del_archivo

Y devolverá todas las rutas en donde aparece el nombre entrado, podemos consultar dentro de los resultados devueltos por ejemplo:

1
locate mi_archivo | grep bin

Devolverá todos las rutas del sistema que contengan el nombre mi_archivo y que además también aparezca el texto bin.

Para finalizar le sugiero actualizar siempre la base de datos de locate, usando como explique anteriormente:

1
sudo updatedb

NOTA: fuente original del artículo:

23 agosto 2020

Generando llaves de conexión SSH en Linux


Esta vez vengo en la oportunidad de brindarle un pequeño tutorial para conectarse de un servidor a u otros sin necesidad de usar contraseña, las llaves SSH son muy prácticas y seguras en ambientes donde accedemos a equipos con confiabilidad para no estar escribiendo las contraseñas de acceso, gracias a la ayuda de un compañero de trabajo llamado Lucas Jaunarena en un proyecto que estábamos haciendo en conjunto, me ayudo a simplificar esta instalación que les presento a continuación:

1) Lo primero que debemos hacer es irnos al servidor que queremos conectarnos sin contraseña, es este caso lo llamaremos el ServidorB, y escribimos;

1
ssh-keygen

Para ejecutar este comando se puede realizar con el usuario que queramos conectar o sino con el root si somos administradores de sistemas, realmente este comando genera la llave de conexión, les recomiendo que usen la generación estándar si les pide poner contraseña pueden omitirla, ahora si estamos en ambientes mas seguros es necesario escribir una contraseña que luego se pedirá a la hora de instalarlo, pero eso se los dejo de su libre agrado, de mi parte no uso la contraseña para instalar la llave

2) Una vez generado la llave, nos vamos al servidor ServidorA que vas ser el servidor donde se va conectar con el ServidorB sin contraseña, para realizar esta tarea escribimos;

1
ssh-copy-id usuario@ip_servidor

Este comando que se encuentra en casi las mayorías distribuciones de linux permite copiar la llave generada en el servidor donde queremos conectarnos sin contraseña, es decir, se conecta al ServidorB toma la llave y la instala en el ServidorA para ser almacenada para lograr dicha conexión

En caso que no tengamos el comando anterior para copiar la llave podemos usar esta sintaxis de copia que tambien genera la copia

1
cat ~/.ssh/id_rsa.pub | ssh usuario@ip_servidor "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Al correr el comando que copia la llave nos va a pedir la contraseña del usuario donde se genero la contraseña, una vez que se introduce la contraseña se guarda de manera automática y permanente en el Servidor A

3) Para verificar que la llave fue instalada exitosamente hacemos la conexión de manera tradicional en el ServidorA;

1
ssh usuario@ip_servidor

Al escribir este comando debería conectarse sin contraseña