Inicio

sábado, 24 de junio de 2017

Gestión de permisos "chmod"



chmod

En GNU/Linux todos los archivos y directorios cuentan un usuario y un grupo y permisos asignados a ellos. En este articulo veremos como editar los permisos tanto de directorios como de archivos.

Tipos de permisos

Permisos de lectura


Lectura (R) por reading en Inglés.

Los usuario que posean permisos de lectura sobre un archivo puede visualizar su contenido.

Asi mismo, si el usuario goza de permisos de lectura sobre un directorio será capaz ver la lista de los ficheros en ese directorio.

Permiso de escritura

Escritura (W) por writing en Inglés.

cuando un usuario posee permisos de escritura sobre un archivo puede editar su contenido.

Del mismo modo, si el usuario dispone de permisos de escritura sobre un directorio será capaz de crear ficheros y carpetas en ese directorio.

Permisos de ejecución


Ejecución (X) por execution en Inglés.

Los permisos de ejecución se utilizan en aplicaciones y scripts. Si dispones de permisos puedes ejecutar la aplicación/script.

Como consultar los permisos

Los permisos los puedes consultar usando el comando "ls -l". Dejo el link del articulo donde se explica como utilizar este comando más en detalle.

Estos son los de la primera columna que se se observan en la siguiente imagen. 


Los permisos se muestran con 10 caracteres, el primer carácter nos muestra un guión (-) si es un archivo o una “d” si es un directorio, para luego leer con los permisos que se le han asignado a este bajo los 9 caracteres restantes. Estos se agrupan de tres dándonos como resultado tres grupos de tres caracteres, estos son: 3 para el usuario, 3 para el grupo y 3 para otros.



¿Cómo cambiar los permisos?

Los permisos se modifican usando el comando "chmod". Este comando nos va a permitir trabajar sobre los permisos tanto de directorios como de archivos.

Sintaxis

Chmod, responde a la siguiente sintaxis...

#chmod [permisos] [elemento] [modificadores]


Para lo que seria

-Permisos: son los nuevos permisos que vamos a aplicar sobre un elemento, estos pueden ser en octal o en notación simbólica.

-Elemento: es la carpeta o el archivo sobre el que se van a aplicar los nuevos permisos.

-Modificadores: son la forma en que se van a llevar a cabo los cambios de permisos. Para que quede un poquito mas claro; si queremos modificar permisos de a una carpeta, pero también los queremos aplicar a su contenido, el modificador -R permite ejecutar este cambio remisivamente.

Cambio de permisos

Los permisos pueden modificar de forma octal o en notación simbólica. A continuación analizaremos ambos casos.

Notación simbólica

Esta notación se caracteriza por permitirnos cambiar o asignar permisos de forma individual, sin tener que trabajar sobre el resto de los permisos, especificando a quien va dirigido ya sea usuario (u), grupo (g), otros (o), seguido del signo mas o un menos  según se quiera agregar o quitar, y por ultimo los permisos (rwx) según se quiera administrar.

Por ejemplo, el comando “chmod u+x archivo.txt” agrega permisos de ejecución al usuario. Veamos el procedimiento paso a paso.

Visualicemos los permisos de archivo.txt antes de modificar.


Como pedimos ver, los permisos de archivo son "-rw- r-- r--". Si los leemos no dice que:  es un archivo debido al "-" con el que empieza, que el usuario tiene permisos de lectura y escritura "rw-" que el grupo solo de escritura "r--" y que otros también solo de escritura "r--"

Ejecutamos chmod, según el ejemplo establecido previamente para cambiar los permisos “sudo chmod u+x archivo.txt", en este caso lo ejecutamos con permisos de superusuario debido a que el propietario de "archivo.txt" es el usuario "root".


Luego de la ejecución de “sudo chmod u+x archivo.txt”, vemos que se han modificado añadiendo permisos de ejecución para el usuario "-rwx r-- r--"


También es posible establecer varios permisos a la vez separando por comas los diferentes permisos que queramos asignar.

Ejecutamos para este ejemplo "sudo chmod u-x,g+wx,o+wx archivo.txt"


