jueves, 24 de enero de 2019

Permisos en Archivos - Parte01

Los permisos para archivos y carpetas en Linux se establecen en grupos de tres :

  • owner: La persona a cargo de un archivo (normalmente el que crea el archivo)
  • group: El grupo de usuarios que usan un archivo con un propósito
  • other: Cualquier persona que no tiene permisos exlícitos en un archivo





Los tipos de permisos en archivos y directorios son:

  • Lectura (r): Con este permiso puedes leer archivos, o listar los archivos de un directorio
  • Escritura (w): Puedes crear, modificar o eliminar archivos en un directorio
  • Ejecución (x): Para ejecutar archivos como comandos

Por ejemplo si tenemos los siguientes permisos sobre un archivo llamado file01:

- rwx rw- r-- student student file01

  • El dueño del archivo es el usuario student y el grupo dueño es el grupo student
  • El usuario student tiene permisos de lectura, escritura y ejecución
  • Los miembros del grupo student tienen permisos de lectura y escritura
  • El resto de los usuarios que no pertenecen al grupo student solamente pueden leer

Es importante considerar que los permisos en Linux no se heredan, hay que establecerlos especificamente a cada archivo o subdirectorio.

Para cambiar los permisos en archivos usamos el comando chmod. Podemos usar dos tipos de métodos para cambiar permisos

Simbólico:

  • Quien: u, g, o, a (usuario, grupo, otros, todos)
  • Qué: +, -, = (agregar, remover, establecer igual)
  • Cual: r, w, x (lectura, escritura, ejecución)

Numérico:

Es representado por tres octetos donde cada octeto puede ser un número entre 0 y 7:

  • r=4
  • w=2
  • x=1

Ejemplos:

chmod go +w file01 <- Estamos agregando permisos de escritura al grupo y a otros al archivo file01
chmod 750 file01 <- Estamos agregando permisos de rwx al owner, rx al grupo y ningún permiso a otros

En el comando chmod podemos usar la opción -R para aplicar permisos de forma recursiva a un directorio

chmod -R g+rwx dir01

Con el comando chown podemos cambiar al usuario o grupo dueño de un archivo

chown -R student dir02 <- Cambiamos de dueño al directorio dir02 y a todos los archivos y directorios dentro para que sea el usuario student
chown :group02 dir01 <- Cambiamos al grupo dueño del directorio dir01 para que sea el group02
chown student02:gruoup01 dir01 <-Cambiamos al usuario dueño del directorio dir01 para que sea student02 y al grupo dueño para que sea group01






miércoles, 16 de enero de 2019

Administrando Usuarios y Grupos - Parte 02

Continuemos viendo algunos otros comandos para administrar usuarios y grupos..

Con el comando useradd [nombre_usuario] podemos crear usuarios nuevos. Al crear un usuario nuevo los campos del archivo /etc/passwd se crean con los valores default.
Algunos de estos valores default están definidos en el archivo /etc/login.defs

Con el comando usermod podemos modificar usuarios existentes, para ellos tenemos las siguientes opciones:


-c, --comment: Para agregar valores como el nombre completo al campo GECOS
-g, --gid: Para especificar el grupo primario del usuario
-G, --groups: Para especificar una lista de grupos secundarios
-a, --append: Se usa con la opción -G para agregar grupos secundarios a la lista sin eliminar los existentes
-d, --home: Para especificar un nuevo directorio home para el usuario
-m, --move: Para mover el directorio home a una nueva ubicación. Debe usarse con la opción -d
-s, --shell: Para especificar una nueva shell de login para el usuario
-L, --lock: Para bloquear al usuario
-U, --unlock: Para desbloquear al usuario

Ejemplo:

usermod -aG wheel student

Con el comando userdel [nombre_usuario] podemos eliminar usuarios del archivo /etc/passwd
Con userdel -r también eliminamos los elementos del directorio home del usuario

Para cambiar el password de un usuario utilizamos el comando passwd [nombre_usuario]
Los passwords para usuarios deben seguir ciertas reglas, al menos 8 caracteres, que no sean palabra de diccionario, el nombre del usuario o passwords anteriores

Como dato adicional, existen UID de usuario reservados y son los siguientes:
  • 0: root
  • 1-200: usuarios de sistema
  • 201-999: usuarios de sistema para procesos de sistema que no son dueños de archivos en el filesystem
En el caso de los passwords, éstos están alojados en un archivo diferente a /etc/passwd, los passwords se alojan en /etc/shadow más no en texto plano sino con un hash.

