Documentos de Académico
Documentos de Profesional
Documentos de Cultura
http://www.cursohacker.com
mailto:darkhis@alumnoz.com
índice:
1 Introducción
2 Comandos y conceptos Básicos
3 Permisos en Unix
4 Sentándose a Gusto
5 Administración Básica
6 Guarda con Skynet
7 Compilando el Kernel
8 Logs en Unix
9 Sonido
10 Grabado
11 Backups
12 Entorno chroot Básico
13 Monitorización en Tiempo Real
14 Prácticos
1º Introducción
Lo sexto que vine a hacer: Describirles las posibles razones por las
cuales requerimos de una recompilación del kernel, darles un detalle
sobre las opciones que tenemos para ello y finalmente como hacerlo,
pudiendo implementarlo como una opción más a la hora del booteo.
bash-2.05b$ ls
algo.txt cursoC dpkg_1.10.20.tar.gz texto.txt
Este es un simple comando “ls” que muestra lista la los archivos que
tenemos en un directorio, en este caso el directorio home del usuario
actual. Para obtener mayor información utilizamos sus argumentos,
por ejemplo…
bash-2.05b$ ls -l
total 1545
-rw-r--r-- 1 darkhis users 54 Feb 3 2003 algo.txt
drwxr-xr-x 2 darkhis users 80 Jul 16 09:21 cursoC
-rw------- 1 darkhis users 1568803 May 6 18:21 dpk………tar.gz
-rw-r--r-- 1 darkhis users 143 May 12 10:52 texto.txt
bash-2.05b$ ls -la
total 1576
drwx--x--x 14 darkhis users 696 Jul 5 14:25 .
drwx--x--x 17 root root 424 Jul 8 15:44 ..
drwx------ 3 darkhis users 104 Apr 12 10:11 .BitchX
-rw------- 1 darkhis users 161 May 6 18:18 .ICEauthority
-rw------- 1 darkhis users 101 May 6 18:18 .Xauthority
-rw------- 1 darkhis users 1096 Jul 27 19:58 .bash_history
-rw------- 1 darkhis users 16 May 6 18:19 .esd_auth
drwx------ 4 darkhis users 128 May 6 18:46 .gconf
drwx------ 2 darkhis users 80 May 6 18:46 .gconfd
drwx------ 5 darkhis users 144 May 6 18:18 .gnome
drwxr-xr-x 2 darkhis users 176 May 6 18:18 .gnom…desktop
drwx------ 5 darkhis users 160 May 6 18:18 .gnome2
drwx------ 2 darkhis users 48 May 6 18:18 .gnome2_p…ate
-rw-r--r-- 1 darkhis users 92 May 6 18:18 .gtkrc-…nome2
drwx------ 3 darkhis users 72 May 6 18:18 .metacity
drwx------ 3 darkhis users 128 May 6 18:18 .mozilla
drwxr-xr-x 3 darkhis users 112 May 6 18:18 .nautilus
-rw------- 1 darkhis users 0 May 6 18:18 .rec…tly-used
-rw-r--r-- 1 darkhis users 3394 Apr 12 08:51 .screenrc
drwx------ 2 darkhis users 80 Jul 5 14:26 .ssh
-rw-r--r-- 1 darkhis users 54 Feb 3 2003 algo.txt
drwxr-xr-x 2 darkhis users 80 Jul 16 09:21 cursoC
-rw------- 1 darkhis users 1568803 May 6 18:21 dpkg_….tar.gz
-rw-r--r-- 1 darkhis users 143 May 12 10:52 texto.txt
bash-2.05b$ pwd
/home/darkhis
Al igual que con “copy” lo que hacemos es copiar archivos, por lo que
no desaparecen los archivos ni los directorios originales, simplemente
se copian.
bash-2.05b$ rm archivo
bash-2.05b$ rm -R directorio
bash-2.05b$
Esto (como ya les dije varias veces) es un prompt listo para recibir
comandos, podemos cambiar este prompt por algo que nosotros
queramos configurando la variable “PS1”…
bash-2.05b$ PS1=hola#
hola#
hola# PS1=bash-2.05b$
bash-2.05b$
Otros ejemplos…
bash-2.05b$ cd /var/www/htdocs/manual/
bash-2.05b$ ls -l | more
bash-2.05b$ cd /home/darkhis
bash-2.05b$ ls | sort
algo.txt
archivo.txt
cursoC
dpkg_1.10.20.tar.gz
texto.txt
Verificamos…
bash-2.05b$ pwd
/usr/local
bash-2.05b$ cd usr/lo<Tab>
bash-2.05b$ cd usr
bash-2.05b$ cd l<Tab><Tab>
lib libexec local
Y ahí podrán poner cualquiera de los directorios o agregar una tecla y
seguir autocompletando :P.
bash-2.05b$ da<Tab>
Thu Aug 5 14:05:04 UYT 2004
bash-2.05b$ cal
August 2004
Su Mo Tu We Th Fr Sa
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
bash-2.05b$ who
root tty1 Aug 5 14:01
darkhis tty2 Aug 5 14:01
bash-2.05b$ whoami
darkhis
Para redactar un correo para otro usuario del sistema pueden utilizar
el comando de la siguiente forma…
Byez,
DarKh|s
.
EOT
En terminal 1…
En terminal 2…
Inmediatamente, en terminal 1…
bash-2.05b$ wc cualkiera.txt
1 5 29 cualkiera.txt
Hablando del kamasutra… por otro lado el comando “tail” nos permite
ver la última parte de un archivo (tail == cola) :P.
Por defecto el comando “tail” nos mostrara las últimas 10 líneas del
archivo pero con el argumento “-n” podremos cambiar la cantidad.
Otra opción interesante de este programa es el argumento “-f”, con el
cual hacemos que el archivo quede en el final y a medida que se
agregue nuevo contenido nos lo muestre en tiempo real, muy útil
para leer archivos de logs en los cuales se quiere saber que pasa
(errores/accesos/etc) en tiempo real.
El comando “echo” (al igual que hasta en la TK90), repite todos los
argumentos en la salida que tengamos configurada, ya sea la pantalla
(por defecto en una PC) o en un archivo si es redireccionado con los
caracteres especiales que ya vimos. Por ahora y mientras no nos
metamos en la programación Bash es de poca utilidad.
Ok, continuando tenemos otros comandos como “df”, el cual nos tira
información del disco y sus particiones, el argumento más importante
es “-h”, que hace la salida más legible, por ejemplo…
bash-2.05b$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda5 384M 384M 748k 100% /
/dev/hda1 47M 36M 11M 75% /boot
/dev/hda2 13G 4.1G 9.3G 31% /usr
/dev/hda6 259M 161M 97M 63% /var
/dev/hda3 4.9G 2.0G 2.9G 40% /home
bash-2.05b$ uname -a
Linux darkhis 2.4.26 #3 SMP Thu May 22 23:27:50 UYT 2003 i686
unknown GNU/Linux
En verdad el núcleo hace más cosas, pero las anteriores son las más
importantes.
Aunque ya deberían saberlo desde las semanas en las que vimos los
mismos temas en el SO casinuncamasnombrable, les repito que los
procesos son programas en ejecución, los cuales son asociados a un
número indicador de proceso. Sobre estos podremos usar varios
comandos con el fin de interactuar con el programa en ejecución, por
ejemplo para matarlo, reiniciarlo, etc.
bash-2.05b# ps 1054
PID TTY STAT TIME COMMAND
1054 ? Ss 0:00 sendmail: Queue runner@00:25:00
bash-2.05b# kill 1054
bash-2.05b# ps 1054
PID TTY STAT TIME COMMAND
Además del comando “ps” podemos utilizar “top”, el cual como plus
nos informa de los procesos actuales, los recursos que consumen, la
memoria libre y otros datos mas en tiempo real, si le agregamos el
parámetro “-c” mostrará además la línea que compone el comando
que lanzó el proceso.
Si por otro lado queremos realizar alguna tarea que lleva tiempo pero
no tenemos ganas de esperar a que esta termine para continuar
utilizando el shell podemos ejecutarlo en modo escondido (por atrás).
Esta tarea debe hacerse cada cierto tiempo ya que de otra forma no
serían indexados los archivos nuevos ni desindexados los borrados.
Como imaginarán, correr el comando “updatedb” lleva tiempo, siendo
una tarea que debe programarse como root (locate podrá ejecutarse
por cualquier usuario). Veamos como hacerlo a escondidas…
Ahh… cada vez les gusta más ehhh?¿… bueno sigan tragando!
Qué es un archivo?¿
Para los más astutos, esos que piensan que se las saben todas y no
se quedan ni con su hermanito de 5 años, aclaro que “file” no se
fijará en la extensión del archivo (ya que nada le impediría al usuario
crear un archivo “.txt” y poner una foto adentro), sino que se fija en
características que lo componen. Por ejemplo, para determinar si es
código C se buscarán palabras como “#include”, que son típicas en
un código escrito en ese lenguaje.
bash-2.05b$ ls man
bash-2.05b$ man ls
(reverse-i-search)`':
3º Permisos en Unix
bash-2.05b$ ls -l
total 12
-rw-r--r-- 1 darkhis phynix 163 May 11 22:05 archivo1.txt
drwxr-xr-x 2 darkhis phynix 512 May 11 22:09 cursoC
drwx------ 2 darkhis phynix 512 Apr 16 17:47 secret
bash-2.05b$ ls
ls: .: Permission denied
Veamos las dos formas para que cada uno elija la que más convenga
según el caso particular en el que se vean inmersos :B.
r = 4
w = 2
x = 1
bash-2.05b$ ls -l
total 16
-rw-r--r-- 1 darkhis phynix 29 May 27 20:45 cualkiera.txt
drwxr-xr-x 2 darkhis phynix 512 May 11 22:09 cursoC
d-wxr-xr-x 2 darkhis phynix 512 May 27 20:07 prueba
drwx------ 2 darkhis phynix 512 Apr 16 17:47 secret
r(4) + w(2) = 6
u = usuario (user)
g = grupo (group)
o = otros (others)
Cambiaremos permisos de esta forma utilizando los símbolos de “+” y
“-” para agregar/quitar permisos al usuario, grupo u otros, veamos…
Los campos que definen las propiedades para cada usuario están
separados por “:”, el primer campo contiene el nombre de usuario y
el segundo una “x” que esta en el lugar de donde debería ir el
password del usuario encriptado, lo cual no ocurre porque estamos
usando shadow password ;).
jessica:$1$8i.1hKwQ$pAWZTmlOyXh9C/MZtcKhG1:12636:0:99999:7:::
Con el comando “id” podemos ver estos datos del usuario actual…
bash-2.05b$ id
uid=1011(darkhis) gid=100(users) groups=100(users)
4º Sentándose a Gusto
Agregando terminales
Cualquiera sea el caso puede pasar que no nos alcancen las que hay
y necesitemos más, precisamente si miran su teclado disponemos
también de más teclas de función que están sin utilizar, para los que
no se dieron cuenta estas serían desde F8 hasta F12 :B.
Y adivinen que chicos?¿, si!!!, vamos a agregar infinitas terminales
para acceder a ellas mediante Alt+Fx como lo hacemos con las que
ya tenemos por defecto… bueno infinitas no… solo 5 más :P.
si:S:sysinit:/etc/rc.d/rc.S
Continuando, la sección del archivo que nos interesa puede ser algo
parecido a esto…
Una razón mas seria sería que porque son jodidos y otra que no hay
necesidad de decirle a los usuarios que se trata de un Slackware con
determinado kernel, ya que simplifica al posible atacante la búsqueda
en la red de exploits locales para destrozar tu hermoso sistema ;).
0 negro black
1 zul blue
2 verde green
3 marron cocorete cyan
4 rojo red
5 violeta magenta
6 amarillo yellow
7 blanco white
Como habrán notado los que ya reiniciaron, los cambios que acaban
de configurar son visibles únicamente mientras utilicemos la terminal.
Para que esta sea verde de por vida tendremos que tocar algunos
archivitos y recompilar el kernel. Como por suerte para Uds.
recompilaremos el kernel en esta misma lección, podrán realizar los
cambios y pasar directamente a la compilación si así lo desean, cosa
que dudo XD, así que mejor sigan el ritmo y vuelvan cuando estén
preparados ;).
Una vez con las fuentes que le corresponden a cada uno veamos cual
es el archivo que debemos modificar…
… por …
Debo aclarar que existe más de una calculadora para el shell pero la
más interesante y fácil de usar es la que vengo a presentarles: “bc”.
obase=16 /* hexa */
obase=8 /* octal */
bash-2.05b$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
9*(2+7) <Enter>
81
10^2 <Enter>
100
5º Administración Básica
Dicho esto por enésima vez y como sabemos que el usuario root
puede romper todo :P, es recomendable no entrar como root en la
maquina sino entrar como un usuario común y subir hasta root con el
comando “su” cuando lo necesitamos.
Queda más que claro… les recomiendo trabajar siempre como usuario
normal y obtener los privilegios de root cuando sea absolutamente
necesario, volviendo a ser los pusilánimes de siempre con el comando
“exit” luego de terminar la tarea.
Teclado en espa~ol en el X … XD
bash-2.05b$ gnome-control-center
Los Procesos
bash-2.05b$ ps -A
PID TTY TIME CMD
1 ? 00:00:04 init
2 ? 00:00:00 keventd
3 ? 00:00:00 ksoftirqd_CPU0
4 ? 00:00:00 kswapd
5 ? 00:00:00 bdflush
6 ? 00:00:01 kupdated
8 ? 00:00:00 khubd
9 ? 00:00:00 kreiserfsd
344 ? 00:00:01 syslogd
347 ? 00:00:00 klogd
349 ? 00:00:00 inetd
376 ? 00:00:00 crond
378 ? 00:00:00 atd
384 tty1 00:00:00 bash
385 tty2 00:00:00 bash
386 tty3 00:00:00 bash
387 tty4 00:00:00 bash
388 tty5 00:00:00 bash
389 tty6 00:00:00 agetty
390 tty10 00:00:00 agetty
408 tty1 00:00:00 adsl-connect
426 ? 00:00:00 pppd
427 ? 00:00:03 pppoe
496 tty2 00:00:00 startx
507 tty2 00:00:00 xinit
508 ? 00:05:58 X
520 tty2 00:00:02 gnome-session
523 tty2 00:00:00 gconfd-2
525 ? 00:00:00 esd
527 ? 00:00:00 bonobo-activati
529 ? 00:00:01 gnome-smproxy
531 ? 00:00:02 gnome-settings-
537 ? 00:00:02 xscreensaver
540 ? 00:00:15 metacity
544 ? 00:00:24 gnome-panel
546 ? 00:00:12 nautilus
547 ? 00:00:00 nautilus
548 ? 00:00:00 nautilus
549 ? 00:00:00 nautilus
550 ? 00:00:00 nautilus
551 ? 00:00:00 nautilus
552 ? 00:00:00 nautilus
554 ? 00:00:01 mixer_applet2
556 ? 00:06:31 mozilla-bin
562 ? 00:00:00 mozilla-bin
563 ? 00:00:03 mozilla-bin
564 ? 00:00:00 mozilla-bin
566 ? 00:00:03 mozilla-bin
571 ? 00:00:23 gnome-terminal
572 ? 00:00:00 gnome-pty-helpe
573 pts/1 00:00:00 bash
584 ? 00:01:19 gedit
631 tty4 00:00:01 BitchX
632 ? 00:00:00 in.identd
633 ? 00:00:00 in.identd
634 ? 00:00:00 in.identd
635 ? 00:00:00 in.identd
636 ? 00:00:00 in.identd
637 ? 00:00:00 in.identd
638 ? 00:00:00 in.identd
666 ? 00:00:00 belsebu
888 ? 00:00:00 jackpot
1418 ? 00:00:00 zheng-map
1492 ? 00:00:00 cristobalito-picaron-te-dimos-captura
1503 ? 00:00:00 nostradamus
1950 ? 00:00:00 maracanazo
15274 pts/2 00:00:00 bash
15284 pts/2 00:00:00 ps
Veamos un ejemplo…
Como sobra la aclaración de que las líneas que empiezan con “#” son
comentarios, procedo a explicar que si queremos abrir uno de estos
servicios debemos descomentar la línea que lo contiene y reiniciar el
proceso que lo controla. Por ejemplo hagamos un telnet a nuestro
equipo…
Como dije, para que los cambios tengan efecto debemos de reiniciar
el proceso que lo controla, en este caso es el “inetd”.
Hagan un “ps –A”, busquen el PID del proceso (en mi caso es el 349)
y reinícienlo ejecutando…
Charán!!! ;), están cada vez más cerca de mandarse cualquiera :P…
personalmente les recomiendo no usar telnet fuera de su red local,
incluso ni siquiera en ella si llega a ser wireless u objetivo de sniffers.
Aquí tenemos dos puntos claramente importantes, el primero es que
debemos tener mucho cuidado con tener habilitados los servicios que
no estamos utilizando ya que cada uno es un agujero de seguridad
potencial y como en la vida, no es bueno tener agujeros abiertos y
accesibles sin necesidad. El segundo es que es mejor que cuando
quieran abrir algún servicio común, antes de buscar en binarios o
servicios instalados, comiencen por buscar en el “inetd.conf”.
Montando unidades
… o bien …
Hemos escaneado con “fdisk –l” y vimos que el nuevo disco a instalar
está en “/dev/hdb”. Para comenzar crearemos las particiones con el
ya conocido “cfdisk”, para ello escribimos…
Para verificar que todo esté bien con el sistema de archivos creado
ejecutamos el siguiente comando…
Suponiendo que todo salió como corresponde (extraño pero cada vez
más común en Uds. gurisitos perversos :P) pasamos a trabajar en el
nuevo disco, montándolo y agregándole contenido, por ejemplo…
Para esto primero les recuerdo que cuando el sistema comienza nada
esta montado, es decir que todo se monta en el comienzo por lo que
para que sea posible habrá que tocar algún botoncito en el lugar que
el sistema tenga asignado para buscar los dispositivos a montar.
Dicho esto nada nos impedirá agregar el nuevo disco para que sea
montado al inicio del sistema… El archivo a modificar es “/etc/fstab”.
Como pueden apreciar es un archivo crítico pero que igual debe tener
permisos de lectura para todo el mundo ya que el mismo es leído por
una infinidad de programas básicos.
Pero entonces, si el archivo debe ser leído por todo el mundo, cómo
nos aseguramos de que un usuario cualquiera no lo lea y se haga con
las contraseñas de todos los usuarios del sistema, incluso la del
administrador (root)?¿
Por otro lado, otro archivo crítico puede ser el “/etc/groups”, el cual
contiene información acerca de los grupos existentes en el sistema y
opcionalmente una contraseña de grupo.
FAIL_DELAY
Si prestan atención, cada vez que ustedes ponen mal el nombre de
usuario o password el sistema espera algunos segundos antes de
volver a solicitar el login (por defecto 3), con esta directiva podremos
cambiar dicho tiempo a nuestro gusto (en segundos).
DIALUPS_CHECK_ENAB
Si bien no es muy conocido esto puede resultar útil, se trata del uso
de contraseñas de marcación para el acceso remoto al sistema. Para
hacerlo más sencillo digamos que agregamos un password aparte del
que ya tienen el usuario. Para el correcto funcionamiento de esto
debemos crear (o editar si ya existe) el archivo “/etc/dialups”, el cual
contiene un tty por línea. Si existe un tty en este archivo significa que
cuando un usuario se conecte se harán comprobaciones de este tipo.
El siguiente archivo que se utiliza para esto es “/etc/d_passwd”, que
contiene la ruta completa a un shell al que irá el usuario seguido de
un password. Tanto el shell como el password estarán encriptados
con “crypt”, este archivo se obtiene con el comando dpasswd, para
dejarlo claro veamos un ejemplo…
darkhis@darkstar:~$ w
12:48:55 up 1:28, 6 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 11:21 2:02 0.07s 0.06s -bash
darkhis pts/1 gampr...et.am 12:48 0.00s 0.02s 0.01s w
darkhis@darkstar:~$ exit
Connection to 200.125.36.152 closed by foreign host.
Freenet>
bash-2.05b# dpasswd
Usage: dpasswd [-(a|d)] shell # Nos tira la ayuda.
bash-2.05b# dpasswd -a /bin/bash
Shell password: # hola_don_pepito
re-enter Shell password: # hola_don_jose_:P
darkhis@darkstar:~$
FAILLOG_ENAB
Hace que las entradas de login fallidos se loguen en “/var/log/faillog”,
intenten leerlo… les diré como leerlo más adelante :P.
LOG_UNKFAIL_ENAB
Guardamos los intentos de login con usuarios inexistentes, los cuales
provienen generalmente de ataques de brute forcing.
LOG_OK_LOGINS
Guardamos un log con los login que se completan correctamente.
LASTLOG_ENAB
Le muestra al usuario cuando fue la última vez que entró al sistema.
MAIL_CHECK_ENAB
Configura el chequeo de correos del usuario en modo automático.
OBSCURE_CHECKS_ENAB
Activa chequeos adicionales en cambios de passwords.
PORTTIME_CHECKS_ENAB
Activa los filtros de login según el momentoen el que el usuario
ingresa al sistema, con esto podremos controlar el acceso por días y
horas, usando el archivo “/etc/porttime”.
En el primero indicamos separando con “,” los ttys en los que tendrá
efecto esta regla de tiempo, el caracter “*” indicaría que todos los tty
serán afectados.
En el segundo campo indicamos separados por “,” una lista con todos
los usuarios para los que queremos hacer válida esta regla, también
pueden usar un asterisco para extenderla a todos.
Su Domingo
Mo Lunes
Tu Martes
We Miercoles
Th Jueves
Fr Viernes
Sa Sábado
Wk De lunes a viernes
Al Todos los días
*:jessica,josseline:Wk0030-0630
QUOTAS_ENAB
Permite configurar un límite al campo GECOS de cada usuario, dicho
campo contiene información como el nombre de usuario, el directorio
en donde iniciara sesión, etc…
SYSLOG_SU_ENAB
Esta directiva nos pemite guardar un registro de la actividad que se
lleve a cabo cuando un usuario utiliza el comando “su”.
SYSLOG_SG_ENAB
Análogo al “su”, este comando permite cambiarnos a otro grupo, las
dos configuraciones permiten que los eventos de este comando se
guarden en el syslog además de en su propio archivo “sulog”. El
“syslog” lo desmenúzaremos en otro momento (Y).
CONSOLE
Definimos desde que terminales puede acceder el root, como la
mayoría de las directivas esta puede ser configurada directamente en
este archivo o bien en uno aparte, por defecto viene en uno aparte y
la mejor opción (que viene por defecto) es será la siguiente…
CONSOLE /etc/securetty
MOTD_FILE
Esta opción está, por lo general, seguida de un archivo en donde se
muestra el mensaje del día, el mismo está escrito en “/etc/motd”,
edítenlo y sorprendan a sus admiradores :P.
ISSUE_FILE
Despliega el mensaje que configuremos previo a solicitarle al usuario
sus credenciales, el mensaje se sitúa en el archivo especificado por
esta opción, por defecto es “/etc/issue ”.
TTYTYPE_FILE
Con esta opción podremos configurar el tipo de terminal a la que
accederemos una vez nos encontremos logueados en el sistema. Las
opciones se especifican en el archivo “/etc/ttytype”, por ejemplo…
vt100 tty1
FTMP_FILE
Si están activos, guardará los intentos fallidos de login en el formato
UTMP, el cual conoceremos cuando veamos los logs de sistema.
NOLOGINS_FILE
Esta opción va seguida del valor “/etc/nologin” de modo tal que si el
archivo existe el sistema solo dejará entrar al usuario root dado a que
por ejemplo el servidor está en reparación, mostrándole a los demás
usuarios el mensaje que se encuentre en dicho archivo. Muy útil para
cuando queremos poner en penitencia a todos :P.
SU_NAME
Esta opción permite colocar “su” como argumento de forma tal que
cuando usemos el comando “ps” para ver los procesos veremos “su”
si alguien está trabajando bajo este comando. Si en cambio la opción
no esta activada el comando “ps” mostrará que un usuario está
utilizando un shell pero no hará referencia a que se convirtió a otro
usuario.
MAIL_DIR
Esta opción tiene que estar obligatoriamente activada y determina el
directorio en donde se encuentran los correos que son chequeados en
el inicio de sesión de cada usuario, usualmente en “/var/spool/mail”.
ENV_SUPATH
Path por defecto cuando un usuario está usando “su” (el path es lo
mismo que en el SO Wringous). Esta configuración es obligatoria.
ENV_PATH
Lo mismo que lo anterior pero sin estar dentro del su, o sea para
todos los usuarios. Esta configuración también es obligatoria.
ERASECHAR
Especifica caracter de borrado en las terminales, como saben los
teclados disponen de la tecla “Del” o “Supr” y esta es a la que
hacemos referencia, ya que a diferencia de backspace que borra lo
que esta a la izquierda del cursor, esta borra el caracter que esta
encima del cursor. El valor octal de la tecla delete es 177 por lo tanto
el argumento correcto para esta opción es 0177. Recuerden que el 0
indica octal y 0x indica hexadecimal.
KILLCHAR
Caracter para terminar la ejecución de un programa inmediatamente,
“^C” es 025 en octal.
PASS_MAX_DAYS
Establece un número de días para que los passwords de los usuarios
deban ser actualizados, pasado el día los passwords serán inválidos.
PASS_MIN_DAYS
Controla el número mínimo de días que deben transcurrir entre
cambios en contraseñas, si está en 0 las contraseñas pueden ser
cambiadas hasta un millón de veces por día =:-}.
PASS_MIN_LEN
Número mínimo de caracteres que deberán contener los passwords.
PASS_WARN_AGE
Cantidad de días en los que se le avisará al usuario previo a que su
contraseña expire, enviándole un mensaje de advertencia.
SU_WHEEL_ONLY
Si esta en “yes” solo los usuarios en el grupo root (gid = 0) podrán
utilizar el comando su a usuarios de este grupo (incluyendo el root).
UID_MIN
Cuando se agrega un usuario con useradd el userid tendrá este valor
mínimo, muy útil para administrar nuestros usuarios correlativamente
según a que sector pertenezcan.
UID_MAX
Valor máximo para los userid de los usuarios que creemos mientras la
configuración se encuentre activa.
GID_MIN
Lo mismo pero para los grupos (gid).
GID_MAX
Adivinen :B.
LOGIN_RETRIES
Número máximo de intentos para colocar bien sus credenciales al
inicio de sesión previo a ser sacado a patadas del sistema.
LOGIN_TIMEOUT
Tiempo de espera máximo en segundos para que el usuario coloque
su información de inicio de sesión, pasado el tiempo el intento de
login se cancela.
PASS_CHANGE_TRIES
Número máximo de int entos que tiene el usuario para cambiar su
password cuando el sistema se lo rechaza por ser muy fácil.
PASS_ALWAYS_WARN
Activado esta opción haremos que cuando el password es muy fácil
aparezca una advertencia pero que lo admita de igual modo.
CHFN_AUTH
Con esta opción activada el sistema nos pedirá nuestro password al
querer cambiar nuestra información personal (campo gecos).
CHFN_RESTRICT
Datos del campo geocs que el usuario normal podrá cambiar, usando
las siguientes combinaciones de letras…
f Nombre completo.
r Número de la oficina.
w Número del trabajo.
h Número de su casa.
Por ejemplo…
CHFN_RESTRICT frwh
MD5_CRYPT_ENAB
Hace que las contraseñas sean encriptados con md5 en lugar de crypt
(si es que está soportado).
CONSOLE_GROUPS
Grupos a los que pertenecerán automáticamente todos los usuarios
creados que se puedan loguear, veamos un ejemplo…
CONSOLE_GROUPS floppy:audio:video:cdrom
bash-2.05b$ id
uid=1000(darkhis)gid=100(users)
groups=100(users),11(floppy),17(audio),18(video),19(cdrom)
Como ven. aparte del grupo “users” que fue especificado al momento
de crear mi usuario, también pertenezco a los anotados en el archivo.
DEFAULT_HOME
Esta opción permite el login para los usuarios que no tiene n un home
directory definido en “/etc/passwd”, lo cual puede ser o no un agujero
de seguridad, sobre todo si no sabemos porque lo vamos a activar :).
NO_PASSWORD_CONSOLE
Define las consolas en las cuales no será necesario usar un password
para entrar como usuarios diferentes al root, las consolas se definirán
de la forma “tty1:tty2…”. También mucho cuidado!.
GETPASS_ASTERISKS
Si extrañan su estúpido login de Mierdows en el que los caracteres de
su password se ven como asteriscos mientras realizan la mariconeada
de loguearse, prueben colocarle un 1 como argumento a esta opción
y dejen de llorar :P.
ALL: 64.246.22.103
La cual permite acceso desde esa IP para TODOS los servicios que
brindamos, ahora si queremos desde esa IP solo entren a telnet…
telnetd: 64.246.22.103
ftpd: ALL
Entrando en detalles, ext2 (al igual que ext3), nos permite activar
permisos de lectura, escritura, ejecución, suid, gid, dueño y grupo de
los archivos entre otras cositas más.
%b Número de bloques.
%h Número de enlaces.
%i Número de nodo-i.
%o Bloque de entrada/salida.
%s Tamaño en bytes.
Listo?¿, ahora veamos que el mismo comando también nos sirve para
analizar sistemas de archivos, usándolo de la siguiente forma…
Por ejemplo…
Por otro lado, para formatear recurriremos a “mkfs”, ya sea para una
partición de disco o un disquet.
Para los que no les cae la ficha, hablamos de que se debe colocar el
directorio “/home” en una partición separada de la raíz o incluso en
otro disco duro si esto es posible, cuanto más lejos… mejor!!!! >).
Estos mails, logs, etc., son otro factor de riesgo para la cuota libre en
el disco por lo que también es recomendable tener “/var” en una
partición separada.
Para que este bit quede activado además del 4000 el propietario de
archivo debe de tener permisos de ejecución, de esta forma la “x”
perteneciente a los permisos de usuario será cambiada por una “s”.
La propiedad del bit suid es de que cuando otro usua rio ejecute el
archivo este será ejecutado con los permisos del usuario quien lo
creo, el caso mas común son los ficheros suid creados por el root que
cuando un usuario normal lo ejecuta, tendrá los privilegios de root
(en el programa) mientras este se encuentre activo.
Este archivo no puede ser modificado por usuarios sin privilegios por
lo que el bit suid activado eleva los privilegios de un usuario hasta los
del administrador permitiéndole cambiar su clave correctamente.
Ahora, como había prometido, para ubicar archivos con el bit “suid” o
“sgid” activado utilicen el siguiente comando…
Finalmente tenemos a los atributos “s” y “S”, que son para garantizar
el borrado seguro de archivos, un archivo con “s” activado será
borrado por el sistema colocando ceros en los bloques que ocupaba
en lugar de simplemente desligarlo del sistema de archivos.
http://www.thc.org
Una vez instalado, los binarios que nos quedan serán los siguientes…
srm [-d] [-f] [-l] [-l] [-v] [-z] file [file] [another file]
sfill [-i] [-I] [-f] [-l] [-l] [-v] [-z] target-directory
sswap [-f] [-l] [-l] [-v] [-z] /dev/of_swap_filesystem
smem [-f] [-l] [-l] [-v]
7º Compilando el Kernel
Para realizar esta prueba bajen la versión del kernel 2.6.11 desde
www.kernel.org, siendo el paquete a bajar el “linux-2.6.11.tar.gz”.
Una vez con el paquete del kernel y como usuario root lo movemos
hasta “/usr/src”, que como saben es en donde se guardan las fuentes
de los kernels que tendremos en nuestro sistema.
Y lo desempaquetemos…
bash-2.05b# rm linux-2.6.11.tar.gz
bash-2.05b# cd linux-2.6.11/
make config
Lanza un modo de configuración en texto que nos irá preguntando la
configuración que deseamos realizar (No recomendado).
make menuconfig
Aparece un menú con las opciones de configuración (Recomendado).
make xconfig
Lo mismo que el anterior pero para el modo gráfico.
Para desmarcar una opción usamos la letra “N” con lo que quedará en
blanco “[ ]”.
Algunas de las opciones que tenemos por defecto son para port átiles
por lo que sería interesante (si no estamos en una), desactivar las
siguientes opciones con [no]…
[ ] ISA support
Brinda soporte para sócalos ISA (equipos muy viejos), deberán ver su
mother para corroborar si dar o no soporte, posiblemente sea [no].
[ ] MCA support
Activa el soporte para MicroChannel Architecture, lo cual es similar a
ISA pero en equipos IBM PS/2 y laptops viejas, lo normal será [no].
Algunas cosas son genéricas y vale la pena que queden como están
para el correcto funcionamiento del sistema.
El puerto serial, los sócales AGP, los chips nvidia y las tarjetas de
video comunes son dispositivos de esta categoría, por lo que si su
equipo los tiene deberán cargar los correspondientes en el kernel.
Sound --->
En esta parte configuramos la tarjeta de sonido, dependiendo del
sócalo en el que está seleccionamos el chip correspondiente.
USB support --->
Seleccionamos los dispositivos USB que soportará nuestro kernel.
Por otra parte “Enable different security model” nos permite elegir
diferentes niveles de seguridad en nuestro kernel.
bash-2.05b# make
Compila pero no instala el nuevo kernel.
8º Logs en Unix
Como alguno que conoce algo de logs o lee atentamente todas las
lecciones sabe :P, estos usualmente se almacenan en el directorio
“/var/log”, lo cual puede variar según la configuración que nosotros
realicemos, siendo capaces de enviarlos a una terminal, a un usuario
o hasta a otro host.
# /etc/syslog.conf
# For info about the format of this file, see "man syslog.conf"
# and /usr/doc/sysklogd/README.linux. Note the '-' prefixing
# some of these entries; this omits syncing the file after
# every logging. In the event of a crash, some log information
# might be lost, so if this is a concern to you then you might
# want to remove the '-'. Be advised this will cause a
# performation loss if you're using programs that do heavy
# logging.
# Uncomment this to see kernel messages on the console.
#kern.* /dev/console
Nota: La clave “security” debe ser sustituida por “auth” y no debe ser
usada y la palabra clave “mark” es de uso interno por lo que tampoco
debe ser incluida en nuestras reglas.
* (caracter asterisco)
Abarca todas las posibilidades del campo que ocupa, por ejemplo…
kern.*
*.crit
, (caracter coma)
Se utiliza para indicarle a varios servicios una misma “prioridad” y log
sin la necesidad de crear varias directivas para ello, veamos…
cron,daemon.alert
Esto produce que se envíen todos los mensajes producidos por “cron”
y “daemon” de prioridad “alert ” y “emerg” a donde especifiquemos.
= (caracter igual)
Se utiliza para darle una prioridad específica a una o más facilidades
de modo tal que solo se loguen los mensajes con esa prioridad, por
ejemplo…
kern.=warning
! (caracter exclamación)
Sirve para determinar un límite de logueo en las prioridades de modo
tal que no se guarde nada a partir de ella y sus inferiores, veamos…
mail.notice;mail.!crit
Sencillo y sin vueltas, no hay mucho más para aclarar por lo que
pasamos al campo en el que configuramos a donde enviar los
mensajes producidos de acuerdo a lo establecido en “QueLoguear”.
mail.emerg /dev/tty1
Se pueden lograr muchas cosas con este tipo de archivos, para los
que no se lo imaginan supongan que le decimos a nuestra grabadora
de CD que escriba el archivo “2600” (en unas páginas veremos como
usar la grabadora), mientras que en otra terminal hacemos…
*.* @host.seguro
Regla que enviará todos los logs (*) sobre todos los eventos (*) a un
host seguro. Como pueden imaginar, para que esto funcione hay que
agregar otras configuraciones, las cuales les explicaré paso a paso…
En la maquina local…
Esto se logra con una tarjeta de red con un único cable entre los dos
hosts o bien con una VLAN a nivel del hardware mediático de la red.
Si bien esto es seguro, hay que tomar en cuenta que el host al que se
envían los logs no debe estar comprometido de ninguna forma sino
sería lo mismo que no hacer nada.
*.* |/root/lr
Otra regla común para guardar todos los mensajes con la prioridad
“emerg” es notificar a todos los usuarios se encuentran conectados al
sistema, lo cual hacemos con ayuda del carácter asterisco, veamos…
*.=emerg *
Archivo: /var/log/messages
Definido en el syslog.conf por la regla…
*.info;*.!warn;\
authpriv.none;cron.none;mail.none;news.none -/var/log/messages
En este log se guardarán también los sucesos del firewall del sistema
(netfilter) e información relativa al arranque y apagado del equipo.
Archivo: /var/log/syslog
Definido en el syslog.conf por la regla…
*.warn;\
authpriv.none;cron.none;mail.none;news.none -/var/log/syslog
Aquí grabamos lo relacionado a intentos de acceso al sistema por lo
que es importante revisarlo periódicamente en busca de anomalías.
Archivo: /var/log/debug
Definido en el syslog.conf por la regla…
*.=debug -/var/log/debug
Archivo: /var/log/secure
Definido en el syslog.conf por la regla…
authpriv.* -/var/log/secure
Archivo: /var/log/cron
Definido en el syslog.conf por la regla…
cron.* -/var/log/cron
Archivo: /var/log/maillog
Definido en el syslog.conf por la regla…
mail.* -/var/log/maillog
Archivo: /var/log/wtmp
Guarda información acerca de conexiones y desconexiones al
sistema, el mismo se lee con el comando “last”.
Archivo: /var/log/utmp
Contiene información acerca de los usuarios conectados al sistema,
se trata de otro archivo binario y se lee con el comando “who”,
aunque en algunos sistemas está información es obtenida de otra
parte. Para ver la información de este archivo también usaremos el
comando “last”.
Archivo: /var/log/lastlog
Tiene la información correspondiente a fechas y horas de las últimas
conexiones realizadas por los usuarios, el archivo se lee con “finger
usuario”. El comando “who” también extrae info de este archivo.
Archivo: /var/log/faillog
Lo mismo que el “lastlog” pero con los intent os de conexión fallidos, o
sea que cuando un usuario teclea mal su contraseña la información
de este archivo es leída, para luego ser mostrada cuando el usuario si
pueda acceder al sistema… es sin duda un alcahuete <:B. Para leerlo
podemos utilizar el comando “faillog” de la siguiente forma…
9º El Sonido
bash-2.05b# cd alsa-driver-1.0.15
bash-2.05b# ./snddevices
…continuando nos toca bajar las librerías. Para ello diríjanse otra vez
al sitio de ALSA y bajen el archivo con las librerías más nuevas, para
Walter fueron las “alsa-lib-1.0.15”, lo descomprimió y…
bash-2.05b# cd alsa-lib-1.0.15
bash-2.05b# ./configure && make && make install
bash-2.05b# cd alsa-utils-1.0.15
bash-2.05b# ./configure && make && make install
bash-2.05b# cd alsa-oss-1.0.15
bash-2.05b# ./configure && make && make install
Ahora, para configurar el sonido y antes que nada tuvo que agregar
lo siguiente a su archivo “/etc/modules.conf” (en el caso de que no
estuviera), modificándolo según su tarjeta de sonido…
# ALSA
alias char-major-116 snd
alias snd-card-0 snd-intel8x0
# OSS/Free
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
# card
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
bash-2.05b# alsamixer
( ( ( ( d[-.-]b ) ) ) )
10º La grabadora
Algunas áreas del disco pueden dejarse sin quemar para ser usadas
mas adelante, esto se llama disco multisesión y también veremos
como crearlos.
Para ent ender mejor la tecnología de los CD-RW el autor del “CD
Writing Howto” hace una analogía con una cancha de hockey sobre
hielo.
Eso mismo es lo que pasa con los CD-RW por lo que pueden imaginar
que las veces que podemos grabar, borrar y volver a grabar no será
ilimitada.
Primero que nada nuestro kernel debe tener soporte SCSI (aunque su
grabadora sea IDE), ya que en tiempos prehistóricos las grabadoras
de CD eran SCSI pero con la aparición de IDE se tuvo que idear una
manera para soportarlo y el problema principal estaba en el programa
de grabación de línea de comandos por excelencia: “cdrecord”.
La solución a esto fue emular el IDE para que parezca SCSI y aunque
también parezca rebuscado, es fácil de hacer %).
scsi support
scsi generic support
scsi cdrom support
append="hdd=ide-scsi"
En mi caso quedaría…
image = /boot/vmlinuz-ide-2.4.26
root = /dev/hda1
label = Linux
read-only
append="hdb=ide-scsi"
ISO9660
Sistema de archivos estándar internacional para CDs. Una imagen iso
será una copia fiel bit a bit de lo que se grabará en el CD.
ElTorito
Se utiliza para hacer CDs booteables, insertando un Floppy virtual a
la imagen del disco.
Joliet
Sistema que entre otras cosas admite los nombres de archivos largos
comúnmente encontrados en Windows , mejorando la compatibilidad
Windows /Unix.
HFS
Sistema de archivos utilizado en los equipos con sistema operativo
Macintosh.
RockRidge
También utilizado para soportar nombres de archivos largos así como
para permitir muchos subdirectorios, más adelante incluiremos como
extensión este sistema de archivos para grabar CDs multisesión.
Con lo cual grabamos todos los archivos que comienzan con “Tema”
de la carpeta “UB40” ubicada en la raíz.
directorio1/
directorio2/
archivo1
archivo2
etc…
bash-2.05b# cd directorio2/
bash-2.05b# cp -rf /home/darkhis/mp3/ZapMama .
Procedemos a verificar…
bash-2.05b# cd /mnt
bash-2.05b# cd cdrom/
bash-2.05b# ls
Chopper directorio2
bash-2.05b# cd directorio2/
bash-2.05b# ls
ZapMama
..
...y listo el pollo!, para grabar otra sesión repitan el procedimiento.
11º Backups
Como quienes desde hace años usan PCs saben, no solo un hacker
puede arruinarnos los datos del disco. Desastres naturales como una
madre furiosa o un incendio en su cuarto andan al asecho y es por
esto que debemos estar atentos, realizando religiosamente las copias
de seguridad a su formato de disco preferido.
Entonces, para que cree este punto?¿, para estimular su neurona del
sentido común y recomendarles respaldar solo las siguientes partes
del sistema…
Una vez que sepan como crear la base podrán ir agregando cositas y
mandarse cagaditas hasta dejarla a su medida, comencemos…
El siguiente paso será crear los dispositivos, para ello tenemos una
utilidad que se encarga de hacerlo, la misma se llama “MAKEDEV” y
está en el directorio “/dev”.
bash-2.05b# pwd
/usr/local/jaula
bash-2.05b# cd ..
bash-2.05b# chroot jaula/
chroot: cannot run command `/bin/sh': No such file or directory
Mierda!, chroot se queja de la ausencia del archivo “/bin/sh” por lo
que procedo a copiarlo como lo hice con “/bin/bash”…
Las librerías que usa son las mismas que acabo de copiar así que ya
están adentro, veamos ahora…
También podemos ver que a pesar de que nos movemos hacia abajo
no pudimos salir del directorio virtual “/” generado por “chroot”. Para
desconectarnos del telnet escriban “exit”. Proseguimos con el binario
“login”…
Prestando atención notamos que solo hay una librería nueva para
añadir, tic tac tic tac…
Pese a esto, lo normal es que no queramos que los usuarios que usan
la jaula sean los mismos que hay en el sistema por lo que la solución
poco elegante pero efectiva será la siguiente…
# Telnet server:
telnet stream tcp nowait root /usr/sbin/chroot chroot
/usr/local/jaula/ in.telnetd
Y luego de reiniciar el proceso “inetd” hagan la siguiente prueba…
-bash-2.05b$ ls -la
total 8
drwxr-xr-x 2 enjaulado root 4096 Nov 15 03:37 .
drwxr-xr-x 3 enjaulado root 4096 Nov 15 03:37 ..
Tal como les comenté, por mas que se les ocurriera hacer un borrado
total del disco no tendrían el suceso deseado en nuestro sistema, no
obstante y debido a que no confiamos ni un poquitito en Uds., en la
jaula tenemos otro sistema de control que nos permite ver en tiempo
real lo que están haciendo, tal como si estuviéramos con Uds ;).
enjaulado:$1$wXEy6MY5$p59yHDFb86EZwhFi5wFlj1:1001:100:,,,:/home/
enjaulado:/bin/bash
Aclarado esto les informo que la versión del programa que tengo en
mi poder y usaremos es la…
# Telnet server:
telnet stream tcp nowait root /usr/sbin/chroot chroot
/usr/local/jaula/ in.telnetd -L /root/ttysnoop-0.12d/ttysnoops
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
if(argc<2){
printf("usage: mksocket file_path\n");
return EXIT_FAILURE;
}
localaddr.sun_family=AF_UNIX;
unlink(argv[1]);
strcpy(localaddr.sun_path, argv[1]);
len = sizeof(localaddr.sun_family)+sizeof(localaddr.sun_path);
return EXIT_SUCCESS;
}
bash-2.05b# ./mksocket
usage: mksocket file_path
Excelente, es fácil cuando nos dan la papita en la boca no?¿ ;), a ver
si probemos conectarnos ahora…
Parararara paraph, parara rara para rara… parara rara paraph… [-^-]…