Pero ojo, que no estamos limitados a modificar solo un grupo de caracteres por ejecución, podemos hacer varias modificaciones sobre los permisos a la vez en la misma linea de ejecucion.

Simplifiquemos en el siguiente ejemplo "sudo chmod g-r,g-w,g-x archivo.txt"


Bajo esta ejecución, solo modificamos los permisos de el grupo de caracteres que pertenecen a "grupo" (g) uno a uno en la misma linea.
De esta forma podemos entender que la coma no separa los grupos de caracteres, sino que separan el grupo de caracteres y el permiso que vamos a modificar.

Notación octal

La asignación de permisos en octal, nos obliga a modificar todos los permisos simultáneamente. Para asignar permisos frecuentemente se utilizan 3 números del sistema octal (de 0 a 7) que se obtienen representacion de su equivalente en binario. Veamos la siguiente tabla.



Siendo interpretado del sistema binario el "0" como la quita de un permiso y el "1" como la asignación de tal.

Es decir que si elijo el 4 en octal que en binario seria "1-0-0" estoy diciendo que le estoy agrando permisos de lectura pero le estoy quitando los permisos de escritura y los de ejecución. De donde, pues de pende de la posición dentro de los 3 números  con los que esta sintaxis trabaja. Pero es fácil de interpretar que el primer numero corresponde al del usuario, el segundo al de grupo y el tercero al de otros

Vemos el siguiente ejemplo:  "sudo chmod 740 archivo.txt", pero antes analicemos los permisos del archivo con el vamos a trabajar.


Observamos que tiene permisos de lectura y escritura para usuario, no tiene permisos habilitados para grupo y tiene permisos de lectura, escritura y ejecución para otros.

Si ejecutamos "sudo chmod 740 archivo.txt" le estamos diciendo que:

7 en octal, primera posición (usuario): 1-1-1 en binario habilita todos los permisos para el usuario
4 en octal, segunda posición (grupo): 1-0-0 en binario, habilita permisos de lectura únicamente.
0 en octal, tercera posición (otros): 0-0-0 en binario, deshabilita todos los permisos.

Dejándonos como resultados a "archivo.txt" con los siguientes permisos:



Espero sea de utilidad.
Saludos, Cristian.

viernes, 23 de junio de 2017

Comando "find" PARTE 1



En este articulo tengo invertido una buena cantidad de tiempo, creo que un comando como "find" lo merece. Ya que este comando de búsqueda es muy potente cuando se lo utiliza correctamente. Debido a la gran variedad de parámetros que sus sintaxis posee, nos permite realizar búsquedas muy precisas tanto de directorio como archivos.

Voy a dividir el articulo en varias partes para que no se haga tan largo.

PARTE 1

Sintaxis

La sintaxis es muy simple, invocando el comando "find" podemos buscar haciendo uso de tres campos.

find [ruta] [parámetro] [acción]

[ruta]

La ruta es el directorio desde donde comenzara a realizar la búsqueda. También es posible indicarle mas de una ruta para que sean objetos de búsqueda, respondiendo a la sintaxis "find  [ruta] [ruta] [ruta] [parámetro] [acción]". por ejemplo:

finde /tmp /home /etc [parámetro] [acción]

En este caso find analizara los directorios "/tmp", "/home" y "/etc" 

Debe tenerse en cuenta que si no se le indica ninguna ruta, find, comenzara a buscar a partir del directorio en el que nos encontremos posicionados, por ejemplo, si nos encontramos en el directorio /home/usuario, que es el directorio que por defecto inicia junto con la consola, y ejecutamos find, trabajara con su contenido únicamente.

[parámetro]

Son las opciones que se van aplicar sobre la búsqueda, en caso de que no se indica ninguna opción de búsqueda se aplica por defecto -print que indica que se muestre el resultado de la búsqueda.

[acción]

Este campo nos permite ejecutar cualquier comando Linux sobre el archivo o directorio que fue objeto de la búsqueda.

Búsquedas

Búsqueda simple de un directorio o archivo