Al igual que passwd, shadow tiene campos separados por símbolos ":" y son los siguientes:
  1. Login Name: Debe ser una cuenta del sistema
  2. Password Encriptado: Es el passwords divididos en tres partes por signos de "$":
    •  La primera parte: Es el algoritmo utilizado para el hash. Si tenemos un 1 por ejemplo sería MD5. El 6 es un SHA-152
    •  Entre el segundo y el tercero símbolo de "$": Encontramos el "salt" que es una variable aleatoria utilizada para generar el hash
    •  En la tercer parte: Encontramos finalmente el hash encriptado
  3. Fecha para cambio del password
  4. Mínimo número de días anets de que el password tenga que ser cambiado
  5. Máximo número de días antes de que el password deba ser cambiado
  6. Periodo en días para alertar que el password va a expirar
  7. Número de días que una cuenta permanece activa después de que el password expiró
  8. La fecha de expiración de una cuenta
  9. Campo que no se usa actualmente (tal vez en un futuro)
Es posible cambiar éstos parámetros utilizando el comando chage para implementar una política de password con las siguientes opciones:

-l: Para listar los parámetros que tiene configurados el usuario
-d: Fecha de expiración (con un cero forzaría a cambiar el password en el siguiente login)
-m: Mínimo de días antes de que el password sea cambiado
-M: Máximo de días antes de que el password sea cambiado
-W: Días para el warning o alertamiento
-I: Días para marcar al usuario como inactivo al expirar
-E: Fecha de expiración de una cuenta

Ejemplos:
  • chage -l student
  • chage -d 0 student
  • chage -E 2019-02-11 student
Hay ocasiones en que creamos un usuario pero no queremos que tenga la opción de loguearse al shell, por ejemplo tal vez solo sea un usuario de correo.
En esos casos podemos crear el usuario y con el comando usermod indicar que no tendrá acceso al shell de ésta forma:
usermod -s /sbin/nologin student
  

lunes, 14 de enero de 2019

Administrando Usuarios y Grupos - Parte 01

En Linux un usuario puede ser dueño de archivos, para ver que usuario es dueño de un archivo podemos ejecutar: ls -l 

Los programas o procesos también corren o se ejecutan con usuarios, lo podemos ver con un: ps au

Con el comando id podemos ver la información del usuario con el que estamos logueados

Para conocer los usuarios de nuestro sistema Linux podemos hacerlo desde el archivo /etc/passwd

En éste archivo veremos listados los usuarios por renglón, y separados con “:” otros campos en el siguiente orden:

1. Nombre de usuario
2. Password el cual aparece con una X para no tenerlo visible
3. UID o Identificador del usuario
4. GID o Identificador del grupo al que pertenece el usuario
5. GECOS o Descripción del usuario
6. Directorio home del usuario
7. El programa que corre cuando el usuario se loguea




En cuanto a los grupos, existen dos tipos:

Grupos primarios: Es el grupo que aparece listado en /etc/passwd para el usuario y es el grupo que también es dueño de los archivos creados por un usuario. Normalmente el grupo primario de un usuario es un grupo que se crea al crear el usuario y tiene el mismo nombre que éste.
Grupos secundarios: Un usuario puede pertenecer a varios grupos y esto es posible gracias a los grupos secundarios. Asi como tenemos el archivo /etc/passwd para los usuarios, también tenemos /etc/group para los grupos. Desde éste archivo podemos ver los UID que pertenecen a cada grupo.



Para cambiarnos de usuario con todo y el ambiente de ese usuario utilizamos el comando:
su – [nombre del usuario]
Si queremos únicamente hacer algo como otro usuario pero sin dejar nuestro ambiente actual usamos el comando:
su [nombre del usuario]
Si queremos salir del ambiente de un usuario al que nos cambiamos, utilizamos el comando exit

Para cambiar de usuario necesitamos conocer la contraseña del otro usuario, excepto si somos el usuario super administrador. El usuario super administrador de un sistema Linux es el usuario root.

Es posible dar permisos a usuarios para correr comandos como si fueran el usuario root. Esto lo podemos configurar desde el archivo /etc/sudoers

Para correr un comando configurado para ejecutarlo como root anteponemos sudo
Ejemplo: sudo usermod -d /home/exampleusernew exampleuser

Existe un grupo especial llamado wheel. Los usuarios de éste grupo pueden usar sudo para correr comandos como cualquier usuario incluyendo root. Es decir estamos dando permisos a un usuario de ejecutar cualquier comando como root anteponiendo un sudo

lunes, 7 de enero de 2019

Redireccionando salida a archivos o programas



El primero punto a considerar es conocer que en Linux existen canales de entrada y de salida. Tenemos por ejemplo entrada del teclado, salida de un comando a pantalla, a un archivo, salida de errores en pantalla o a un archivo.







