Linux
Linux
Coello
[email protected]
December 7, 2017
1
Introducción.
Éste documento intenta cubrir el material para un curso semestral de Linux. El objetivo es dar respuesta
a los problemas que ha generado su enseñanza en las carreras de informática en la sede Santiago Centro de
Inacap. Éste documento es esencialmente, todo el material que el prof. Coello expone en su curso de Linux,
pero profundizado los contenidos que nos han parecido más importantes. Hemos hecho un énfasis en la ma-
teria que es evaluada pero que no se pasa y los temas que se tratan rápidamente en el aula, de los que no
queda registro y sobre los cuales no se puede volver a estudiar.
La increíble tasa de reprobación en la sección impartida por el prof. Coello es injustificable. Con un prome-
dio histórico del 10% de estudiantes aprobados por semestre es la más alta en toda la carrera y probablemente
de todo Inacap. Situación incomprensible pues, a nivel introductorio, Linux no es difícil. Todo se resume a
comprender la estructura básica del sistema de ficheros en Linux y saber qué es lo que exactamente hace cada
comando.
Las versiones que se utilizan en éste documento son CentOS 6.9 y Red Hat Enterprise Linux 7.3; no existe
mayor diferencia entre ambas. De hecho, CentOS deriva de Redhat. Lo único un poco distinto es la forma en
que se instalan los servidores. El detalle de la instalación de 19 servicios (que constituye la tarea de final del
curso con el prof. Coello) se entrega en la última parte del documento.
2
Contents
1 Poniendo a punto la máquina 7
1.1 Creación de una máquina virtual en 16 pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1 Cuando VMWare se detiene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2 Instalación de Red Hat Enterprise Linux 7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Instalación de CentOS 6.9 en un disco particionado . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.1 La instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 El particionado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.3 Últimas configuraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.4 Ejercicio n°1. Genere una instalación personalizada con las siguientes características:
(Primera prueba del primer semestre del 2017) . . . . . . . . . . . . . . . . . . . . . . . 11
3 Variables de entorno 29
4 Usuarios y grupos 29
4.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2 Comandos para la administración de usuarios y grupos . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3 El identificador de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4 UGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.5 Creación de usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.6 Práctica con usuarios y grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.7 Lo que sucede al crear usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.7.1 El comando chage. (Primera prueba del primer semestre del 2017) . . . . . . . . . . . 43
3
4.8 Los ficheros /sbin/nologin y /bin/false . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.8.1 Ejercicio n°4. Cree un usuario PEPITO con las siguientes características: (Primera
prueba del primer semestre del 2017) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.9 El fichero /etc/login.defs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.10 El fichero /etc/skel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.10.1 Ejercicio n°5. Genere un guión tipo bash que sea aplicable para todos los futuros usuarios
creados. (Primera prueba del primer semestre del 2017) . . . . . . . . . . . . . . . . . 46
4.11 Consideraciones finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6 Programación de Scripts 51
6.1 Introducción a la Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.2 Ejercicio: construya un script que despliegue información cada vez que inicie un nuevo usuario
su sesión Segunda prueba del primer semestre del 2017 . . . . . . . . . . . . . . . . . . . . . . 52
6.3 Nuestro primer Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4
8.4.1 Programe un script de nombre backups.sh y posiciónelo en: /programas. Éste script
debe ser capaz de respaldar de manera comprimida y empaquetada todo el directorio
/etc. El nombre resultante del archivo debe ser:
Backups[Nombre del Servidor][Ruta del directorio respaldado][HH-MM-SS][DD-MM-
AA].tar.gz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.4.2 La siguiente pregunta fué algo que nunca se vió en clases: ejecutar el cron el
penúltimo día de cada mes. Programar una tarea cron que permita ejecutarla
en el penúltimo día de cada mes del año (en una sola línea) a las 23:00 horas,
enviando un email al término de la ejecución a la cuenta [email protected]. . . . 65
8.4.3 Desarrollar una tarea /programas/fecha.sh que permita imprimir la fecha y la hora en
formato DD-MM-AAA-HH-MM-SS-NOMBRE-SERVIDOR-USUARIO (sic) en un archivo
llamado /programas/fecha.log y programar un cron que se ejecute cada 5 minutos (a
partir del minuto 0), todas las horas impares, de todos los meses impares y siempre y
cuando sea jueves o viernes. /respaldodiario.sh . . . . . . . . . . . . . . . . . . . . . . . . 66
5
12.9.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
12.10SAMBA (bidireccional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.10.1Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.10.2La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
12.11Motor de correo vía la web (SQmail) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
12.11.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
12.11.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
12.12Servidor de virtualización VMWare (con instancias virtuales funcionando) . . . . . . . . . . . . 92
12.12.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
12.12.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
12.13TOMCAT (Con apps en JAVA funcionando) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.13.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.13.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.14MOTOR BD ORACLE (+consulta) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
12.14.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
12.14.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
12.15Firewall (programado con reglas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.15.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.15.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.16SQUID (proxy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.16.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.16.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.17Vsftpd (Usuario Enjaulado.) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
12.17.1Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
12.17.2La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
12.18Telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.18.1Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.18.2La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
12.19Antivirus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
12.19.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
12.19.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
12.20WINE (Ambiente de trabajo emulado para correr apps con tecnología MS) . . . . . . . . . . . . 100
12.20.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
12.20.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
12.21VNC server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
12.21.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
12.21.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
12.22Configuración SElinux (privación ejecución módulos kernel) . . . . . . . . . . . . . . . . . . . . . 102
12.22.1 Teoría . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
12.22.2 La comandería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Appendix B Listado de los formatos para los comandos de fecha y hora 105
6
1 Poniendo a punto la máquina
1.1 Creación de una máquina virtual en 16 pasos
(Tiempo estimado: 2 minutos)
En VMWare Worstation 12 PRO hacemos:
1. Click en File
3. Se abre el wizard
¿Qué tipo de configuración desea?:
Seleccionamos: Custom (advanced)
Click en next
7
13. Seleccione un disco. Qué disco quieres usar?:
Seleccionamos Create a new virtual disk
Click en next
5. Damos click en SELECCIÓN DE SOFTWARE, eligimos Instalación mínima y damos click a Listo.
7. Damos click a Empezar instalación. Se deberían copiar 386 archivos y el proceso no debería tardar
más de 10 minutos.
8. Mientras nuestro SO se instala, podemos configurar la contraseña del usuario root y crear un usuario.
Sea la contraseña del root: 123456 y el usuario: miguel con contraseña 123456. Dejemos a éste último
como administrador.
1. Click en VM
2. Click en Settings
3. En Hardware damos click a CD/DVD y en Connection, seleccionamos Use ISO image file.
Aquí buscamos y seleccionamos el CentOS 6.9 que se supone ha descargado previamente.
Click en OK
8
4. Recién ahora se enciende la máquina virtual
Click en Power on the virtual machine.
7. Click en next.
15. Se nos advierte que la contraseña es muy básica. ¿La usamos de todas formas?
Seleccionamos: Use Anyway
1.3.2 El particionado
(Tiempo estimado: 5 minutos)
9
Particionado
PARTICIÓN ESPACIO PUNTO DE FILE SYSTEM
MONTAJE
Primaria 8000 MB / ext4
Arranque 250 MB /boot ext3
Memoria virtual temporal Remanente swap swap
1. click en Create
2. click en Standard Partition
click en Create
3. Seleccionar: Mount point: /
Seleccionar: File System Type: ext4
Seleccionar: Size (MB): 8000
Seleccionar: Fixed size
Seleccionar: Force to be a primary partition
Click en ok.
1. click en Create
2. click en Standard Partition
click en Create
3. Seleccionar: Mount point: /boot
Seleccionar: File System Type: ext3
Seleccionar: Size (MB): 250
Seleccionar: Fixed size
Click en ok.
1. click en Create
2. click en Standard Partition
click en Create
3. Seleccionar: Mount point: no aplica
Seleccionar: File System Type: swap
Seleccionar: Size (MB): no aplica
Seleccionar: Fill to maximun allowable size
Click en ok.
10
4. Debemos indicar la partición donde instalaremos el boot.
Seleccionamos: Install boot loader on /dev/sda y CentOS 6 /dev/sda2
Damos click en Next
1.3.4 Ejercicio n°1. Genere una instalación personalizada con las siguientes características: (Primera
prueba del primer semestre del 2017)
Instalación: Mínima
Password root: 123456
Nombre de máquina: SUNOMBRE.SUAPELLIDO.CL
Solución:
Trampa 1: Podemos darle un espacio insuficiente a nuestra máquina virtual y quedarnos sin tiempo al
tener que volver a empezar desde cero. Para evitar ésto, calculemos inmediatamente el espacio que
necesitaremos en nuestro disco duro.
Trampa 2: En un disco duro solo puede haber cuatro particiones primarias, si necesitamos más ten-
emos que crear una partición extendida, y dentro de ella las particiones lógicas que necesitemos.
Con 80 gigas de HD y 2048 de RAM estamos bien. A la partición swap le daremos entonces 4096 Mb.
11
1 Para crear la máquina virtual son los mismos pasos que el punto 1.1 a excepción del 7, donde nombramos
la máquina: NOMBRE.APELLIDO.CL.
2 La instalación del CentOS virtualizado es igual a la que se hace en el punto 1.2. Ahora, ¿por nombre
de máquina se refiere al del computador o al de la máquina virtual? Evitémonos polémicas y nombremos a
nuestro computador también como NOMBRE.APELLIDO.CL
3 El particionado.
1. click en Create
1. click en Create
1. click en Create
1. click en Create
12
1. click en Create
1. click en Create
1. click en Create
Importante: Observemos que sda sólo se divide en 4 particiones: sda1, sda2 y sda3. La cuarta, sda4 se
extiende y dentro de ella se crean 4 más: sda5, sda6,sda7 y sda8. La explicación para ésto lo veremos más
adelante.
Nos sobran 7506 Mb y damos click en Next.
La estructura de archivos en linux es jerárquica y corresponde a una árbol de directorios (que también se
pueden llamar carpetas como en Windows aunque no es lo usual) cuya raíz está en /. Dentro de los directo-
rios se ubican los archivos (si sus nombres comienzan por punto se les denomina "ocultos"). Los comandos de
13
administración del root están en un directorio; los de un usuario normal en otro.
Al iniciar como root en una consola linux, entramos a una shell por defecto llamada bash (la interfaz por
defecto de CentOS) a un modo llamado directorio de inicio, el cual despliega una tilde:
Lo que sucede es que al ingresar al sistema por primera vez, linux siempre nos lleva al home del usuario.
Nuestro caso es particular, porque somos superusuario o usuario root, cuyo home es: /root. En otras palabras,
el home del root se simboliza como:
~]#.
Con pwd (print working directory) podemos ver que el directorio donde nos encontramos es /root:
~]# pwd
/root
~]# ls
anaconda-ks.cfg install.log install.log.syslog
~]# cd ..
/]#
14
2.1.4 Volver al directorio raíz
Siempre, encontrémonos donde nos encontremos, podemos volver al directorio raíz con el comando:
/]# cd /
Por ejemplo:
/]# man ls
despliega el manual para el comando que lista los directorios: ls.
Una alternativa es escribir – –help (dos guiones seguidos) después del comando:
/]# rm – –help
Otra opción es utilizar el comando pinfo antes de un comando para desplegar información:
/]# pinfo rm
Control+c ó Control+z.
2.1.8 El autocompletar
Una herramienta muy útil es la que nos permite autocompletar el nombre de los archivos o directorios que
necesitemos. Ésto se logra con el tabulador (tab). Al ingresar una letra y dar tab + tab, se despliegan todas las
posibles alternativas a tal comando. Cuando un conjunto de letras sea suficiente para determinar un comando,
un sólo tab bastará.
15
2.1.10 Apagar y reiniciar CentOS de manera ordenada
/]# shutdown -g0
/]# poweroff
Éstos cambios permanecen mientras estemos logeados. Al salir y volver a ingresar éstos desaparecerán.
una vez dentro de él escribimos cualquier mensaje, por ejemplo: "Bienvenido, usuario!", guardamos con con-
trol + o, enter, salimos con control + x, nos deslogeamos y volvemos a entrar para verificar los cambios
efectuados.
Hacemos:
/]# date – –set "2018-01-01 11:00:00"
16
2.2.4 Darle un nombre a nuestro equipo
En CentOS 6.9 debemos editar el siguiente archivo:
/]# nano /etc/sysconfig/network
y reiniciar:
/]# reboot
Redhat:
Pero para hacerlo permamentementde debemos editar el archivo hostname ubicado en /etc:
/]# nano /etc/hostname
17
/
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
/bin
/sbin
/local
var /bin
/sbin
Para dirigirnos a cualquier archivo en linux a través de sus subdirectorios, los vamos señalando con /:
Por ejemplo:
/]#/urs/local/bin
1. /etc
Acá no hay programas. Sólo archivos de texto. Acá se guardan las configuraciones de los equipos y
servicios.
18
2. /var
Acá se guardan todas las variables del equipo, como por ejemplo: /var/spool/mail/sebastian
3. /proc
Acá están los procesos. Se pueden ver porque son archivos.
4. /dev
Acá van los dispositivos (nuestro hardware)
5. /bin
Contiene programas que pueden ser ejecutados tanto por root, como por el usuario.
6. /sbin
Acá hay programas que sólo pueden ser ejecutados por root.
/bin y /sbin son software de desarrollo propio de CentOS.
7. /usr/bin
Contiene programas que pueden ser ejecutados tanto por root, como por el usuario. Son software
desarrollado por terceros.
8. /usr/sbin
Acá hay programas que sólo pueden ser ejecutados por root. Son software desarrollado por terceros.
9. /usr/local/bin
Contiene programas que pueden ser ejecutados tanto por root, como por el usuario. Son software
utilitarios.
10. /usr/local/sbin
Son software utilitarios. Acá hay programas que sólo pueden ser ejecutados por root.
Rutas absolutas.
Las rutas absolutas especifican la ruta que conduce a un directorio o archivo, empezando por el directorio
raíz. La ruta consiste en una lista secuencial de directorios, separados por barras, que conducen al directorio
o archivo al que se desea llegar. Por ejemplo:
/]# pwd
/home/raf/andreas
Rutas relativas.
Ahora, las rutas relativas especifican directorios y archivos comenzando por el directorio de trabajo actual.
Supongamos que estamos en el directorio adorno, esto es: /escuela/frankfurt/adorno
si desde aquél directorio quisiéramos acceder a /sociedad, debemos escribir como ruta relativa:
../frankfurt/horkheimer/sociedad.
La siguente nomenclatura nos ayudará a orientarnos:
.. : indica que pasamos a un nivel directamente superior.
Podemos listar los directorios del nivel inmdiatamente superior al cual nos encontramos con:
/]# ls ..
19
Así, por ejemplo, si nos encontramos en el directorio /personalidad:
/]# ls ..
adorno marcuse fromm horkheimer ../.. : indica que pasamos a un nivel dos veces más arriba.
Por ejemplo si estamos en adorno: /adorno
../../adorno nos deja en el directorio escuela.
../../.. : indica que pasamos a un nivel tres veces más arriba y así sucesivamente.
escuela
frankfurt
/trabajo
1 2 3 4 5 6
7 8 9 10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
34 35 36 37 38 39 40 41 42 43
Solución:
No hay nada más simple que crear estructuras de directorios en linux: la barra seguida por el corchete
indica que se bajará un nivel, y las comas entre los directorios que están dentro de los corchetes establecen que
los elementos que separan estarán en el mismo nivel. Lo único que se requiere es ser cuidadoso (no tenemos
herramientas para copiar y pegar desde un block de notas).
mkdir -p permite crear varios niveles de directorios a la vez. Crea los directorios padre que falten para
cada argumento directorio:
20
4/{13,14/{28/{38,39},29}},
5/{15,16/{30,31/{40,41}}},
6/{17,18/{32,33/{42,43}}}
}
Importante: No deje ningún espacio en blanco.
Ejercicio es con los comandos cd, cd .., y ls revisar que toda la estructura sea la correcta.
2.3.3 Ejercicio n°2: Construya una estructura jerárquica. (Primera prueba del primer semestre del
2017)
Primera p
1. Cree el siguiente árbol de archivos y directorios vía comandos a partir del directorio /Trabajo:
gra
Solución:
/Trabajo
/gra
21
Entonces:
mkdir -p Trabajo/
gra/{
apuntes/{informatica,ingles},
documentos,
harley2,
practicas/{harley,elespacio}
}
(La trampa consiste en caer en el error de agregar un { después de Trabajo/: Trabajo/{ )
Por ejemplo:
/]# head -1 /etc/passwd >> dos.txt
1. /]# clear
Limpia la pantalla.
Lo mismo hace ctrl + l.
2. /]# cd /etc/sysconfig
Nos cambiamos de directorio: /etc/sysconfig.
/]# cd ..
Nos devolvemos al directorio precedente. Cuando cd se ejecuta sin parámetros, nos devuelve al direc-
torio home del usuario.
3. /]# echo
Es muy importante, pues nos permite imprimir tanto en la pantalla como en un archivo por medio del
redireccionamiento » -un poco más adelante veremos ésto-. Pregunta de prueba.
4. /]# more
Recordemos cuando queremos desplegar la información de nuestros directorios con el comando:
/]#ls -R
la lista es enorme. Es deseable detener la información en la pantalla para poder leerla e ir desplegando
las líneas con consecutivos enter. Para ello sirve el comando more, el cual despliega las primeras 25
líneas de un archivo, y luego permite ir desplazándose por las siguientes con sólo presionar enter.
Va precedido por la pipa (|) y lo antecede el comando que despliega la información. Dos ejemplos a
continuación:
/]#ls -la | more
/]#ls -R | more
(Recordemos que cualquier proceso en consola pude detenerse con Control+z para volver a la estructura
de directorios).
22
5. /]# less
Con el comando less podemos desplazarnos en todos los sentidos cuando se despliega algún contenido
en la terminal.
7. /]# mkdir
Con mkdir podemos crear nuevos directorios. La opción -p permite crear varios niveles de directorios a
la vez. Con el comando:
/]# mkdir miguel
creamos un directorio.
Con el comando:
/]# rm -R miguel
lo borramos en forma recursiva (se nos preguntará a cada nivel si queremos borrar. Si es lo que deseamos
escribimos cada vez "y" y enter.)
8. /]# rmdir
Borra directorios sólo si están vacíos.
9. /]# rm
Sirve para borrar archivos o directorios.
Con:
~]#rm -r /
podemos borrar todo el filesystem (en Windows esto no se puede).
11. /]# bc
Abre una calculadora
23
/]# cal
despliega el mes actual.
(a) Copiar un archivo a otro manteniendo el original (con el comando cp se destruye el original):
/]# cp carlos.txt miguel.txt
Si miguel.txt no existe, lo crea. Si existe, lo sobrescribe.
(b) Copiar archivos a un directorio:
/]# cp carlos.txt /home/usuario/Downloads
Copiar archivos a un directorio usando rutas relativas:
Al usar rutas relativas es muy importante terminar el nombre de directorio con una barra
porque así estamos indicando que es un directorio. Cuando la ruta es de un archivo NUNCA
se pone la / al final.
/]# cp miguel.txt ./Downloads/
(c) Copiar dos archivos simultáneamente a un directorio:
/]# cp miguel.txt program.py ./Downloads/
(d) Copiar de todos los archivos .txt a un directorio a un directorio:
/]# cp *.txt Directorio
(e) Copia de todos los archivos de un directorio a otro directorio:
/]# cp trabajo/miguel/* Trabajo/carlos
15. /]# mv
Es usado para mover o renombrar archivos y directorios del sistema de archivos. A diferencia de cp, el
archivo original es borrado. Es por ello que también es utilizado para renombrar archivos. Si no existe
el archivo de destino, mv lo crea.
Su sintaxis es:
/]# mv archivo1 archivo2 ... /Directorio
16. /]# rename
Permite renombrar archivos de manera masiva
Sintaxis:
/]# rename perlexpr [archivos]
donde perlexpr es una expresión regular en lenguaje Perl.
Ejemplo: supongamos que queremos cambiar la extensión de los archivos .txt del directorio actual por
.csv:
/]#rename ’s/\.txt/\.csv/’ *.txt
17. /]# cat
Despliega el contenido de un archivo.
Pero muchas veces se despliega muy rápido. Acá resulta útil el comando more.
/]# cat miguel.txt | more
24
18. /]# head
Éste comando por defecto despliega las 10 primeras líneas de un archivo de texto. Pero podemos des-
plegar las que queramos con la opción n. Por ejemplo:
Por ejemplo, supongamos que deseamos enviar la información de toda nuestra estructura de archivos al
fichero carlos.txt de nuestro subdirectorio Trabajo ya creado.
Otros ejemplos:
/]# cal > agosto.txt
/]# ls /home > home.txt
Cree un archivo de texto que contenga los meses de Enero 2018, Enero 2019 y Enero del 2020.
Cree un archivo de texto que contenga la primera y la última línea del archivo passwd que está en el
directorio /etc.
/]# head -1 /etc/passwd > dos.txt
/]# tail -1 /etc/passwd » dos.txt
El direccionamiento sobreescribe sobre un archivo ya existente. Si lo que deseáramos fuese sólo agregar
al final del contenido del archivo nueva información, podemos usar el comando >>
25
23. /]# wc
Éste comando despliega tres valores: líneas, palabras y caracteres (en ese orden).
Por ejemplo, aplicado al archivo de texto que hemos creado llamado carlos.txt en el directorio Tra-
bajo nos entrega:
/]# wc /Trabajo/carlos.txt
109916 101509 1161474 /Trabajo/carlos.txt
donde el primer valor muestra el número de caracteres, el segundo el número de palabras y el ter-
cero el número de líneas.
Asimismo se pueden procesar varios archivos, al final de los cuales nos muestra la cuenta total, por
ejemplo:
/]# wc /etc/shells /etc/hosts
6 6 61 /etc/shells
2 18 158 /etc/hosts
8 16 219 total
27. /]# ls
Sin argumentos lista todos los archivos (incluyendo directorios) del directorio donde el usuario está
posicionado.
(a) ~]#ls -a: lista todos los archivos, incluyendo los ocultos
(b) ~]#ls -l: lista los archivos junto a sus permisos
(c) ~]#ls -R: lista los contenidos de todos los directorios recursivamente (haga ésto sólo cuando tenga
tiempo, porque el despliegue es enorme)
(d) ~]#ls -la f*.* | more: lista los archivos que comienzan con la letra f (más adelante veremos lo
que significa el comando | more)
(e) Se pueden escribir varios parámetros juntos, como por ejemplo:
~]#ls -la
26
Al ejecutar el comando ls -la se despliega una serie de archivos cuya cuyo primer carácter de la
primera columna si es:
-. : significa que es un archivo normal.
d. : significa que es un directorio.
32. /]# ps
El comando process muestra los procesos que ha iniciado el usuario, por ejemplo:
/]# ps
/]# ps au
/]# ps aux
muestra los procesos desde qe el equipo se encendió.
37. /]# df
Muestra el contenido de los archivos del filesystem.
38. /]# du
Estima el espacio de uso de los ficheros.
27
Tanto a df como a du le podemos agregar las opciones:
-m: para desplegar la información en megabytes.
-k: para desplegar la información en kilobytes.
39. startx
En Redhat, con: startx cargamos la interfaz gráfica.
2.4.1 Ejercicio n°3. Practique la comandería básica. (Primera prueba del primer semestre del 2017)
Consideremos la estructura de archivos ya creada del ejercicio n°2:
/Trabajo
/gra
1. Listar el contenido de todo el directorio de archivos (desde /) y redirigir su salida al archivo: Resul-
tado.txt.
4. Eliminar: /gra/practicas
/]# rm -R Trabajo/gra/practicas
28
3 Variables de entorno
Las variables de entorno se cargan junto con el sistema, sus valores son dinámicos, están en la RAM y pueden
ser utilizadas por varios procesos a la vez.
/]# $BASH
/bin/bash
Todas las variables de entorno son importantes, pero las que más lo son:
4 Usuarios y grupos
4.1 Introducción
Un usuario es un objeto1 UGO -un poco más adelante veremos que significa ésto-, un usr, que sirve como
una cuenta para hacer uso de los servicios de un sistema operativo de manera restringida. En la consola, los
usuarios son precedidos por el signo peso $:
/]$
mientras que como ya hemos visto, el root va precedido del signo gato: #:
/]#
Importante: Desde una cuenta de usuario podemos pasar a la del root con el comando:
1
recordemos que un objeto posee atributos y métodos.
29
/]# su
Donde se nos pedirá la contraseña del superusuario.
Por ejemplo, si deseamos crear un usuario llamado ’miguel’ cuyo grupo principal sea ’movimiento’, cuya
carpeta home sea /home/miguel y su intérprete de comandos sea /bin/bash, ejecutaremos el siguiente
comando:
/]# useradd -g movimiento -d /home/miguel -m -s /bin/bash miguel
Si no utilizamos la opción -m, no se creará la carpeta home del usuario; en tal caso tendríamos que
crearla manualmente.
2. /]# usermod
Permite cambiar el nombre del usuario, su carpeta home, su intérprete de comandos, los grupos a los
que pertenece y algunos otros parámetros.
3. /]# userdel
Eliminamos un usuario. Con la opción -r también se eliminará su carpeta home, por ejemplo:
/]# userdel -r pedro
4. /]# groupadd
Éste comando permite añadir un grupo indicando como parámetro el nombre del grupo.
Por ejemplo, si deseamos crear un grupo llamado ’movimiento’ ejecutaremos:
/]# groupadd movimiento
5. /]# groupmod
Permite modificar el nombre de un grupo o el gid del mismo. La sintaxis es: groupmod [-g nuevo-gid]
[-n nuevo-nombre] nombre-grupo, ejemplo:
30
6. /]# groupdel
Eliminamos un grupo, por ejemplo:
/]# groupdel movimiento
Si algún usuario tuviera dicho grupo como grupo primario, el comando groupdel no eliminará el grupo.
Más adelante veremos lo que significa un grupo primario y un grupo suplementario.
7. /]# adduser Se utiliza el comando adduser seguido del nombre del usuario y del nombre del grupo al
cual lo queremos añadir, por ejemplo:
/]# adduser miguel movimiento
8. /]# deluser Se utiliza el comando deluser seguido del nombre del usuario y del nombre del grupo del
del cual lo queremos retirar, por ejemplo:
/]# deluser juan profesores
Comandos de consulta:
1. /]# id
Con éste comando consultamos las características de un usuario en particular. Por ejemplo del root:
/]# id root
uid = 0(root) gid = 0(root) groups = 0(root)
/]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
El archivo /sbin/nologin es sumamente restrictivo. Ni siquiera se puede ingresar al sistema. A los usuar-
ios se les asignan los números del 500 en adelante (en Red Hat, a los usuarios nuevos se les asignan los
números del 1000 en adelante), por ejemplo, cuando creamos por primera vez un usuario en nuestro sistema,
linux le va a asignar automáticamente los valores respectivos:
U: 500
G: 500
O: 500
31
desplegamos la información de todos los usuarios y superusuarios.
4.4 UGO
En linux, todos los objetos se rigen bajo la funcionalidad: Users, Groups, Other, (también denominado Mid,
gid y GID) lo que se denomina UGO. Esto es muy importante, porque !es una obligación de los usuarios el
tener que pasar por UGO! Sólo pasando por UGO un usuario puede ingresar al sistema.
Así es como:
/]# useradd miguel
no es interesante para el sistema. El sistema requiere su paso por UGO.
A un usuario se le pueden asignar valores para GID, Gid y Uid: Para modificar el UID, utilizamos ‘usermod’con
el parámetro -u seguido del UID a asignar:
Para modificar el GID utilizamos el comando ’groupmod’ con el parámetro -g seguido del GID a asignar:
Podemos ver los valores UGO del usuario recién creado con:
/]# id miguel
y podemos ver que a cada uno de ellos se les asignó el valor 500 en forma automática.
No es necesario ahora crear un grupo para miguel, pues cada vez que se crea un usuario se crea un UGO,
con un userid único e inequívoco guardado en: /etc/passwd.
Cualquiera sea el tipo de usuario, todas las cuantas se encuentran definidas en el archivo de configuración
passwd ubicado en el directorio /etc. Éste archivo es de tipo ASCII y contiene 1 línea para cada usuario.
32
!!: indica un bloqueo doble (política de retención de password)
Nuestro usuario miguel está bloqueado por no tener contraseña. Asignémosle la contraseña: 123456:
/]# passwd miguel
Ahora, los grupos también utilizan passwords, que se almacenan en le archivo: /etc/gshadow.
Y volvamos a desplegar el contenido del archivo /etc/gshadow asociado a nuestro usuario miguel:
/]# cat /etc/gshadow | grep miguel
miguel:una-serie-de-garabatos::
Ahora vemos que el segundo campo, asociado a la contraseña del grupo, despliga una larga serie de letras,
números y caracteres.
33
3. Cree 10 grupos con el formato: grupo1...grupo10.
descubrimos que con el parámetro -u podemos asignarle un nuevo valor a la id del usuario.
Entonces hacemos:
Entonces hagamos que cada cuenta impar sea deshabilitada el 1 de Mayo del 2018:
34
El comando chage con el parámetro -l nos sirve para verificar la fecha de expiración:
Para linux, epoch indica un día específico: el 1 de Enero de 1970. A partir de ese momento se cuentan
los días en que una cuenta existirá antes de caducar. Aparece en el campo 8 de las líneas del archivo:
/etc/shadow. Podemos verificar que éste valor para los usuarios que acabamos de modificar es de 17652.
7. Agregue a cada usuario a su grupo respectivo: usuario1 -> grupo1 y así sucesivamente.
/]# id root
uid=0(root) gid=0(root) groups=0(root)
/]# id usuario1
uid=501(usuario1) gid=501(usuario1) groups=501(usuario1)
-a: agrega un usuario a su(s) grupo(s) suplementario(s) sin removerlo de su(s) otro(s) grupo(s). Debe
utilizarse con la opción: -G.
-G: provee una lista de grupos suplementarios de los cuales el usuario es miembro.
Sintaxis:
/]# usermod -aG grupo usuario
Ahora, ejecutemos la instrucción de asignación al grupo y veamos que despliega la información del
usuario1 utilizando el comando id:
35
/]# usermod -a -G grupo1 usuario1
/]# id usuario1
uid=500(usuario1) gid=500(usuario1) groups=500(usuario1),510(grupo1)
Vemos que nuestro usuario está dentro de su grupo primario(usuario1) y dentro de un grupo suple-
mentario(grupo1).
Recordemos que podemos ver los grupos a los que pertenece un usuario con el comando groups:
Comprobémoslo:
/]# id usuario10
uid=5005(usuario10) gid=519(grupo10) groups=519(grupo10)
pero el grupo: usuario1 todavía existe, así dejemos su situación tal cual estaba:
/]# usermod -aG usuario10 usuario10
Sintaxis:
/]# usermod -l nuevo_loginname viejo_loginname
Entonces:
36
/]# usermod -l miguel8 usuario8
/]# usermod -l miguel10 usuario10
/]# id miguel2
uid=5001(miguel2) gid=501(usuario2) groups=501(usuario2),511(grupo2)
Sintaxis:
/]# groupmod -n nuevo_nombre_de_grupo viejo_nombre_de_grupo
/]# id miguel2
uid=5001(miguel2) gid=501(usuario2) groups=501(usuario2),511(movimiento2)
Sintaxis:
/]# usermod -c "comentario" usuario
Asignémosle un comentario entonces a todos los usuarios. Recordemos que los usuarios pares han
cambiado de nombre:
Verifiquemos con:
/]# cat /etc/passwd | grep usu
37
El comando anterior sirve, pues la palabra usu está como subdirectorio del home en todos los usuarios.
Vemos que el comentario está insertado en todos los usuarios en el quinto campo de cada línea.
En el quinto campo del archivo /etc/passwd están los comentarios o el nombre completo del usuario.
Sintaxis:
/]# usermod -ou 0 usuario
Con ésta instrucción le asignamos un uid=0 al usuario.
En nuestro caso:
/]# usermod -ou 0 usuario1
Verifiquemos:
/]# id usuario1
uid=0(root) gid=500(usuario1) groups=0(root),510(grupo1)
Verifiquemos:
/]# id usuario1
uid=0(root) gid=500(usuario1) groups=0(root)
Sintaxis:
/]# usermod -L usuario
38
/]# usermod -L usuario9
Verifiquemos:
El signo de exclamación antes de la serie de garabatos indica que la password está bloqueada.
12. Cambie el gid de los grupos pares por 5000 y superior (grupo2, grupo4,...).
Sintaxis:
/]# groupmod -g nueva_gid grupo
Verifiquemos:
Sintaxis:
/]# groupmod -n nuevo_nombre_del_grupo nombre_del_grupo_viejo
39
/]# groupmod -n gramna6 grupo6
/]# groupmod -n gramna8 grupo8
/]# groupmod -n gramna10 grupo10
Verifiquemos:
14. Crear dos grupos llamados par e impar. Asignar a todos los usuarios pares al grupo par y a los impares
al grupo impar.
Supongamos que queremos que los usuarios permanezcan también en los grupos donde ya están.
/]# id usuario3
uid=502(usuario3) gid=502(usuario3) groups=502(usuario3),512(grupo3),5006(impar)
40
verifiquemos:
Verifiquémoslo:
/]# id miguel
41
el cual despliega la siguiente información almacenada en el archivo /etc/passwd y donde podemos obser-
var que los valores de uid, el group id y GID (otros) se asigna en forma automática en 500:
La creación de un usuario es un proceso complejo en el cual suceden muchas cosas. Es importante com-
prender cada una de ellas:
a) /etc/passwd La utilidad de éste fichero radica en que mantiene la información principal de cada
cuenta. Es aquí donde se guarda la configuración de cada usuario creado: nombre de usuario, UID,
GID, login shell, directorio home, etc. Cualquiera sea el tipo de usuario, todas las cuentas se encuentran
definidas en el archivo de configuración passwd ubicado en el directorio /etc. Éste archivo es del tipo
ASCII y contiene 1 línea para cada usuario.
Este archivo es de texto tipo ASCII, se crea al momento de la instalación con el usuario root y las cuentas
especiales, más las cuentas de usuarios normales que se hayan indicado al momento de la instalación.
Observemos qué nos dice el archivo /etc/passwd respecto al usuario miguel, desplegando sus coincien-
cias con la palabra: miguel. Recordemos que para hacer esto podemos usar el comado grep:
/]# cat /etc/passwd | grep miguel
Se despliega lo siguiente:
b) etc/group información sobre los grupos definidos en el sistema. nombre del grupo, GID y miem-
bros del mismo. Este archivo guarda la relación de los grupos a los que pertenecen los usuarios del
sistema, contiene una línea para cada usuario con tres o cuatro campos por usuario.
c) etc/shadow en sistemas actuales, fichero sin permiso de lectura que guarda las contraseñas en-
criptadas. Anteriormente (en sistemas Unix) las contraseñas cifradas se almacenaban en el mismo
/etc/passwd. El problema es que ’passwd’ es un archivo que puede ser leído por cualquier usuario
del sistema, aunque solo puede ser modificado por root.
Con cualquier computadora potente de hoy en día, un buen programa de descifrado de contraseñas
y paciencia es posible "crackear" contraseñas débiles (por eso la conveniencia de cambiar periódica-
mente la contraseña de root y de otras cuentas importantes). El archivo ’shadow’, resuelve el problema
ya que solo puede ser leido por root. Considérese a ’shadow’ como una extensión de ’passwd’ ya que no
solo almacena la contraseña encriptada, sino que tiene otros campos de control de contraseñas.
42
4. Al usuario se le asigna una cuenta de correo.
Ésta cuenta de correo se ubicará en: /var/spool/mail/nombre_del_usuario.
6. Al usuario se le crean 4 archivos de configuración: Los usuarios normales y root en sus directorios
de inicio tienen varios archivos que comienzan con "." es decir están ocultos.
Archivos de configuración:
a) .bash_profile: Éste es el primer archivo que se ejecuta al hacer login. Aquí podremos indicar los
alias, variables, configuración del entorno, etc. que deseamos iniciar al principio de la sesión.
b) .bashrc segundo archivo que se ejecuta al hacer login. permite ejecutar sentencias de comando
(ejecuta programas)
c) .bash_history se crea al acceder a la cuenta y guarda las últimas 2000 líneas antes de hacer un
enter.
d) .bash_logout: Es el último programa que se ejecuta en la sesión el cual guarda la hora y fecha
de salida, con el fin de registro, control, catastro. Aquí podremos indicar acciones, programas, scripts,
etc., que deseemos ejecutar al salirnos de la sesión.
4.7.1 El comando chage. (Primera prueba del primer semestre del 2017)
Con el comando chage podemos administrar la política de passwords de los usuarios.
A continuación tenemos la función de cada uno de sus parámetros:
Sintaxis:
/]# chage -parámetro valor usuario
5. /]# chage -h
Muestra la ayuda.
43
6. /]# chage -I 1 usuario1
Éste comando hace que la cuenta se desactive después de 1 día desde la fecha de expiración de
la contraseña.
Corroborémoslo:
4.8.1 Ejercicio n°4. Cree un usuario PEPITO con las siguientes características: (Primera prueba del
primer semestre del 2017)
Solución:
Observemos que la pregunta relacionada al cuadro "Inactividad" está planteado de una forma extremada-
mente ambigua. Por lo que se pregunta es por el tiempo en que se quiere que la cuenta sea desactivada luego
de la fecha de expiración de la contraseña.
Si bien todo lo que sigue podríamos escribirlo en una sola línea lo haremos paso a paso por razones de claridad.
44
Comentario Usuario Válido
Work Space /casa/PEPITO
Fecha Expiración 30-04-2018
Bloqueo si
GID 5000
Gid 3000
Uid 4000
Shell /sbin/nologin
Grupo Otro_Grupo
Vigencia Pass 30 días
Warning 15
Inactividad 1 día
PASS_MAX_DAYS (número)
El máximo número de días que una contraseña puede ser usada. Si la contraseña es mayor a lo indicado, un
45
cambio de contraseña será forzado. Si no se especifica nada, la política de retención de la contraseña será
-1: lo cual deshabilita la restricción. (una política de retención=0 significa: cambie la contraseña cuando y
donde quiera)
PASS_MIN_DAYS (número)
El mínimo número de días permitida entre cambios de contraseña. Cualquier intento de cambio en un plazo
menor al indicado será rechazado.Si no se especifica nada, la política de retención de la contraseña será -1:
lo cual deshabilita la restricción.
PASS_WARN_AGE (número)
El número de días antes de que expire una contraseña en el cual se desplegará un mensaje de advertencia. Un
cero indica que la advertencia se lanzará el día de la expiración,un valor negativo indica que no hay adver-
tencia para emitir. Si no es especificado, ninguna advertencia será desplegada. PASS_WARN_LEN (número)
Indica la extensión mínima de los caracteres de la contraseña.
UID_MIN (número)
UID_MAX (número)
Indican los valores máximos y mínimos para la asignación automática de uid con el comando useradd.
GID_MIN (número)
GID_MAX (número)
Indican los valores máximos y mínimos para la asignación automática de gid con el comando groupadd.
4.10.1 Ejercicio n°5. Genere un guión tipo bash que sea aplicable para todos los futuros usuarios
creados. (Primera prueba del primer semestre del 2017)
Lo que se pide es que cada vez que creemos un nuevo usuario, en la pantalla que se abra se despliegue la
información pedida de la tabla:
(La trampas son dos:
1. No se dispone de la información relativa a todas las variables de entorno. En el anexo se entrega
una lista completa de éstas.
2. El formato para el despliegue tanto de fecha como de la hora requiere de un carácter especial: ‘, que
se obtiene presionando la tecla alt gr + la tecla que contiene } y ])
Solución:
46
Fondo Rojo
Fuentes Amarillo
Bienvenido usuario Variable
Al servidor Variable
UD. Realiza la conexión a las HH:MM:SS
De la fecha DD/MM/AAAA
El tipo de Shell en ejecución es Variable
El tipo de terminal en ejecución es Variable
Su cuenta de correo es Variable
Su work Space es Variable
El ejercicio es extremadamente sencillo. Lo único que debemos hacer es editar el archivo: /etc/skel/.bash_profile
y agregar las líneas que se detallan:
47
/]# ls -l
dr-xr-xr-x. 2 root root 4096 Jul 31 18:39 bin
La tercera columna es el usuario propietario del elemento. El cuarto elemento es el grupo de usuarios que
tienen permisos sobre el elemento.
Los primero que se lista a la izquierda es una serie de 10 caracteres terminados por un punto. El primer
carácter nos indica si se trata de un archivo (-) o un directorio (d).
Las siguientes tríos son los permisos. Los primeros son los permisos del usuario, los segundos del grupo al que
pertenece el usuario y el tercero son los permisos de los usuarios que están fuera del grupo del usuario (en
ese orden).
Tienen la siguiente estructura:
rwx rwx rwx, donde:
r: read
x: write
x: execution
48
5.5 La estructura binaria de los permisos
000 0 ---
001 1 --x
010 2 -w-
011 3 -wx
100 4 r--
101 5 r-x
110 6 rw-
111 7 rwx
Por ejemplo:
/]# chmod 705 Datos.txt
5.6 Ejercicios
5.6.1 Ejercicio 1
Cree 4 usuarios, dos hombres y dos mujeres y cambie los permisos de los directorios personales para que cada
usuario tenga control total sobre su directorio privado (home) y el resto sólo permisos de lectura sobre los
directorios de todos los demás.
Observemos que al crear 4 usuarios desde el root, todos, el root y los 4 usuarios poseen en sus carpetas
/home los directorios home de los 4 usuarios recién creados. Desde root hacemos:
Dándole al tercer trío permisos r - x: 5, logramos que todos los usuarios tengan acceso al directorio home
de todos.
Ahora creemos dos grupos: alumnos y alumnas y asignemos los alumnos según corresponda (sin eliminar
el grupo de origen):
49
/]# groupadd alumnas
/]# groupadd alumnos
Verifiquemos:
/]# id pedro
uid=500(pedro) gid=500(pedro) groups=500(pedro),505(alumnos)
Asignemos permisos para que el grupo alumnos pueda ingresar a "archivos de alumnos" y lo mismo con
las niñas:
/]# chgrp alumnos archivos de alumnos
/]# chgrp alumnas archivos de alumnas
Ahora viene algo interesante. Queremos que sólo los alumnos entren a "archivos de alumnos" y los mismo
para las niñas. Entonces, desde el root:
5.6.2 Ejercicio 2
Agregue el nombre completo a lo usuarios. Cree en el directorio /home del root los siguientes directorios:
Gerencia
Personal
Empleados
Haga que cada usuario tenga el control total sobre su directorio privado y el directorio del grupo al cual
pertenece y de sólo lectura para el resto de los directorios.
50
Vivente R vrivasa Vr186 Empleados
6 Programación de Scripts
6.1 Introducción a la Shell
Shell es simplemente un intérprete de C. Programar un script no es nada más que abrir uno de los tantos
ficheros que componen la estructura de archivos de linux con un editor de textos como nano, y escribir un
programa dentro de él en un C puro. Éste archivo se interpreta (se ejecuta) mediante un proceso denominado
shell. Ahora, existen muchas shells, siendo la que posee linux por defecto denominada bash, ubicada en el
fichero /bin/bash, pudiendo accederse a ella tanto desde root ($), como desde el usuario (#).
En etc/shells se guardan las referencias de los tipos de shell que soporta nuestra máquina. Estando den-
tro de un archivo de texto la programación se hace mucho más fácil si utilizamos comentarios, los que van
precedidos de un símbolo #:
.bash_profile
.bashrc
.bash_history y
.bash_logout
y que podemos editar cualquiera de ellos (en realidad, cualquier archivo), con Nano, de la forma:
o variables. Por ejemplo, supongamos que deseamos imprimir la fecha con el comando date. Para ello primero
debemos convertir el dato de la fecha en una variable.
/]# h=$(date)
/]# echo $h
51
6.2 Ejercicio: construya un script que despliegue información cada vez que inicie un
nuevo usuario su sesión Segunda prueba del primer semestre del 2017
Edite un archivo tal que cada vez que se inicie un usuario se cree el directorio:
/home/$USER/$UID/$FECHA/$HORA
/]# cd /etc/skel
skel]# nano .bash_profile
Una vez dentro del archivo, agregamos al final del código las siguientes líneas:
mkdir /home/$USER/$UID/$fecha/$hora -p
52
Creemos un Script que nos pregunte nuestro nombre y apellido y luego los despliegue en la pantalla.
Por un asunto de orden primero construyamos un directorio donde iremos almacenando todos nuestros Scripts:
#! /bin/bash
echo "Hola estimado"
echo "Ingrese su nombre:"
read NOM
echo "Ingrese su apellido:"
read APE
echo "Su nombre completo es:"$NOM$APE
scripts]# ls -la
scripts]# ls -la
6.4 Ejercicios
1. Escriba un Script que reciba dos números y obtenga la suma de ellos. Además, que posea un fondo verde
y que las letras sean amarillas.
#! /bin/bash
echo "Ingrese el primer número"
read a
echo "Ingrese el segundo número"
read b
c=$((a+b))
echo "La suma de los números ingresados es: " $c
2. Construya un Script que permita realizar las cuatro operaciones básicas (uso del case).
53
#! /bin/bash
echo "Ingrese el primer número:"
read a
echo "Ingrese el segundo número:"
read b
echo "Elige la operación:"
echo "1. Suma"
echo "2. Resta"
echo "3. Multiplicación"
echo "4. División"
read op
case $op in
1) res=$((a+b));;
2) res=$((a-b));;
3) res=$((a*b));;
4) res=$((a/b));;
esac
echo "El resultado es: " $res
#! /bin/bash
a=1
while(($a<=1))
do
echo "Ingrese el primer número:"
read a
echo "Ingrese el segundo número:"
read b
echo "Elige la operación:"
echo "1. Suma"
echo "2. Resta"
echo "3. Multiplicación"
echo "4. División"
read op
case $op in
1) res=$(($a+$b));;
2) res=$(($a-$b));;
3) res=$(($a*$b));;
4) res=$(($a/$b));;
esac
echo "El resultado es: " $res
echo "Desea seguir?"
echo "1.SI"
echo "1.NO"
read x
case $x in
1) a=1;;
54
2) a=2;;
esac
clear
done
4. Construya un script que cree usuarios y grupos, que asigne usuarios a grupos y que despliegue la infor-
mación.
#! /bin/bash
#Éste programa crea usuarios y grupos#
echo "Ingrese nombre: "
read NOM
echo "Ingrese grupo: "
read GRU
useradd $NOM
passwd $NOM
123456
groupadd $GRU
usermod -G $GRU $NOM
echo "La información del usuario creado es:"
echo "UID" $UID
echo "Lista de grupos a los que pertenece el usuario actual:" $GROUPS
ACÁ HAY UN ERROR PORQUE SE DESPLIEGA EL UID Y EL GRUPO DEL USUARIO ROOT, NO DEL
QUE SE CREA
55
6. Cree un programa que permita ingresar el nombre de un usuario y una cantidad, los cree automática-
mente y los liste:
usuario1
.
.
.
usuarion
#! /bin/bash
echo "Ingrese nombre: "
read nom
echo "Ingrese cantidad de usuarios: "
read can
for ((i=1;i<=can;i++))
do
usedadd $nom$i
echo "Usted creó al usuario: " id $nom$i
done
7. Cree un script que permita ingresar un nombre de usuario, un nombre de grupo, una cantidad y que a
cada usuario se le asigne su grupo respectivo:
#! /bin/bash
echo "Ingrese nombre de usuario: "
read usu
echo "Ingrese nombre de grupo: "
read gru
echo "Ingrese cantidad: "
read can
for ((i=1;i<=can;i++)) do
useradd $usu$i
groupadd $gru$i
usermod -G $gru$i $usu$i
echo "Usted creó al usuario: " id $usu$i
done
8. Crear un script que permita ingresar un nombre de usuario, una cantidad de usuarios y que al momento
de ser creados los usuarios se creen directorios al estilo:
xxx1 /home/xxx1/AAAAMMDD/HHMMSS
xxx2 /home/xxx2/AAAAMMDD/HHMMSS
56
.
.
.
xxx30 /home/xxx30/AAAAMMDD/HHMMSS
#! /bin/bash
echo "Ingrese nombre de usuario:"
read nom
echo "Ingrese cantidad de usuarios:"
read can
hora=$(date +"%H%M%S")
fecha=$(date +"%Y%m%d")
for ((i=1;i<=can;i++)) do
useradd $nom$i
mkdir /home/$nom$i/$fecha/$hora -p
echo "Usted creó el usuario: " id $nom$i
done
9. Ingrese un nombre de usuario, una cantidad de usuarios y una UID base (por ejemplo=5000) de la
siguiente forma:
uid usuario
5000 usuario0
5001 usuario1
.
.
.
5010 usuario10
a los usuarios pares asignarles un bloqueo de cuenta y a los impares asignarles comentarios:
#! /bin/bash
echo "Ingrese nombre de usuario: "
read nom
echo "Ingrese cantidad de usuarios: "
read cant
echo "Ingrese UID base: "
read ident
for((i=$ident;i<($ident+$cant);i++)) do
let resto=i%2
#respete los espacios en la sentencia if:#
if [ $resto -eq 0 ]; then
useradd $nom$i
usermod -L $nom$i
echo $nom$i
else
useradd -c "usuarios impares" $nom$i
echo $nom$i
57
fi
done
Donde:
c (create) : indica a tar que cree un nuevo archivero.
v (verbose) : muestra el progreso del archivo .tar.
f (final) : indica el nombre de archivo del archivo de almacenamiento: fichero_empaquetado.tar.
Donde:
x (extract) : indica a tar que desempaquete el fichero_empaquetado.tar.
Donde:
t (list) : Lista el contenido del fichero_empaquetado.tar
7.1.4 Ejemplo:
Empaquetemos en el fichero box.tar todo el contenido del directorio etc:
58
/]# tar cvf box.tar etc
Recordemos que el directorio etc contiene los archivos de configuración para todos los programas que se
ejecutan en el sistema Linux.
Ahora veamos el contenido sin desempaquetar del fichero box.tar, pero sólo aquellos componentes que posean
la palabra cron:
donde:
1. . . 9: Comprime los archivos con el ratio de compresión deseado. 1 es el factor de compresión más rápido
pero la compresión obtenida es bastante pobre; 9 es el factor de compresión más lento, pero el archivo resul-
tante está muy bien comprimido.
59
7.3.2 Descomprimir y desempaquetar archivos
Para descomprimir ficheros con extensión tar.gz, se usa el siguiente comando:
/]# tar zxvf fichero_comprimido_y_empaquetado.tar.gz
Para descomprimir:
/]# unzip archivo.zip
Importante: Al igual que gzip, bz2 es una herramienta de compresión pura, es decir, solo comprime
archivos individuales (no directorios) y, a diferencia de zip, no permite comprimir a varios dentro de
un sólo archivo comprimido.
Una vez se tiene el archivo comprimido con la extensión bz2, en este caso archivo.bz2, se puede hacer un
test de la integridad del mismo con el comando t. Si todo está OK, no habrá ningún output.
/]# bzip2 t archivo.bz2
Para descomprimir el fichero que se ha generado como resultado de la compresión en bzip2, se utiliza la
expresión que sigue:
/]# bzip2 d archivo.bz2
60
directorio.
#! /bin/bash
hora=$(date +"%H%M%S")
fecha=$(date +"%Y%m%d")
tar czvf /home/miguel/$fecha/$hora.tar.gz etc
Se puede crear un directorio donde sea a su vez éste archivo desempaquetado y descomprimido.
Nos interesa tener crond con los niveles 3 y 5 on; el resto en off.
El comando chkconfig permite configurar que servicios arrancan o se detienen en cada nivel de ejecución.
Con la opción – –list nos da una lista completa de todos los servicios instalados y para cada nivel si arrancará
(on) al entrar a ese nivel o se detendrá (off) o simplemente no se iniciara. Nótese que al final de la lista vienen
los servicios que dependen del superservidor xinetd:
/]# chkconfig – –list
Pero volvamos a lo nuestro. Primero, veamos los niveles de ejecución que actualmente posee el demonio crond:
61
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
encendamos los 3 y 5:
/]# chkconfig – –level 35 crond on
Verifiquemos:
/]# chkconfig – –list crond
crond 0:off 1:off 2:off 3:on 4:off 5:on 6:off
62
cron.hourly
cron.daily
cron.weekly
cron.monthly
todos ellos que a su vez están dentro del directorio /etc, un archivo tipo script, el cual se ejecutá cada hora,
día, semana o mes respectivamente.
Para que el archivo pueda ser ejecutado tiene que ser algo similar a lo siguiente:
#!/bin/sh
#script que genera un respaldo
cd /usr/documentos
tar czf * respaldo
cp respaldo /otro_directorio/.
Como segundo modo de ejecutar o usar cron es a través de manipular directamente el archivo /etc/crontab.
Nosotros utilizaremos ésta última forma.
* * * * *
minutos horas días del mes meses del año días de la semana
[ 0-59 ] [ 0-23 ] [ 0-31 ] [ 1-12 ] [ 0-7 ]
Un asterisco * en cualquiera de los primeros cinco campos, indica que que consideran todos sus valores.
Así, un * en el campo de los minutos indicará todos los minutos.
En incrementos, un arterisco indica el comienzo del campo. Por ejemplo, en el campo de minutos: */15
indica cada 15 minutos. ¿Se considera el primer elemento del campo?
63
Construyamos un directorio llamado Programas y dentro de él un archivo llamado reapaldodiario.sh
#!/bin/bash
# Éste script genera un respaldo diario
tar -czvf /datos/respaldodiario.tar.gz /bdatos/.
mailto -s "Respaldo OK" [email protected]
# Fin del script
guardamos y salimos.
Pero el archivo siempre va a sobreescribirse. Para evitar ésto agregamos la fecha y la hora.
* * * * * root sh /respaldodiario.sh
#!/bin/bash
hora=$(date +"%H%M%S")
fecha=$(date +"%Y%m%d")
tar -czvf nuevo_respaldo-$fecha-$hora.tar.gz /miguel
cp nuevo_respaldo-$fecha-$hora.tar.gz /miguel
64
# Eliminamos el fichero creado en /:
rm nuevo_respaldo-$fecha-$hora.tar.gz -R -f
Ejercicio: Configure el cron para que haga respaldos el último día de cada mes:
Y en el cron:
* * * * * root sh /respaldodiario.sh
8.4 Segunda prueba del primer semestre del 2017: Scripts, Compresiones, empaque-
tamientos y Crond
8.4.1 Programe un script de nombre backups.sh y posiciónelo en: /programas. Éste script debe ser
capaz de respaldar de manera comprimida y empaquetada todo el directorio /etc. El nombre
resultante del archivo debe ser:
Backups[Nombre del Servidor][Ruta del directorio respaldado][HH-MM-SS][DD-MM-AA].tar.gz
Recordemos que la variable de entorno para el nombre del servidor es: $hostname y que $pwd nos entrega la
ruta del directorio actual.
8.4.2 La siguiente pregunta fué algo que nunca se vió en clases: ejecutar el cron el penúltimo día de
cada mes. Programar una tarea cron que permita ejecutarla en el penúltimo día de cada mes
del año (en una sola línea) a las 23:00 horas, enviando un email al término de la ejecución a la
cuenta [email protected].
Notemos que la instrucción de la pregunta: en una sóla línea nos impide programar en un script (o al menos
eso es lo que se dá a entender). La respuesta en el comando L(last) que indica el último elemento de cada
campo. Entonces es cosa de configurar el cron como sigue:
65
8.4.3 Desarrollar una tarea /programas/fecha.sh que permita imprimir la fecha y la hora en for-
mato DD-MM-AAA-HH-MM-SS-NOMBRE-SERVIDOR-USUARIO (sic) en un archivo llamado /pro-
gramas/fecha.log y programar un cron que se ejecute cada 5 minutos (a partir del minuto 0),
todas las horas impares, de todos los meses impares y siempre y cuando sea jueves o viernes.
/respaldodiario.sh
66
12 Instalación de 19 servicios en Linux
Para instalar todos los servicios siempre debemos hacerlo desde el superusuario.
12.1.2 El particionado
Supongamos que queremos obtener el siguiente particionado:
Particionado
PARTICIÓN ESPACIO PUNTO DE FILE SYSTEM
MONTAJE
Primaria 15000 MB / ext4
Arranque 200 MB /boot ext4
Memoria virtual temporal 4000 MB swap swap
Remanente Remanente /box ext4
1. click en Create
1. click en Create
1. click en Create
67
2. click en Standard Partition
click en Create
1. click en Create
2. Advertencia de formateo.
Damos click en Format
Aplications
Emacs
Opcional packages: todos
Internet Applications
Internet Browser
Base System
Base
68
Opcional packages: todos
Compatibility libraries
Opcional packages: todos
Console internet tools
Opcional packages: todos menos lo que contenga email
Debugging Tools
Opcional packages: todos
Java Platform
Opcional packages: todos
Legacy UNIX compatibility
Opcional packages: todos
Network file system client
Opcional packages: todos
Networking tools
Opcional packages: nmap
Performance Tools
Opcional packages: los que vienen por defecto
Perl Support
Opcional packages: los que vienen por defecto
Databases
No seleccionamos nada
Desktops
Desktop
Opcional packages: todos
Remote Desktop Clients
Opcional packages: los que vienen por defecto
Development
No seleccionamos nada
Servers
CIFS file server
Opcional packages: los que vienen por defecto
E-mail server
Lo desactivamos todo
FTP Server server
Opcional packages: los que vienen por defecto
NFS file server
Network Infraestructure Server
Opcional packages: bind-9.8.2
dhcp
quagga
tftp-server
System administration tools
Opcional packages: lshw
lsscsi
screen
tree
Web Services
PHP Support
Opcional packages: los que vienen por defecto
Web Server
69
Opcional packages: squid
En el modo Bridge la red virtual se conecta directamente a la red física y se pueden probar los servicios
desde el equipo host físico al servidor Linux virtualizado (no es necesario generar otra máquina virtual). Al
crear un DHCP en modo Bridge en la máquina virtual se genera un conflicto y se cae la red. Un bridge
añade un nivel de inteligencia a una conexión entre redes. Conecta dos segmentos de red iguales o distintos.
Podemos ver un bridge como un clasificador de correo que mira las direcciones de los paquetes y los coloca
en la red adecuada. en este modo, se crea un tarjeta de red virtual en el anfitrión que intercepta el tráfico de
red y puede inyectar paquetes en la red, de manera que el huésped se configura como si estuviera conectado
por un cable a la tarjeta de red virtual del anfitrión.
Tanto en Bridge como en NAT se puede hacer una conexión desde un CentOS virtualizado a internet, la
diferencia es que con Bridge se conectan en una misma red nuestra máquina host física Windows y nuestro
Linux virtualizado.
Ahora, para editar la configuración de las interfaces de red en Linux ingresamos en el siguiente archivo:
/]# /etc/sysconfig/network-scripts/
Con nano (o bien cat o e el editor vi) podemos ingresar a editar cada uno de ellos. Editemos ifcfg-ens33:
/]# nano ifc-ens33
70
ONBOOT: "yes" indica si la interfaz de red se activa automáticamente cuando la máquina se activa.
Para activar o desactivar las interfaces por líneas de comandos podemos hacer en RedHat:
/]# ifup ifcfg-ens33
/]# ifdown ifcfg-ens33
En CentOS:
/]# ifconfig eth0 up
/]# ifconfig eth0 down
Sólo los siguientes son importantes. Los demás se pueden incluso borrar:
BOOTPROTO: static o dns- SE le da direccionamiento estático con static y se le puede agregar entonces la IP,
la máscara de red, la dirección de red y el broadcast:
HOSTNAME= Se puede cambiar y el nuevo nombre queda en forma permanente.
DEVICE= ens33
ONBOOT= yes (es el up!)
IPADDR= 172.16.0.5
NETMASK=255.255.0.0
GATEWAY= 172.16.0.0
DNS1=192.168.7.1
DNS2= 4.4.4.4
Gateway y los dns se pueden llenar con cualquier información porque no llevan a ninguna parte.
5. service network reload: mientras se vuelven a cargar los archivos de configuración el servicio no se
detiene, lo que entrega continuidad operativa. Los usuarios no se dan cuenta del cambio en el servicio,
no se caen las conexiones.
71
12.2.4 El comando chkconfig
Para establecer el estatus de un servicio podemos utilizar el comando chkconfig:
1. /]# chkconfig x on: cada vez que la máquina se encienda, el servicio se iniciará automáticamente.
Siendo pid el Process ID, el identificador de un proceso, un número que identifica de manera inequívoca
a un proceso.
/]# iptables -F
72
12.4 Instalación del DNS (falta el dinámico: DDNS)
12.4.1 Teoría: como funciona un dns
12.4.2 La comandería
Debemos tener dos tarjetas de red en nuestra máquina virtual: una que nos de conexión a internet y otra para
configurar nuestra red interna, la que utilizará nuestro servidor DNS.
1. Configuración de la red de nuestro servidor DNS La tarjeta de red de la máquina virtual dbe estar en
bridge! Debemos asignar una @IP estática a la tarjeta de red que dará servicio a nuestra red.
Primero veamos como tenemos configuradas nuestras tarjetas:
/]# ifconfig
DEVICE= "eth0"
ONBOOT= yes
BOOTPROTO= static
IPADDR= 192.168.1.10
NETMASK=255.255.255.0
2. Instalamos el servidor DNS (Bind) Debemos estar conectados a internet para descargar los paquetes
de Bind. Bind (Berkeley Internet Name Domain) es un software libre de código abierto que cumple
las funciones de DNS en un sistema. Gracias a él contamos con una plataforma estable y segura que
cumple a cabalidad con todos los estándares de DNS. La tarjeta de red de la máquina virtual debe estar
configurada en BRIDGE. Verifiquemos nuestra conexión a internet haciendo un ping a google:
/]# ping google.com
4. Descarguemos el servidor DNS (Bind) en Linux (-y para que no pida confirmación):
/]# yum -y install bind*
73
(c) Debemos configurar las zonas directa e inversa:
zone "1.168.192.in-addr.arpa"{
type master;
file "murillo.inv.com";
};
Guardamos.
6. Los archivos de configuración de las zonas directa e inversa deben estar en el directorio: /var/named,
que está definido en el archivo /etc/named.com en la línea:
directory "/var/named";
/]# cd /var/named/
Creamos el archivo de la zona directa:
named]# touch murillo.lab.com
Creamos el archivo de la zona inversa:
named]# touch murillo.inv.com
Guardamos y salimos:
74
named]# nano murillo.inv.com
Guardamos y salimos.
7. Editamos el archivo donde esta configurado el servidor que utilizaremos como DNS.
Guardamos y salimos.
8. Ahora podemos inicializar el archivo named por primera vez. Esto puede tardar varios minutos mientras
named genera el archivo rndc.key, que solo se produce en la primera ejecución.
/]# service named restart
9. Una vez que named se haya iniciado correctamente, nos aseguramos de que esté habilitado como un
servicio de inicio, ejecutando lo siguiente:
/]# chkconfig named on
10. Su servidor de nombres debería estar ahora en funcionamiento. Puede verificar que BIND funciona cor-
rectamente ejecutando el comando nslookup:
/]# nslookup
> www.murillo.com
debe desplegarse:
Server: ::1
Address: ::1#53
Name: www.murillo.com
Address:192.168.1.11
75
12.5 SSH
12.5.1 Teoría
SSH (Secure SHell), es un protocolo de administración remota que permite el intercambio de datos sobre un
canal seguro entre dos computadoras. SSH usa técnicas de cifrado que hacen que la información que viaja por
el medio de comunicación vaya de manera no legible y ninguna tercera persona pueda descubrir el usuario y
contraseña de la conexión ni lo que se escribe durante toda la sesión. SSH usa criptografía de clave pública
para autenticar el equipo remoto y permitir al mismo autenticar al usuario si es necesario. SSH viene por
defecto habilitado en Linux, porque cuando se instala el S.O. se configura SSH en forma automática.
SSH utiliza el puerto 22 y que permite a los usuarios controlar y modificar sus servidores a través de In-
ternet. El servicio se creó como un reemplazo seguro para el Telnet sin cifrar y utiliza técnicas criptográficas
para garantizar que todas las comunicaciones hacia y desde el servidor remoto sucedan de manera encriptada.
Proporciona un mecanismo para autenticar un usuario remoto, transferir entradas desde el cliente al host y
retransmitir la salida de vuelta al cliente. Puede ejecutar comandos shell de la misma manera que lo haría si
estuviera operando físicamente el equipo remoto. Cualquier usuario de Linux o macOS puede hacer SSH en
su servidor remoto directamente desde la ventana del terminal.
12.5.2 La comandería
Instalemos un servidor con GUI CentOS 7 en una máquina virtual cuya tarjeta de red esté configurada en
modo NAT. De este modo tenemos conexión automática a internet.
No necesitamos instalar SSH, pues viene cargado en forma automática en Linux. Lo que haremos será probar
su funcionamiento por medio de una máquina cliente Windows utilizando Putty.
2. Debemos tener la máquina virtual con CentOS y la física con Windows en la misma red, por lo que
debemos configurar la tarjeta de red de VirtualBox a Bridge (adaptador puente). Importante: debemos
seleccionar junto con "Adaptador puente", la tarjeta de red de nuestra máquina física, en nuestro
caso, Realtek PCIe GBE Family controller.
4. Asignémosle una dirección IP estática a nuestro CentOS configurando la tarjeta enp0s3. Puede identi-
ficar cuál es la tarjeta que debe configurar haciendo inmediatamente después del punto 1 un
/]# ifconfig
y luego del punto 3 nuevamente
/]# ifconfig
para ver cual IP cambió. Esa debe ser la que configurará ahora.
76
7. Cambiamos el parámetro de BOOTPROTO a static:
BOOTPROTO="static"
Y agregamos las siguiente dos líneas:
IPADDR=172.16.0.5
NETMASK=255.255.0.0
Guardamos y salimos.
9. En Windows debemos configurar la tarjeta llamada "Ethernet" la debe estar físicamente conectada a
un cable que provea de internet. entregándole los siguientes parámetros:
La puerta de enlace la dejamos vacía y seleccionamos "Usar las siguientes direcciones de servidor DNS",
aunque dejamos sus espacios en blanco.
10. No es necesario hacer nada con los cortafueegos ni de CentOS ni de Windows. En CentOS el puerto 22
viene habilitado por defecto y el cortafuegos activo en Windows no causa problemas.
11. En Putty ingresamos la dirección IP de nuestro servidor CentOS, nos aseguramos que estén seleccionadas
la opciones Port: 22 y Connection type: SSH. Puede aparecer un mensaje de advertencia la primera vez
que intentemos establecer la conexión. Podemos ignorarla dándole un Si, y ya podemos ingresar con
un usuario y contraseña a nuestra máquina CentOS.
77
12.6 Instalación del HTTPD
12.6.1 Teoría
Lo que se pide es montar el servidor web Apache (acrónimo de "a patchy server"). El servidor Apache HTTP ,
también llamado Apache, es un servidor web HTTP de código abierto para la creación de páginas y servicios
web. Es un servidor multiplataforma, gratuito, muy robusto y que destaca por su seguridad y rendimiento. El
servidor Apache se desarrolla dentro del proyecto HTTP Server (httpd) de la Apache Software Foundation.
12.6.2 La comandería
La tarjeta de nuestra máquina virtual debe estar configurada en NAT para que nos permita conección a internet.
No olvide ejecutar después de modificar cualquier configuración relacionada a las tarjetas de red el comando:
/]# network service restart
3. Lo levantamos:
/]# service httpd start
4. Corroboremos que el servicio funcione bien. Recodemos que tenemos una IP de loopback que por defecto
es 127.0.0.1. Utilicemos ésta para las pruebas. Abramos el navegador Firefox y el la barra de direcciones
ingresemos 127.0.0.1. Debe desplegarse una página que informa el funcionamiento correcto de Apache
HTTP llamada: "Testing 123..."
5. Podemos deseñar una página web completa y alojarla en la dirección 127.0.0.1. Recordemos que la
página de inicio debemos llamarla index.html.
Para ellos vamos a la ruta pública de httpd donde se guardan los archivos que lee Apache para pre-
sentar en un navegador:
/]# cd /var/www/html
6. Ahora debemos poder ver la página desde nuestro navegador en la máquina física Windows. Para ello
cambiamos la configuración de nuestra máquina virtual pasando nuestra tarjeta de red a modo Bridge
y seleccionando la tarjeta de red física que tenemos cableada.
78
8. Veamos la IP que tenemos ahora asignada a la tarjeta enp0s3. En nuestro caso es la 192.168.1.186/24 Si
ingresamos ésta IP en la barra de direcciones del navegador Firefox dentro de nuestro CentOS podemos
ver la página que hemos creado. Debe ocurrir lo mismo pero desde nuestra máquina Windows.
9. Le asignamos a nuestra tarjeta de red Ethernet cableada en Windows una dirección que esté dentro del
mismo segmento de red que nuestro CentOS, digamos 192.168.1.187/24
10. Debemos abrir el puerto que está bloqueado en el firewall de CentOS para http. En CentOS vamos a:
Aplicaciones
Varios
Cortafuegos. Damos click
Seleccionamos http y le damos un ticket.
Cerramos.
11. En el navegador Google Chrome de Windows ingresamos 192.168.1.186 y debemos visualizar la página
que hemos creado.
12. Hagamos algo interesante. Vayamos a una página cualquiera desde Firefox en nuestro CentOS, digamos
www.emol.com. Demos click derecho sobre el cuadro de tres líneas arriba a la derecha. Demos click a
"Guardar página" para descargar los archivos (que serán dos) en /var/www.html, renombrado el archivo
.html como index y borrando (o sobreescribiendo) el archivo index.html que ya teníamos.
13. Hagamos algún cambio en el archivo .html con un editor de textos (por ejemplo gedit) y guardemos.
14. Movamos la carpeta y el html que hemos descargado al directorio /var/www/html y reemplacemos el
html que ya tenemos creado.
15. Ahora, ingresando la IP 192.168.1.186 desde un navegador en CentOS virtualizado o el Windows an-
fritión, debemos poder visualizar la página modificada.
79
16. Iniciamos el servicio httpd:
/]# service httpd start Una vez iniciado el servidor Apache, vamos a configurarlo para que inicie desde
modo boot. Así cada vez arranque Linux, se va a iniciar el servidor. Verifiquemos el estado del servidor
con el siguiente comando:
/]# chkconfig – – list httpd
Lo detenemos:
/]# service httpd stop
Abrimos el navegador y vamos a la dirección del localhost: Firefox no se puede conectar a localhost
porque Apache no está iniciado.
Iniciémoslo:
/]# service httpd start
y recargemos la página. Debe aparecer la página de prueba de Apache que nos indica que el servi-
cio está activo.
18. Rutas de los documentos que exhibe y el archivo de configuración de Apache
(a) Rutas de los documentos exhibidos
\var\www\html
Efectivamente aquí encontramos nuestro archivo index.html con el texto plano: Bienvenido al
servidor del MOV
(b) Ruta del archivo de configuración de Apache
\etc\httpd\conf\httpd.conf
Donde encontramos:
El comando para editar el puerto que ha de escuchar Apache para empezar a comunicar los docu-
mentos que se encuentran en HTML.
Listen:80
80
12.7 HTTPS con un certificado digital
12.7.1 Teoría
¿Qué es SSL?
Un certificado SSL sirve para brindar seguridad al visitante de su página web, una manera de decirles a sus
clientes que el sitio es auténtico, real y confiable para ingresar datos personales. Las siglas SSL responden
a los términos en inglés (Secure Socket Layer), el cual es un protocolo de seguridad que hace que sus datos
viajen de manera íntegra y segura, es decir, la transmisión de los datos entre un servidor y usuario web, y en
retroalimentación, es totalmente cifrada o encriptada. El que los datos viajen cifrados, nos referimos a que
se emplean algoritmos matemáticos y un sistema de claves que sólo son identificados entre la persona que
navega y el servidor. Al tener un certificado SSL confiable, nuestros datos están encriptados, en ese momento
podemos asegurar que nadie puede leer su contenido. Todo esto nos lleva a entender que la tecnología que
brinda un certificado SSL es la transmisión segura de información a través de internet, y así confirmar que los
datos están libres de personas no deseadas. Para poder utilizar un certificado SSL, en su página web, es de
vital importancia que el servidor de Internet que usted contrató, soporte SSL.
12.7.2 La comandería
/]# yum install -y mod_ssl openssl
81
Comentemos la siguiente línea:
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
E inmediatamente debajo de ella escribamos:
SSLCertificateFile /etc/pki/tls/certs/ca.crt
Guardemos y salgamos.
Reiniciemos Apache:
/]# service httpd restart
82
12.8 Instalación desatendida kickstart Redhat Boot desde la red sin intervención.
12.8.1 Teoría
¿Qué es kickstart?
El método de instalación Kickstart de Red Hat es usado principalmente (pero no de forma exclusiva) por el
sistema operativo Red Hat Enterprise Linux para realizar la instalación desatendida y la configuración del
sistema operativo de forma automática.
12.8.2 La comandería
1. Lo primero que haremos será copiar todos los archivos de la ISO CentOS 6.9 en una carpeta llamada
centos en nuestro escritorio.
En el cual escribimos:
[cent os6]
name=CentOS 6 Repositorio
baseurl=file:///var/www/html/centos
gpgcheck=0
enabled=1
Guardamos y salimos.
83
Modificamos las siguientes dos líneas (debe quedar como sigue):
server args = -s /tftpboot
disable = no
guardamos y salimos.
authoritative;
log-facility local7;
###Servidor DHCP###
subnet 192.168.8.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option domain-name "example.com";
range dynamic-bootp 192.168.8.11 192.168.8.254;
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.8.1;
filename "pxelinux.0";
}
Guardemos y salgamos.
/]# cd /etc/sysconfig/network-scripts
/]# nano ifcfg-eth0
BOOTPROTO=static
IPADDR=192.168.8.1
NETMASK=255.255.255.0
y reiniciemos los servicios:
84
/]# cd tftpboot/
tftpboot]# cd pxelinux.cfg
y dentro de él escribamos:
default menu.c32
prompt 0
timeout 100
MENU TITLE INSTALACIONES DESATENDIDAS
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #00000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
LABEL CentOS 6.9 x64 EDITION
MENU LABEL CentOS 6.9 x64 EDITION
KERNEL images/vmlinuz
append initrd=images/initrd.img Linux ks=http://192.168.8.1/centos/ks.cfg
Guardamos y cerramos.
17. Ahora creamos el fichero para que tenga una instalación desatendida: Vamos a la raíz y ejecutemos el
siguiente comando:
/]# system-config-kickstart
18. Copiamos el ks.cfg que tenemos en el escritorio dentro de la carpeta CentOS que tenemos en el directorio
/var/www/html
85
Vamos a otros puertos y en añadimos dando un ticket a Definido por el usuario:
Puerto: bootps
protocolo: udp
Damos a aplicar y yes.
Y en nuestro servidor:
Configuramos su tarjeta de red como:
En network connection
Damos click a Custom: Specific virtual network
Seleccionamos: VMnnet4
23. La máquina cliente debe ser encendida desde la BIOS. Para ellos seleccionamos:
Power
Power Om to BIOS
Aparece la Bios
En Boot, subimos : En primer lugar Hard Drive
En segundo lugar Network boot from..
le damos a F10 y listo!!!
86
12.9 DHCPD
12.9.1 Teoría
blabla
12.9.2 La comandería
blabla
87
12.10 SAMBA (bidireccional)
12.10.1 Teoría
blabla
12.10.2 La comandería
1. Anotamos la IP de nuestra máquina física que va a ser el cliente de nuestro servidor: 192.168.1.157/24
2. La máquina virtual debemos configurarla en modo adaptador puente y nos fijamos que el adaptador sea la
cableada física de nuestra máquina cliente, en nuestro caso: Realtek PCIe GBE Family Controller.
3 Con ifconfig podemos ver la IP de nuestra tarjeta enp0s3 de CentOS 7 y la anotamos: 192.168.1.188
4 Surge generalmente un problema en la máquina virtual porque asigna la misma IP en forma masiva.
Debemos cambiar la MAC.
Vamos a:
Máquina
Configuración
Red
Avanzadas
Y en Dirección MAC damos a refrescar
5 Instalamos Samba:
/]# yum -y install samba samba-common samba-client
Panel de control
Sistema y seguridad
Sistema
127.0.0.1 localhost
192.168.1.188 SERVERCASTRO
192.168.1.157 DESKTOP-JNED12L
Guardamos y salimos.
8 El archivo que mantiene la configuración del servicio es el smb.conf, pero como una ayuda a la configu-
88
racion está el archivo smb.conf.example, que lo copiamos:
9.2 La línea netbios name es muy importante, porque es el nombre con el que las máquinas Microsoft se
identifican dentro de una red. Nosotros ponemos el nombre del servidor que asignamos como windows:
SERVERCASTRO.
No se olvide de borrar el punto y coma que antecede a la línea.
9.5 Ahora abriremos el acceso al servicio para que lo esté externamente con setsebool:
samba/]# setsebool -P samba_enable_home_dirs on
9.7 El servicio Samba en realidad consiste de dos. Uno es el que comparte los archivos y el otro es el que
propaga los nombres de las máquinas a través de la red de Microsoft para que se hagan visibles. Entonces hay
que iniciar dos servicios:
El que transmite los nombres (que están en el archivo lmhosts) a la red Microsoft:
samba/]# service nmb start
9.9 Probemos la conectividad desde nuestro Windows cliente haciendo a un ping a la IP del servidor:
SERVERCASTRO (esto último indicaría que el servicio nmb está funcionando correctamente).
89
>ping 192.168.1.188
>ping SERVERCASTRO
Este equipo
Red
Damos click a nuestro PC
Damos click a la barra del navegador, donde debe aparecer el nombre de nuestro equipo. Escribimos la direc-
ción de nuestro server inmediatamente después de las dos barras.
Se nos debe pedir las credenciales de red.
Ingresamos: Christian y la contraseña: 123456 y entramos a la carpeta home dentro del servidor Samba,
llamada Christian.
9.11 Podemos guardar cualquier cosa en esta carpeta y podemos verificar que queda en /home/Christian
de nuestro servidor con:
samba/]# cd /home/Christian
Christian/]# ls
90
12.11 Motor de correo vía la web (SQmail)
12.11.1 Teoría
blabla
12.11.2 La comandería
blabla
91
12.12 Servidor de virtualización VMWare (con instancias virtuales funcionando)
12.12.1 Teoría
blabla
12.12.2 La comandería
blabla
92
12.13 TOMCAT (Con apps en JAVA funcionando)
12.13.1 Teoría
blabla
12.13.2 La comandería
blabla
93
12.14 MOTOR BD ORACLE (+consulta)
12.14.1 Teoría
blabla
12.14.2 La comandería
blabla
94
12.15 Firewall (programado con reglas)
12.15.1 Teoría
blabla
12.15.2 La comandería
blabla
95
12.16 SQUID (proxy)
12.16.1 Teoría
blabla
12.16.2 La comandería
blabla
96
12.17 Vsftpd (Usuario Enjaulado.)
12.17.1 Teoría
blabla
12.17.2 La comandería
blabla
97
12.18 Telnet
12.18.1 Teoría
blabla
12.18.2 La comandería
blabla
98
12.19 Antivirus
12.19.1 Teoría
blabla
12.19.2 La comandería
blabla
99
12.20 WINE (Ambiente de trabajo emulado para correr apps con tecnología MS)
12.20.1 Teoría
blabla
12.20.2 La comandería
blabla
100
12.21 VNC server
12.21.1 Teoría
blabla
12.21.2 La comandería
blabla
101
12.22 Configuración SElinux (privación ejecución módulos kernel)
12.22.1 Teoría
SELinux o "Security-Enhanced Linux" es un mecanismo que proporciona políticas de control de acceso obli-
gatorio al sistema operativo, estas políticas definen como las aplicaciones y los usuarios pueden acceder a los
archivos, directorios, etc. De esta manera se incorpora una capa de protección adicional, asignando un "Con-
texto de seguridad" a cada archivo, directorio y proceso; cuando un proceso accede a un archivos esta capa
de seguridad verificará que el contexto de seguridad del mismo sea compatible con el contexto de seguridad
del archivo al que desea acceder.
12.22.2 La comandería
blabla
102
References
[1] Petersen, R. (2009). Linux: Manual de referencia, México DF, México: McGraw-Hill.
[2] Apuntes de clases de Taller de Sistemas Operativos I: Linux, con Rubén Coello, Otoño del 2017, Inacap
sede Santiago centro.
[3] http://www.ereborlog.eu/10-ejemplos-del-comando-useradd-en-linux/
[4] http://linuxsuperuser07.blogspot.cl/2011/09/rhel-6-file-system.html
[5] https://travesuras.wordpress.com/category/comandos/
[6] https://computernewage.com/2015/06/14/el-arbol-de-directorios-de-linux-al-detalle-que-contiene-
cada-carpeta
[7] http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m1/administracin_de_usuarios_y_grupos.html
[8] http://fraterneo.blogspot.cl/2012/01/administracion-de-usuarios-y-grupos.html
Variables de entorno:
[9] https://manuais.iessanclemente.net/index.php/Variables_de_contorno_en_Linux
[10] https://travesuras.wordpress.com/2011/12/19/20111219-1/
[11] https://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/
[12] http://rm-rf.es/comando-chage-tiempo-de-vida-de-claves-y-usuarios-en-gnulinux/
[14] //www.computerhope.com/unix/utar.htm
[15] https://blog.desdelinux.net/cron-crontab-explicados/
[16] https://www.alvarolara.com/2014/05/12/diferencias-entre-bridge-nat-red-interna-y-adaptador-en-
virtualbox/
[17] https://www.linuxtotal.com.mx/?cont=info_admon_006
DNS
[18] https://www.youtube.com/watch?v=Z7N2Na-7T6Y
HTTPD
[19] https://www.youtube.com/watch?v=3dXhLPiAUqg
HTTPS
[20] https://www.youtube.com/watch?v=8Qz5MILdxR4
Kickstart
[21] https://www.youtube.com/watch?v=PI2VQ51UTLM
103
Appendix A Listado de las variables de entorno en linux
CDPATH: Una lista de directorios separados por el signo ’:’ usada como ruta de acceso por el comando cd.
HOME: El directorio principal del usuario.
MAIL: Email del usuario.
PATH: Una lista de directorios, separados por comas, en los cuales el intérprete de comandos busca por co-
mandos.
BASH: La ruta de acceso completa usada para ejecutar la instancia actual de bash.
BASH_VERSION: El numero de versión de bash usada.
GROUPS: Una matriz que contiene la lista de los grupos a que pertenece el usuario actual.
HISTCMD: El índice del comando actual en la historia de comandos.
HISTCONTROL: Define si un comando es añadido a la historia de comandos.
HISTFILE: El nombre del fichero en el cual se graba la historia de comandos de comandos. El valor por defecto
es /.bash_history.
HISTFILESIZE: El número máximo de líneas contenidas en la historia de comandos, por defecto 500.
HISTIGNORE: Una lista separada por comas de los patrones usados para definir que comandos deben de
grabarse en la historia de comandos.
HISTSIZE: El máximo numero de comandos a recordar en la historia de comandos, por defecto 500.
HOSTFILE: Contiene el nombre de un fichero en el mismo formato que /etc/hosts que debería de usarse
cuando el intérprete de comandos necesita completar un nombre de máquina (hostname).
HOSTNAME: El nombre de máquina actual.
OLDPWD: Directorio previo definido por el comando ’cd’.
PWD: Directorio actual definido por el comando ’cd’.
RANDOM: Cuando se llama esta variable un número entero entre 0 a 32767 es generado.
SECONDS: Número de segundos desde que Bash fue arrancado.
UID: El valor numérico real del usuario actual.
104
Appendix B Listado de los formatos para los comandos de fecha y hora
%%: a literal
%a: locale’s abbreviated weekday name (e.g., Sun)
%A: locale’s full weekday name (e.g., Sunday)
%b: locale’s abbreviated month name (e.g., Jan)
%B: locale’s full month name (e.g., January)
%c: locale’s date and time (e.g., Thu Mar 3 23:05:25 2005)
%C: century; like %Y, except omit last two digits (e.g., 21)
%d: day of month (e.g, 01)
%D: date; same as %m/%d/%y
%e: day of month, space padded; same as %_d
%F: full date; same as %Y-%m-%d
%g: last two digits of year of ISO week number (see %G)
%G: year of ISO week number (see %V); normally useful only with %V
%h: same as %b
%H: hour (00..23)
%I: hour (01..12)
%j: day of year (001..366)
%k: hour ( 0..23)
%l: hour ( 1..12)
%m: month (01..12)
%M: minute (00..59)
%n: a newline
%N: nanoseconds (000000000..999999999)
%p: locale’s equivalent of either AM or PM; blank if not known
%P: like %p, but lower case
%r: locale’s 12-hour clock time (e.g., 11:11:04 PM)
%R: 24-hour hour and minute; same as %H:%M
%s: seconds since 1970-01-01 00:00:00 UTC
%S: second (00..60)
%t: a tab
%T: time; same as %H:%M:%S
%u: day of week (1..7); 1 is Monday
%U: week number of year, with Sunday as first day of week (00..53)
%V: ISO week number, with Monday as first day of week (01..53)
%w: day of week (0..6); 0 is Sunday
%W: week number of year, with Monday as first day of week (00..53)
%x: locale’s date representation (e.g., 12/31/99)
%X: locale’s time representation (e.g., 23:13:48)
%y: last two digits of year (00..99)
%Y: year
%z: +hhmm numeric timezone (e.g., -0400)
%:z: +hh:mm numeric timezone (e.g., -04:00)
%::z: +hh:mm:ss numeric time zone (e.g., -04:00:00)
%:::z: numeric time zone with : to necessary precision (e.g., -04, +05:30)
%Z: alphabetic time zone abbreviation (e.g., EDT)
105