Find, bajo el parámetro "-name" nos permite nos permite localizar archivos o directorios por su nombre.
Para este tipo de búsqueda ejecutadas con este parámetro es importante señalar que distingue mayúsculas de minúsculas.


Como podemos observar, ejecutamos la búsqueda en el directorio "/home" de una archivo por su nombre "-name" en donde en la primera opción inicia con minúscula y en la segunda con mayúscula. Localizando ambos en dos directorios distintos.

Si queremos que "find" no distinga mayúsculas de minúsculas, el parámetro "-iname" es el que debemos utilizar.


Como podemos observar, a diferencia de la búsqueda anterior, find no imprime ambas localizaciones de los archivos por su nombre sin distinguir mayúsculas de minúsculas.

Búsqueda de archivos de usuarios

Find también nos permite buscar los archivos que pertenecen a un usuario y que se encuentran en un directorio especifico.
Para este tipo de búsquedas utilizamos la ruta que sera objeto de análisis y el parámetro "-user" seguido del nombre del usuario propietario.


De esta forma nos imprimirá los archivos contenidos en el directorio que le indicamos y que pertenecen al usuario señalado.

Si nos movemos al directorio "scripts" y hacemos un "ls -l" podremos visualizar que los resultados corresponde con los parámetros de la búsqueda.


Ya que nos arrojo como resultado solo los archivos que pertenecen al usuario en cuestión discriminando en este caso el archivo "archivo.txt" que pertenece, como vemos, al usuario "root".

Me gustaría aclarar que la ruta que sera objeto de análisis debe ser ingresada completa, ya que si solo ingresamos, tomando el caso del ejemplo anterior, "/scritpts" find interpretara que hay un directorio llamado "scripts" en la raíz, y la búsqueda sera errónea, o mejor dicho, habrá sido mal hecha.


Búsquedas de archivos de grupo

Del mismo modo en que podemos realizar búsquedas por usuarios, lo podemos hacer por grupos propietarios. El parámetro que nos permite realizaras es "-group" seguido del nombre del grupo de propietarios de los archivos que son objeto de la búsqueda.


Acá, podemos ver los archivos encontrados en el directorio "/Fotos", ubicado en "/home/cristian" que pertenecen al grupo "cristian".

Para verlo de otro modo, buscaremos en el mismo directorio archivos que pertenecen al grupo "root"


La misma búsqueda, dos grupos distintos, resultados distintos. y si analizamos el contenido del directorio con los permisos de los archivos bajo el comando "ls -l", observamos que la búsqueda se realizo de forma correcta.


Donde apreciamos a que grupo pertenece cada unos de los archivos.

Búsqueda en múltiples directorios

Otra de las características de esta potente herramienta, es la búsqueda simultanea que se puede realizar en varios directorios para que sean analizadas bajo los parámetros de su sintaxis.


En este caso buscaremos los archivos "Foto.png" y "fotos.png" en los directorios Descargas e Imágenes simultáneamente.

Para que se aprecie la búsqueda utilice primero el parámetro "-name", que como vimos anteriormente nos permite buscar archivos por su nombre distinguiendo mayúsculas y minúsculas, alternando su nombre entre "Foto.png" y "foto.png". Así apreciamos que los resultados son distintos, en cuanto a la ubicación del archivo, pero la búsqueda se realizo en ambos directorios.

Y finalmente realizamos la misma ejecución, pero bajo el parámetro "-iname" para que no nos distinga mayúsculas y minúsculas y nos muestre de manera mas tangible que el análisis se hizo en ambos directorios al devolvernos como resultado la ubicación de ambos archivos, cuyas rutas fueron objeto de análisis.

Búsquedas de expresiones regulares

Para explicar este tipo de búsquedas ejemplificaremos enlistando primero el contenido del directorio que sera objeto de análisis.


Find nos permite buscar archivos por el dígito con el que comienza su nombre y hacer búsquedas por rangos dígito, donde podemos también discriminar en este tipo de búsquedas las exenciones de los archivos que son objeto de búsqueda.

Las búsquedas se realizaran siempre dentro del directorio "/home/cristian/Fotos" 

Cuando el nombre comienza con un numero