Estos canales son los siguientes:

  • Canal 0: Standard input (stdin)
  • Canal 1: Standard output (stdout)
  • Canal 2: Standard Error (stderr)

Con los canales anteriores podemos generar distintos tipos de salida con distinta sintaxis. Tenemos:

  • comando > archivo : Salida a un archivo nuevo
  • comando >> archivo : Salida agregando a un archivo existente
  • comando 2> archivo : Enviar los mensajes de error a un archivo
  • comando 2> /dev/null : Descartar los mensajes de error
  • comando &> archivo : Salida & Errores a un archivo nuevo
  • comando &>> arhivo : Salida & Errores agregando a un archivo existente

Piping: O entubar, es el conectar procesos/programas entre sí. Es decir podemos enviar la salida de un comando (stdout) como entrada (stdin) de un segundo comando. Ejemplo:

ls | wc Cuenta el número de lineas, letras y caracteres del listado de archivos de una ubicación

Tee: Conocido también como tuberia T es la acción de enviar la salida de un comando (stdout) a un archivo o terminal (stdout) antes de enviarlo como entrada (stdin) a otro proceso. Ejemplo:

ls | tee /tmp/archivo.tmp | less Envia el listado de archivos de una ubicación a un archivo en tmp y después muestra este listado en pantalla

Si tee es utilizado al final de una tuberia se puede salvar el archivo y al mismo tiempo mostrarlo en pantalla. Ejemplo: ls | head -n 5 | tee /tmp/myfile.tmp

domingo, 6 de enero de 2019

Obtener ayuda en Linux

Como sabemos con el comando man podemos acceder al manual de Linux. El manual está compuesto de varias secciones:

  1. Comandos de usuario
  2. Llamadas del sistema
  3. Librería de Funciones
  4. Archivos especiales
  5. Formatos de archivo
  6. Juegos
  7. Estándares
  8. Administración del Sistema y privilegios
  9. Kernel de Linux

Con man -a intro podemos ver el intro de cada una de las secciones. Si queremos ver información de un comando en una sección distinta, por ejemplo passwd en formatos de archivo: man 5 passwd

Con man -k podemos buscar por palabras en el título de las páginas del manual, ejemplo: man -k login
Con man -K podemos buscar palabras en el cuerpo de las páginas del manual.

Si queremos buscar por información que nos explique de forma detallada un comando podemos utilizar el comando pinfo.

El File System de Linux







El File System de Linux está compuesto de diversas carpetas estructuradas en forma de árbol inverso, siendo el origen del mismo el directorio conocido como raíz y representada con una diagonal “/”. A partir de ésta carpeta se encuentran otras carpetas de las cuales listaremos algunas a continuación.






  • /usr: Tiene binarios y librerias de éstos binarios (programas compilados)
    • /usr/bin: comandos de usuario
    • /usr/sbin: comandos de administrador de sistema (root)
    • /usr/local: software customatizado
  • /etc: Es un directorio persistente (no se borra nada al reiniciar el sistema) que contiene archivos de configuración del sistema
  • /var: Contiene archivos y directorios dinámicos por ejemplo es donde se publican los sitios web, los sitios ftp
  • /run: Tiene archivos temporales de tiempo de ejecución
  • /home: Contiene los directorios home de los usuarios del sistema, es decir donde se almacenan los archivos personales de los usuarios
  • /root: Es el directorio home del usuario root. Este se mantiene fuera de /home
  • /tmp: Mantiene archivos temporales generados por las aplicaciones, estos arhivos se mantienen por 30 días si no son utilizados
  • /boot: Archivos de arranque del sistema
  • /dev: Contiene archivos que nos permiten interactuar con dispositivos conectados al sistema


Cuando trabajamos con el File System de Linux debemos entender el concepto de rutas. Existen dos tipos de rutas: Absolutas y Relativas

  • Las rutas absolutas son rutas completas iniciando siempre desde el directorio raíz. Por ejemplo /etc/passwd
  • Las rutas relativas son rutas relativas al directorio donde nos encontramos (o directorio de trabajo). Por ejemplo si nuestro directorio de trabajo es el directorio etc la ruta relativa archivo passwd será simplemente: passwd. Para referirnos a un directorio “atrás” del donde estamos trabajando utilizamos “../” por ejemplo si estamos en el directorio home la ruta relativa a passwd será: ../etc/passwd

Otro punto importante a considerar en Linux es que el sistema operativo es sensible a mayúsculas y minúsculas por lo que siempre debemos escribir los nombres de archivos y carpetas tal cual son.