Nos buscara todos los archivos contenidos en "/Fotos" que comiencen con el numero "1".

Podemos realizar también búsquedas por rango.


En este caso nos buscara los archivos cuyos nombres comiencen y estén comprendidos entre "1" y "5", ambos inclusive.

Pero podemos ser mas específicos aun, podemos buscar bajo un dígito o un rango y una extensión.


Del mismo modo en que podemos tratar búsquedas con dígitos de inicios de nombre numéricos, los podemos hacer utilizando caracteres alfabéticos.

En este caso buscaremos los archivos que empiecen con la letra "T" (Siempre teniendo en cuenta mayúsculas y minúsculas).


Si necesitamos buscar dentro de un rango lo ejecutamos de la siguiente manera...


Para este caso use 3 ejemplos distintos para tener una visión un poco mas amplia sobre como aplica el rango de búsqueda sobre los resultados.
Podemos apreciar que mientras los caracteres estén dentro del rango de búsqueda, find nos devolverá, todo lo contenido en el. Y cuando no, simplemente queda fuera de los resultados.
En el ejemplo, vemos que cuando buscamos bajo el rango "D-L" deja fuera de los resultados el archivo "Texto.txt", debido a que no esta comprendido en el.

También podemos incluir en la búsqueda las extensiones de los archivos.


Donde nos devolverá todos los archivos que comiencen con la letra comprendida en el rango "A-Z" y que tenga la extensión ".txt".

No esta demás hacer visible que podemos usar el parámetro "-iname" para evitar que la búsqueda sea sensible a mayúsculas y minúsculas. 

Espero sea de utilidad.
Saludos,  Cristian.

jueves, 22 de junio de 2017

Información de nuestro sistema con "uname"



uname

El comando "uname" es un comando muy simple de usar pero muy útil cuando se trata de querer visualizar información básica de nuestro sistema GNU/Linux

Sintaxis

Su sintaxis responde a la siguiente linea


Analicemos uno a uno los parámetros y la información que solicitan.

Nombre del Kernel

El comando "uname" bajo el parámetro  "-s" no imprime en pantalla el nombre del Kernel con el que estamos trabajando.


Versión del Kernel

Para ver la versión de nuestro kernel invocamos "uname" bajo el parámetro "-r", de la siguiente manera...


Versión del sistema operativo

La versión que estamos corriendo de nuestro sistema operativo puede ser solicitada también con el comando "uname". El parámetro que utilizamos para esta solicitud es el "-v".



Sistema operativo

Así como el parámetro "-v" nos permite ver la versión de nuestro sistema, el parámetro "-o" solicita el nombre del sistema.



Nombre de "host"

El nombre de "host" es el nombre con el que se identifica nuestro sistema en la red, "uname" dispone de un parámetro que nos permite solicitarlo. Este parámetro es "-n".


Tipo de arquitectura

El comando "uname" también nos permite solicitar el tipo de arquitectura con la que nuestro sistema esta trabajando. El parámetro "-m" es el que nos permite realizar esta petición.


Todo en uno

Existe un parámetro para el comando "uname" que nos solicita toda la información que previamente vimos de forma individual. Este parámetro es "-a" y decidí dejarlo a lo ultimo, para que se pueda apreciar la información que se solicita bajo este parámetro. De esta forma nos va a ser mas fácil entender que es que en este tipo de solicitudes. "uname -a" nos imprime en pantalla la siguiente información, que equivaldría a "uname -s -n -r -v -m -o"



Espero sea de utilidad.
Saludos. Cristian

sábado, 17 de junio de 2017

ClamAv

ClamAv

es un antivirus de código abierto (GPL) para UNIX. Proporciona una serie de utilidades que incluyen un demonio multiproceso flexible y escalable, un escáner de línea de comandos y una herramienta avanzada para la actualización automática de las bases de las definiciones de virus.

Pagina oficial

Instalación

ClamAv, se encuentra en los repositorios de la gran mayoría de las distribuciones GNU/Linux, Para instalarlo, debemos ejecutar con permisos de superusuario (en el caso de debian como usuario root) nuestro gestor de descargas invocando el paquete clamav.

-Archlinux


-Debian


-Fedora


Actualización de base de datos

Antes de realizar un escaneo con nuestro antivirus, es aconsejable realizar una actualización de su base de datos de firmas, para asegurarnos que estas estén actualizadas por completo antes de ejecutarlo.
 Para comprobar que la base de datos de ClamAv este actualizada, debemos ejecutar con permisos de superusuario el siguiente comando:


Los archivos de la base de datos se guardan en el directorio "/var/lib/clamav" tal y como se muestra en la siguiente imagen:


También podemos acceder a su archivo de configuración ubicado en "/etc/clamav/freshclam.conf"


Para manipularlo accedemos a el, con el editor de texto que más nos guste, para el caso y con permisos de superusuario lo voy a editar con "nano", observaremos lo siguiente:




En donde 

-UpdateLogFile  

Es donde se guardan los registros de actualización.

-DatabaseMirror

Es desde donde se descargan las actualizaciones de las bases de datos.

-NotifyClamd

Es el archivo de configuración de ClamAv.

Freshclam, es una dependencia del paquete clamav, que se instala junto con este paquete. Nunca me paso, pero leí de casos en donde es necesario instalar de forma independiente y manual el paquete fleshclam, porque no se instalo automáticamente como dependencia de clamav.

Sintaxis

sudo clamscan -[parámetro] -[parámetro] [ruta]

Me gustaría detenerme un segundo antes de seguir con los tipos de escaneos, para mencionar que por defecto como usuario solo tenemos permisos sobre nuestro directorio personal ubicado en el directorio home, modificar directorios y archivos mas allá de home siempre requerirá permisos de usuario root. Es por esta razón que es muy difícil que un virus sin que le hayamos dado acceso root o superusuario se almacene fuera de este directorio.

Teniendo en cuenta esto, nunca esta de mas hacer escaneos completos a nuestro sistema.

Escanear /home

Siguiendo la sintaxis ejecutamos...


Donde el parámetro "-r" nos indica que se va a escanear recursivamente el contenido de la ruta "/home", esto quiere decir que se analizaran todos los subdirectorios contenidos en /home. También podemos observar, que como dijimos anteriormente, no es necesario conceder permisos superusuario para el análisis de este directorio.

Bajo esta orden, clamav nos imprimirá en pantalla cada objeto analizado seguido del estado del objeto, por lo que nos sera muy difícil y engorroso de identificar las infecciones en caso de que las haya.
Para ello podemos indicarle a clamav, que nos muestre únicamente las infecciones que surjan en el transcurso del análisis.


El parámetro "-i" indicara a clamav que nos muestre una lista de las infecciones a medida que estas vayan apareciendo, dejando el proceso de escaneo en segundo plano.
También podemos agregar el parámetro "--bell" para que suene un pitido cada vez que detecte una infección.


También podemos solicitar que se nos guarde un reporte completo del análisis en un archivo de texto.


Agregando el parámetro "-l archivo.txt" nos guardara el reporte completo del análisis en el directorio /home/usuario.

Eliminar Infecciones

Una vez que estemos seguros de las detecciones y de que son realmente infecciones procedemos a reescanear el directorio, pero esta vez bajo la orden de suprimirlos.


Agregando el parámetro "--remove" y la forma de escaneo que mas nos guste, eliminara todos las infecciones a medida que estas vayan apareciendo.

Es conveniente, primero hacer un escanero sin este parámetro para estar seguros de las detecciones que vamos a eliminar, vuelvo a recomendar esto.

Análisis completo del sistema

La sintaxis es exactamente la misma, solo cambia los permisos que en este caso tenemos que conceder, y la ruta que va a ser analizada.

En este caso el análisis seria:


Donde "sudo" nos concede los permisos y "/" es la raíz del sistema. Una vez que tengamos los resultados del análisis, se hayan encontrado infecciones y estemos completamente seguros (mas que nunca) de lo que vamos a eliminar, ejecutamos la siguiente orden.


Y como siempre, podemos consultar el manual "clamscan --help" para mas opciones.

Espero que sea de utilidad.
Saludos, Cristian.