Para saber cual es nuestro directorio de trabajo en cierto momento utilizamos el comando pwd
Para movernos a un directorio utilizamos el comando “cd” por ejemplo: cd /home/javier
Para movernos a nuestro directorio home utilizamos: cd ~
Para movernos a un directorio donde estábamos posicionados antes del actual usamos: cd -
Para movernos un directorio atrás del actual: cd ..

Si queremos crear un archivo en blanco podemos utilizar el comando touch. Ejemplo: touch /home/javier/Documents/myfile.txt

Para listar archivos en un directorio usamos el comando ls
Si queremos listar los archivos incluidos los archivos ocultos (los cuales empiezan con un punto) utilizamos ls -a
Para hacer un listado recursivo, es decir de todo lo que está dentro de un directorio usamos ls -r
Si queremos un listado con información mas completa (o listado largo) usamos el comando ls -l o ll


Para trabajar con archivos tenemos varios comandos

  • cp: Nos sierve para copiar archivos, por ejemplo: cp file1 file2 (crea una copia de file1 llamada file2)
  • mv: Nos sirve para mover un archivo, ejemplo: mv file1 file2 (renombra el archivo file1 como file2)
  • rm: Nos sirve para eliminar archivos, ejemplo rm file1 (elimina file1), rm -f nos ayuda a forzarlo
  • mkdir: Nos sirve para crear directorios mkdir dir (crea un directorio llamado dir en el directorio actual). Si queremos crear toda una ruta de directorios usaremos: mkdir -p dir1/dir1a/dir1a_1
  • cp -r: Copia todo el contenido de un directorio a otro, ejemplo: cp -r dir1 dir2
  • mv: También nos sirve para mover directorios, ejemplo mv dir1 dir2
  • rm -r: Elimina un directorio completo, ejemplo rm -r dir1 para forzarlo usamos rm -r -f dir1

Introducción a la linea de comandos de Linux


Lo primero que tenemos que aprender al respcto es que al utilizar la línea de comandos estamos utilizando la shell Bash (GNU Bourne again Shell).
Cuando el promt de nuestra linea de comandos es un “$” estamos logueados como un usuario regular, cuando tenemos un “#” estamos logueados como un usario con altos privilegios administrativos o super usuario. El super usuario en linux es el usuario root. Para acceder al shell bash accederemos a través de una terminal.


Los comandos en Bash no son otra cosa que programas que podemos correr y siguen la siguiente sintaxis: comando [opciones] [argumentos]

Si queremos acceder a la ayuda de un comando escribimos el nombre del comando y -- help: Por ejemplo: date -- help . También podemos revisar el manual de uso de un comando utilizando el comando man, por ejemplo: man date

Un ejemplo de opciones en un comando sería: date +%R la opción “+%R” nos entrega solo la hora actual. Si desconocemos la sintaxis completa de un comando podemos comenzar a escribir el comando y teclar la tecla Tab para completarlo, lo mismo nos sirve para completar rutas de archivos o carpetas. Podemos presionar la tecla Tab dos veces cuando tenemos mas de una opción para poder verlas o después de un comando para ver las opciones posibles sobre el mismo.

Para cambiarnos entre sesiones de usuario en la termina escribimos el comando “su” seguido de un “-” y el nombre del usuario con el que deseamos loguearnos: su – javier


Para conocer el tipo de archivo utilizamos el comando file. Ejemplo: file /etc/passwd
Con los comando tail y head podemos ver las ultimas 10 lineas o las primeras 10 de un archivo respectivamente, por ejemplo: tail etc/passwd o head /etc/passwd
Con la opción “-n” podemos indicar cuantas lineas queremos ver si no deseamos el comportamiento default de 10. Por ejemplo: head -n 3 /etc/passwd
El anterior es un ejemplo de un comando (head) con opciones (-n 3) y su argument (/etc/passwd)
El comando “wc” nos sirve para sabe cuantas lineas, palabras y caracteres tiene un archivo. Ejemplo: wc /etc/passwd

Para conocer los últimos comandos ejecutados podemos utilizar el comando “history”, este comando nos lista el historial de comandos utilizados




Si desdeo ejecutar un comando del listado tecleo ! Y el número de comando correspondiente, por ejemplo !40
Otra forma es ejecutar ![comando] por ejemplo: !head ejecutará el último comando head de la lista.

Si queremos cambiar el password de nuesto usuario utilizamos el comando passwd nos solicitará el password actual y el nuevo.

Servicios y Demonios

Un demonio es un procesos que corre en el background para realizar un servicios. Generalmente se lanzan desde el inicio de...