Estos apuntes seguiran el esquema de apartado Overview of Domains and Competencies de training.linuxfoundation.org/certification/lfcs ya que el contenido del curso LFS201 no esta siendo (en mi opinión) suficiente para presentarse al examen LFCS
Gracias por adelantado a:
Tengo registrado el examen para hacerlo sobre Ubuntu, por lo tanto usare
una maquina virtual de Virtual Box con
Lubuntu 14.04.4,
en concreto la versión 32-bit PC (i386) desktop image
Para agilizar el uso de este entorno realizare las siguientes configuraciones:
1- Facilitar acceso por ssh
Primero, instalo ssh en lubuntu con sudo apt-get install openssh-server
.
Segundo, configuro Virtual Box para que redirija el puerto 2222 local al puerto 22 de la máquina virtual
Propiedades máquina virtual -> Red -> Adaptador 1 -> Avanzadas -> Reenvio de puertos -> Nombre: ssh, Protocolo: TCP, Puerto anfritión: 2222 Puerto invitado: 22
Tercero, creo una clave publica/privada para entrar directamente (como es para esto me puedo permitir crearla sin contraseña)
me@local ~ $ ssh-keygen -C vbox
Generating public/private rsa key pair.
Enter file in which to save the key (/home/me/.ssh/id_rsa): /home/me/.ssh/vbox
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/me/.ssh/vbox.
Your public key has been saved in /home/me/.ssh/vbox.pub.
...
me@local ~ $ ssh-copy-id -i /home/me/.ssh/vbox.pub -p 2222 me@localhost
Cuarto, configuro ~/.ssh/config
para que todo se más facil aún:
Host lubuntu
HostName 127.0.0.1
IdentityFile /home/me/.ssh/vbox
User me
Port 2222
2- Arranque en modo consola por defecto
sudo nano /etc/default/grub
y cambio
GRUB_HIDDEN_TIMEOUT=0
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
GRUB_CMLDLINE_LINUX=""
#GRUB_TERMINAL=console
por
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
GRUB_CMLDLINE_LINUX="text"
GRUB_TERMINAL=console
* De paso comento la linea de GRUB_HIDDEN_TIMEOUT para que aparezca el menú de grub ya que lo necesitare para algunas pruebas
Guardo los cambios y actualizo con sudo update-grub
3- Autologin
sudo nano /etc/init/tty1.conf
para añadir la linea:
exec /sbin/getty -8 38400 tty1 -a me
4- Configuro sudo para que no pida contraseña
Hago sudo visudo
para añadir la linea:
me ALL = NOPASSWD : ALL
5- Ejecuto ready-for.sh
me@vbx:~$ cd /tmp
me@vbx:/tmp$ wget -q https://training.linuxfoundation.org/cm/prep/ready-for.sh
me@vbx:/tmp$ chmod +x ready-for.sh
me@vbx:/tmp$ ./ready-for.sh --install LFS201
Checking that this computer is suitable for LFS201: Essentials of System Administration
...
Is that okay? [y/N] y
...
BONUS: Debian 8
Adicionalmente, para algunos casos usare Debian 8.4.0 en otra maquina virtual y con una configuración similar a la ya detallada en los pasos anteriores
BONUS: Red interna
Para algunos ejercicios en los que quiero conectar varias maquinas virtuales entre si hago esto: youtube - Linux Leech superuser.com/questions/119732 (con debian 8 no funcionaba, he tenido que hacerlo entre un ubuntu y un lubuntu)
Fuente: training.linuxfoundation.org/certification/lfcs
Si estamos en modo texto y queremos ir a modo grafico tenemos dos opciones:
startx
(para esto en lubuntu antes necesitamossudo apt-get install lxde-common && echo "exec startlxde" > ~/.xinitrc
)telinit 5
(en lubuntu no funciona pero en debian si)
Si se trata de que antes de que se ejecute el arranque por defecto en modo grafico lo abortemos y entremos en mode texto tenemos que:
- Posicionarnos en la opción de grub deseada
- Pulsar
e
para que nos deje editarla - Buscar la linea donde se carga el kernel y escribir al final de todo
text
(en otras distribuciones seria escribir3
, es decir, el runlevel al que queremos ir).
find
con:
-name
-iname
-type
-mtime
-size
-user
-not
o!
-perm 755
y para ejecutar algo sobre los resultados -exec
. Ejemplos:
find / -name "test.txt" -exec chmmod 700 {} \;
Tambien podemos usar:
which
busca ejecutables en el PATHlocate
busca en base de datos del sistema de ficheros (que se puede actualizar consudo updatedb
)
Más: tecmint.com - compress files
no tengo claro a que se refiere
- Crear fichero vacio:
touch fichero.txt
- Editar fichero:
nano fichero.txt
- Comparar ficheros:
diff fichero1.txt fichero2.txt
- Cambiar el editor de texto por defecto:
update-alternatives --config editor
Más: tecmint.com - vi elarraydejota.com - editor por defecto
cmp
o diff
- Entrada estanadar = tipo 0
- Salida estanadar = tipo 1
- Error estandar = tipo 2
Ejemplos:
comando 2>&1
redirigir errores a salida estandarwc < archivo.txt
alimenta la entrada estandar dewc
conarchivo.txt
comando 2> /dev/null
desecha la salida de erroresps -a | sort
redireciona la salida deps
a la entrada desort
Más: hipertextual.com - tuberias
grep -e
awk
sed
Más: tecmint.com - sed
tar cvf file.tar *
comprimirtar xvf file.tar
descomprimirtar xpvf file.tar
descomprimir presrvando permisostar tf file.tar
listar contenido- Para comprimir a la vez que se empaqueta añadir la opción:
z
para comprimir congzip
j
para comprimir conbz2
J
para comprimir conxz
Otras opciones para backup:
dd if=/dev/sda of=/system_images/sda.img
rsync -av source_directory destination directory
Más: tecmint.com - compress
youtube
tecmint.com - raid
touch
, cp
, mv
, rm
...
dd if=input-file of=output-file options
crear output-file
usando input-file
según las opciones pasadas:
dd if=/dev/zero of=outfile bs=1M count=10
crea un archivo de 10 MB lleno con cerosdd if=/dev/sda of=/dev/sdb
crea una copia de/dev/sda
en/dev/sdb
(datos en bruto)dd if=/dev/sda of=sdadisk.img
crea una imagen del disco duro/dev/sda
dd if=/dev/sda1 of=partition1.img
respaldar una particióndd if=ndata conv=swab count=1024 | uniq > ofile
Enlaces simbolicos:
- Es parecido a un acceso directo de windows
- El enlace y el fichero original no comparten inodo
- Borrar el enlace no borra el fichero original
- Borrar el fichero original no borra el enlace, pero lo deja roto
- Se crean con
ln -s fichero_original enlace_simbolico
Enlaces duros:
- El enlace y el fichero original comparten inodo
- No puede haber enlaces duros entre distintos sitemas de ficheros
- No se puede hacer enlaces duros a directorios
- Los cambios en un enlace duro (permisos, contenidos, etc) se propagan al fichero original y los demás enlaces duros
- Si se borra el fichero original no se pierde la información porque tambien la tiene el enlace duro
- Se crean con
ln fichero_original enlace_duro
Se puede comprobar si dos ficeros tienen el mismo inodo o no con ls -li
o stat fichero
Más: rm-rf.es - ln
ls
,ll
... muestra los ficheros con sus permisoschmod 755
pone los permisos a-rwxr--r-x
chmod u+rwx,g+wx,o-rx
da los permisos indicados y no modifica los no indicados (es decir, el valor de lectura de grupo y el de escritura de otros se queda como estuvieran antes)chmod a+rwx
da los permisos indicados a todo el mundo (a
deall
)
man comando
comando --help
help comando
sudo comando
ejecutar comando como rootsudo -u you comando
ejecuta el comando como el usuario yousu xxx
cambiar a usuario xxx (pide contraseña de xxx)sudo su xxx
cambiar a usuario xxx (no pide contraseña)sudo su -
cambiar a usuario root (el-
simula que te logueas directamente, por ejemplo, en vez de dejarte en el directorio donde estas te llevara a la home de root)visudo
edita/etc/sudoers
visudo -f /etc/sudoers.d/loqquesea
edita/etc/sudoers.d/loqquesea
(para que tenga efecto asegurarse de que la lineaincludedir /etc/sudoers.d
de/etc/sudoers
este descomentada)
En /etc/sudoers
la cadena ALL=(ALL:ALL) ALL
significa:
ALL=
En todos los host por si ponemos este mismo fichero en varias máquinas.(ALL:ALL)
Puede escalar privilegios a cualquier usuario (primer ALL) y cualquier grupo (segundo ALL).ALL
Puede ejecutar cualquier comando.
otros ejemplos:
ALL = NOPASSWD: ALL
no pide autenticarse al usarsudo
ALL = /bin/ls
solo puede usarsudo
conls
Más: linuxtotal.com.mx - sudo y formandome.es - sudo tecmint.com - su vs sudo
sudo shutdown -h +1 "Power Failure imminent"
apagar en un minúto y avisar a los usarios con el mensaje "Power Failure imminent"sudo shutdown -h now
=halt
apaga ahora mismosudo shutdown -p now
=poweroff
apaga ahora mismosudo shutdown -r now
=reboot
reinicia ahora mismo
La diferencia entre poweroff
y halt
es que halt
detiene el sistema
y poweroff
detiene el sistema y lo apaga.
Editamos la entrada de grub y en la linea de carga del kernel ponemos el número del runlevel en el que queremos iniciar
sudo grub-install /dev/sda
instala grub 2 en /dev/sda
.
La configuración se hace modificando los ficheros de /etc/grub.d
y
/etc/default/grub
, ejecutando tras esto update-grub
para que se
actualice el fichero /boot/grub/grub.cfg
que no debemos tocar a mano.
Ejemplo 1 de reparación:
sudo dd if=/dev/zero of=/dev/sda bs=446 count=1
eliminamos el MBR- Reinicamos y peta
- Reinicamos con un live cd
sudo mount /dev/sda1 /mnt
montamos el disco duro- Asociamos los directorios que grub necesita:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
cambiamos el directorio /grub-install /dev/sda && grub-install --recheck /dev/sda && update-grub
instalamos grub- Desmontamos todo:
exit
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt
- Reiniciamos y funciona
Ejemplo 2 de reparación:
sudo rm /boot/grub/grub.cfg /etc/default/grub /etc/grub.d/*
eliminamos los ficheros de configuración- Reinicamos y peta
- Reinicamos con un live cd
sudo mount /dev/sda1 /mnt
montamos el disco duro- Asocciamos los directorios que necesitamos para tener internet:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /tmp /mnt/tmp
sudo mount --bind /proc /mnt/proc
sudo mount --bind /etc/resolv.conf /mnt/etc/resolv.conf
- Asociamos los directorios que grub necesita:
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /sys /mnt/sys
- Recuperamos los archivos perdidos:
sudo cp /etc/grub.d/* /mnt/etc/grub.d/
sudo cp /boot/grub/grub.cfg /mnt/boot/grub
sudo chroot /mnt
cambiamos el directorio /dpkg --get-selections | grep "grub"
consultamos que paquetes de grub estan instaladosdpkg -V grub-common
comprobamos paquete a paquete cual es el que esta malapt --reinstall install grub-common
reinstalamos el paquete rotoupdate-grub
reconfiguramos grub- Desmontamos todo:
exit
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/tmp
sudo umount /mnt/etc/resolv.conf
sudo umount /mnt
- Reiniciamos y funciona
Más: howtoubuntu.org - grub lukeplant.me.uk - chroot ubuntuforums.org - grub debian-handbook.info - apt-get tecmint.com - grub
nice
es lo opuesto a la prioridad: un proceso con nice
-20 tienen
la máxima prioridad, y otro con nice
19 tienen la mínima prioridad.
nice -n 5 cat
onice -5 cat
ejecuta cat con un valornice
incrementado en 5 unidades.nice cat
usa el valor 10 por defecto, por lo tanto es igual anice -n 10 cat
onice -10 cat
nice
nos da el valornice
actual
me@lub ~ $ nice
0
me@lub ~ $ nice bash
me@lub ~ $ nice
10
me@lub ~ $ nice -20 bash
me@lub ~ $ nice
19
me@lub ~ $ exit
exit
me@lub ~ $ nice
10
me@lub ~ $ exit
exit
me@lub ~ $ nice
0
me@lub ~ $ nice -3 cat &
[1] 1797
me@lub ~ $ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1740 1739 0 80 0 - 2110 wait pts/1 00:00:00 bash
0 T 1000 1797 1740 1 83 3 - 1369 signal pts/1 00:00:00 cat
0 R 1000 1798 1740 0 80 0 - 1569 - pts/1 00:00:00 ps
renice
cambia el valor nice de un proceso en ejecución.
Por defecto solo root puede disminuirlo, sin embargo editando
/etc/security/limits.conf
se puede determinar por usuario unos limites
en los que dicho usuario si puede variar el valor nice
de sus procesos.
e@lub ~ $ cat &
[1] 1813
me@lub ~ $ renice -n 1 1813
1813 (ID de proceso) prioridad antigua 0, prioridad nueva 1
me@lub ~ $ renice -n 0 1813
renice: fallo al establecer la prioridad para 1813 (ID de proceso): Permiso denegado
me@lub ~ $ sudo renice -n 0 1813
1813 (ID de proceso) prioridad antigua 1, prioridad nueva 0
Añado la línea me - nice -20
en /etc/security/limits.conf
, salgo y
vuelvo a entrar con el usuario me
me@lub ~ $ cat &
[1] 1872
me@lub ~ $ renice -n 1 1872
1872 (ID de proceso) prioridad antigua 0, prioridad nueva 1
me@lub ~ $ renice -n 0 1872
1872 (ID de proceso) prioridad antigua 1, prioridad nueva 0
top
muestra la actividad de los procesosps
da información detallada de cada procesopstree
muestra un arbol de procesos y sus conexionesstrace
da información de las llamadas a sistema de un proceos
En /proc
hay un directorio por cada proceso ( el cual se llama como
el PID de su proceso) donde aparece información sobre él.
me@lub ~ $ cat &
[1] 2205
me@lub ~ $ cat /proc/2205/cmdline
cat
me@lub ~ $ cat /proc/2205/status
Name: cat
State: T (stopped)
Tgid: 2205
Ngid: 0
Pid: 2205
...
me@lub ~ $ realpath /proc/2205/cwd/
/home/me
En /proc/PID/fd/1
se puede ver la salida estanadar de haberla.
/var/log/
contine los logshead
muestra el principio de un ficherotail
muestra el final de un fichero (con la opción-f
actualiza la salida según se incrementa el fichero)dmesg
lista el buffer de mensajes del núcleo ( =/var/log/dmesg
)zcat
,zgrep
, etc sirve para usarse con ficheros.gz
como si fuera de texto plano/var/log/cron
(grep -i cron /var/log/syslog
si esta desactivadoe) para ver la actividad delcron
/var/log/boot.log
mensajes de arranque del sistemalast
da los accesos de cada usuario,lastlog
da el último acceso de cada usuario ylastb
los accesos fallidos/var/log/messages
mensajes principales del sistema/var/log/auth.log
información sobre el sistema de autorización de usuarios y permisos
Más: securityartwork.es - análisis forense
/etc/crontab
y/etc/cron.d/*
son ficheros crontab "multiusuario" (en cada linea se dice con que usuario se ejecuta la tarea)/etc/cron.hourly/
y similares son ficheros ejecutables que lanzara root en los periodos que indican el nombre de la carpetacontab -e
edita el fichero contrab del usuario
Ejemplo
# Cada hora en horario laboral
0 7-20 * * 1,2,3,4 /bin/bash ~/.owa/owa.sh
0 7-18 * * 5 /bin/bash ~/.owa/owa.sh
# Cada 4 horas fuera de horario laboral y entre semana
0 23,3 * * 1,2,3,4 /bin/bash ~/.owa/owa.sh
# Cada 8 horas en fin de semana
0 */8 * 6,7 /bin/bash ~/.owa/owa.sh
# Notificacion cada 2 o 3 horas entre semana de 7 a 20
0 7,9,11,14,17,20 * * 1,2,3,4,5 /bin/bash ~/.owa/notif.sh
# Notificacion cada 12 horas en fin de semana
0 */12 * 6,7 /bin/bash ~/.owa/notif.sh
@hourly /bin/bash /home/pi/wks/segundamano/run.sh
@weekly /bin/bash ~/wks/emvs/mail.sh
cron
manda un email a la dirección del campoMAILTO
o al usuario que ejecuta el comando- La linea
EXTRA_OPTS="-L 0"
en/etc/default/cron
, o la lineaexec cron -L 0
en /etc/init/cron.conf, define el nivel de log: siendo 0 nada de log, 1 log normal y 2 log detallado - Si no sabemos en que log escribe lo podemos buscar con
sudo grep -icr CRON /var/log/* | grep -v :0
- En
ubuntu
probablemente nos interese/var/log/syslog
Si descomentamos la linea #cron.* /var/log/cron.log
de /etc/rsyslog.d/50-default.conf
el log de cron estara
en /var/log/cron.log
Más: bencane.com - cronjob help.ubuntu.com - common problems askubuntu.com/questions/56683
sudo apt-get update
+:
sudo apt-get upgrade
actualiza todo lo que se pueda actualizar sin tener que resolver conflictos (nunca eliminara paquetes)sudo apt-get dist-upgrade
actualiza intentando resolver conflictos si los hubiera (puede que elimine algún paquete)
Más: tecmint.com - packages tecmint.com - apt-get tecmint.com - dpkg
dpkg -V
comprueba la integridad de todos los paquetes (o de alguno en concreto si se pasa como parametro).
Solo ofrece salida cuando ha habido alguna información que mostrar.
Los caracteres mostrados significan:
- .: prueba pasada
- ?: la prueba no se ha podido realizar
- S: el tamaño de archivo difiere
- M: los permisos del archivo y/o tipo difieren
- 5: el checksum MD5 difiere
- D: discrepancia entre los números mayor/menor
- L: discrepancia de ruta de enlace simbólico
- U: el usuario propietario difiere
- G: el grupo propietario difiere
- T: el tiempo de modificación difiere
- P: las capacidades difieren
- c: se trata de un fichero de configuración que ha sido modificado de forma legitima
Un mensaje no siempre es un error (por ejemplo, un fichero de configuración modificado).
mpstat
muestra el uso de los procesadores. Ejemplo:mpstat -P ALL -u 2 3
ps
da información detallada de cada proceso. Elmplops -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu
kill
ypkill
para matar procesospgrep
para buscar procesos al estilo depkill
pero sin matarlossar
da estadisticas del sistema (ver en/etc/default/sysstat
si esta activada la recoleción automatica de estadisticas)
/proc/sys
y sysctl
muestran y permiten editar opciones del sistema
sysctl dev.cdrom.autoclose
=cat /proc/sys/dev/cdrom/autoclose
echo 0 > /proc/sys/net/ipv4/ip_forward
=sysctl -w net.ipv4.ip_forward=0
- Para que el cambio sea persistente añadir la linea
net.ipv4.ip_forward=0
en/etc/sysctl.conf
(o usar ficheros .conf en/etc/sysctl.d
) sysctl -p
aplica los valores de/etc/sysctl.conf
sudo modprobe -a ip_tables
carga iptables de manera no persistente.
Para hacerlo persistente añadir una linea que diga ip_tables
en el
fichero /etc/modules
shebang
es la primera linea de un script, la cual empieza por#!
, que indica el interprete con que ejecutar dicho script. Ejemplo:#!/bin/bash
chmod 755 myscript.sh
para que el script sea ejecutable$?
da el código de salida del último comando ejecutado (0 = OK)
MBR:
- Backup
dd if=/dev/sda of=mbr.bkp bs=512 count=1
- Restaurar
dd if=mbr.bkp of=/dev/sda bs=512 count=1
GRUB:
- Editar
/etc/default/grub
- Actualizar
update-grub
SysVinit:
- Runleves de 0 a 5
- Runlevel por defecto en
/etc/inittab
- Scripts ejecutacos en cada runlevel
ls /etc/rc*.d
(S
de start yK
de kill) - Configurar con
chkconfig
osysv-rc-conf
service [servicio] start|stop|status
arranca, para y muestra estado de un servicio
systemd:
systemctl
sin parametros lista los servicios y cia. (unidades)systemctl status [unit]
muestra el estado de una unidadsystemctl start [unit]
arranca una unidadsystemctl stop [unit]
para una unidadsystemctl restart [unit]
reinicia una unidadsystemctl enable [unit]
habilita una unidad (se arrancara al inicio de sistema)systemctl disable [unit]
deshabilita una unidad (no se arrancara al inicio del sistema)systemctl is-enabled [unit]
muestra si esta habilitado para arrancar al inicio del sistema
Upstart:
- Ficheros de configuración (.conf) en
/etc/init/*.conf
initctl reload-configuration
recarga la configuraciónsudo start [servicio]
arranca un servicio
List and identify SELinux/AppArmor file and process contexts
Configure and modify SELinux/AppArmor policies
AppArmor y SELinux no pueden estar arrancados a la vez.
SELinux:
Instalar SELinux con sudo apt-get install policycoreutils selinux-utils auditd
y para habilitarlo ejecutar sudo selinux-activate
SELinux tiene tres modos:
- Disabled: no hace nada
setenforce 1
Enforcing: Deniega el acceso si no se cumplen las reglassetenforce 0
Permissive: No deniega el acceso si no se cumplen las reglas, simplemente genera un log
setenforce
no es persistente, para que el cambio sea permanente hay
que editar /etc/selinux/config
poniendo por ejemplo SELINUX=enforcing
Los logs se pueden leer con grep AVC /var/log/audit/audit.log
SELinux usa tres concetos fundamentales:
- Contextos: Son etiquetas a archivos, procesos y puertos. Ejemplos de contextos son usuarios de SELinux, rol y tipo.
- Reglas: Describe el control de acceso en términos de contextos, procesos, archivos, puertos, usuarios, etc.
- Políticas: Son un conjunto de reglas que describen las decisiones de control de acceso aplicables a todo el sistema, las que deberían ser aplicadas por SELinux.
El parametro Z
en ps axZ
y ls -Z
muestra los contextos.
sudo semanage boolean -l
muestra los booleanos de las políticas y
setsebool
cambia dichos booleanos, por defecto de manera no persistente
y con el parametro -P
de manera persistente.
me@deb ~ $ getsebool ssh_chroot_rw_homedirs
ssh_chroot_rw_homedirs --> off
me@deb ~ $ sudo setsebool ssh_chroot_rw_homedirs on
me@deb ~ $ getsebool ssh_chroot_rw_homedirs
ssh_chroot_rw_homedirs --> on
Habilitar el puerto 9999 para ssh:
me@deb ~ $ sudo semanage port -l | grep ssh
ssh_port_t tcp 22
me@deb ~ $ sudo semanage port -m -t ssh_port_t -p tcp 9999
jboss_management_port_t tcp 4712, 4447, 7600, 9123, 9990, 9999, 18001
me@deb ~ $ sudo semanage port -lC
SELinux Prot Type Proto Port Number
ssh_port_t tcp 9999
me@deb ~ $ sudo semanage port -l | grep ssh
ssh_port_t tcp 9999, 22
Habilitar DocumentRoot fuera de /var/www/html/
:
me@deb ~ $ sudo semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html(/.*)?"
me@deb ~ $ sudo restorecon -R -v /websrv/sites/gabriel/public_html
Herramientas para revisar errores (paquete setroubleshoot-server
):
grep httpd /var/log/audit/audit.log | audit2allow -M mypol
Crea reglas para permitir los accesos bloqueadosaudit2why
(similar a ala naterior) explica los erroressealert -l d51d34f9-91d5-4219-ad1e-5531e61a2dc3
muestra una alerta que hayamos visto en/var/log/messages
por ejemplo
AppArmor:
Instalar AppArmor con sudo apt-get install apparmor apparmor-utils
AppArmor se basa en perfiles y cada uno de ellos puede estar en dos estados:
- Enforcing: Deniega el acceso si no se cumplen las reglas
- Complain: No deniega el acceso si no se cumplen las reglas, simplemente genera un log
Para trabajar con los perfiles tenemos:
sudo apparmor_status
muestra el estado de AppArmor- Los perfiles se guardan en
/etc/apparmor.d
- Los perfiles con un enlace blando en
/etc/apparmor.d/disabled
estan deshabilitados - Se pueden conseguir más perfiles con
sudo apt-get install apparmor-profiles
sudo aa-complain /path/to/file
pasa un perfil a complain modesudo aa-enforce /path/to/file
pasa un perfil a enforce mode
Para deshabilitar AppArmor:
sudo systemctl stop apparmor.service
osudo update-rc.d -f apparmor remove
editar /etc/default/grub
para poner apparmor=0
en GRUB_CMDLINE_LINUX
y ejecutar sudo update-grub
tecmint.com - SELinux y AppArmor wiki.debian.org - SELinux wiki.archlinux.org - AppArmor
Ejemplo con pidgin:
me@lub /tmp $ sudo apt-get install build-essential
...
me@lub /tmp $ wget http://downloads.sourceforge.net/project/pidgin/Pidgin/2.11.0/pidgin-2.11.0.tar.bz2
...
me@lub /tmp $ tar -xjvf pidgin-2.11.0.tar.bz2
me@lub /tmp $ cd pidgin-2.11.0/
me@lub /tmp/pidgin-2.11.0 $ ./configure
...
checking whether NLS is requested... yes
./configure: line 14338: intltool-update: command not found
checking for intltool-update... no
checking for intltool-merge... no
checking for intltool-extract... no
configure: error: The intltool scripts were not found. Please install intltool.
me@lub /tmp/pidgin-2.11.0 $ sudo apt-get install intltool
...
me@lub /tmp/pidgin-2.11.0 $ ./configure
...
configure: error:
You must have GLib 2.16.0 or newer development headers installed to build.
If you have these installed already you may need to install pkg-config so
I can find them.
me@lub /tmp/pidgin-2.11.0 $ sudo apt-get install pkg-config libglib2.0-dev libgtk2.0-dev libgtkspell-dev libavahi-client-dev libavahi-glib-dev libdbus-glib-1-dev libgstreamer0.10-dev tk8.4-dev tcl8.4-dev libperl-dev network-manager-dev libmeanwhile-dev libidn11-dev libnss3-dev
...
me@lub /tmp/pidgin-2.11.0 $ ./configure --disable-screensaver --disable-vv
...
Pidgin will be installed in /usr/local/bin.
configure complete, now type 'make'
me@lub /tmp/pidgin-2.11.0 $ sudo make
...
me@lub /tmp/pidgin-2.11.0 $ sudo make install
...
me@lub /tmp/pidgin-2.11.0 $ pidgin --version
Pidgin 2.11.0 (libpurple 2.10.9)
howtogeek.com/105413 - compile and install
Create, delete, and modify local user accounts
Create, delete, and modify local groups and group memberships
userad
para añadir un usuariousermod
modifica un usuariouserdel
borrar usuariogroupdel
borrar grupogroupadd
para añadir un grupogropmod
modifica un grupo
Por cada usuario y grupo se crea una linea en /etc/passwd
y /etc/group
respectivamente
Ejemplos:
useradd -s /bin/csh -m -k /etc/skel -c "Bullwinkle J Moose" bmoose
usermod --expiredate 2014-10-30 tecmint
usermod --append --groups root,users tecmint
usermod --home /tmp tecmint
usermod --shell /bin/sh tecmint
usermod --lock tecmint
usermod --unlock tecmint
chage -E 2014-09-11 isabelle
sudo passwd kevin
chage -l me
useradd -m -s /bin/bash miusuario
usermod -Ga sudo miusuario
Sustituir la contraseña por !
en /etc/shadow
bloquea el usuario, el cual
podemos editar usando sudo vipw
Adicionalmente podemos eliminar un usuario de un grupo con sudo gpasswd -d usario grupo
Si nos olvidamos de crearle la home al usuario podemos hacerlo posteriormente
con mkhomedir_helper usuario
En /etc/environment
vienen definidas variables que afectan a todo el sistema,
como por ejemplo PATH
Otras variables de entorno:
- HOME = home del usuario actual
- USER = nick del usuario actual
- SHELL = shell actual
- PS1 = Define como se ve el prompt de la shell actual
- EDITOR = editor de texto preferido
- LD_LIBRARY_PATH = Directorios donde se encuentran las librerias
- ? = código de salida del último comando ejecutado
Escribir en la shell algo como VARIABLE=valor
no crea una varible de entorno
si no una variable shell ya que solo afectara a la shell actual.
Para que esta varaible shell se convierta en una variable de entorno es necesario
exportarla.
Podemos usar echo
para ver el contenido de una variable.
me@lub ~ $ EDITOR=nano
me@lub ~ $ export EDITOR
me@lub ~ $ echo $EDITOR
nano
printenv
muestra todas las variables de entorno y su contenido.env VAR=xxx programa
oLANGUAGE=he FOO=bar gedit
ejecuta un programa modificando las variables de entorno que va a usar.unset VAR
elimina una variableexport -n VAR
"desexporta" una variable, es decir, deja de ser variable de entorno pero sigue siendo variable shell
Al se arranca la shell bash de un usuario procesa:
/etc/profile
para leer los valores definidos para todos los usuarios- Adicionalmente
/etc/profile.d/*.sh
seran ejecutados en cualquier login ~/.bash_profile
,~/.bash_login
y~/.profile
, para leer los valores definidos para ese usuario en concreto
Otros ficheros a tener en cuenta:
/etc/bash.bashrc
valido para programas ejecutados desde la shell, pero puede
no surtir efecto con programas ejecutados desde el entorno gráfico.
Los comando ejecutados con sudo
tienen sus propias variables de entorno, indicadas
en /etc/sudoers
. Si se quiere que no se sobreescriba o pierda alguna variable
hay que editar dicho fichero para añadir una linea de este tipo:
Defaults env_keep += "http_proxy SOMEOTHERVARIABLES ANOTHERVARIABLE ETC"
wiki.debian.org - Environment variables help.ubuntu.com - Environment variables
no tengo claro a que se refiere
Podemos definir los limites por usuario en /etc/security/limits.conf
y el comando ulimit
tecmint.com - processes -> Setting Resource Limits on a Per-User Basis in Linux
creo que se repite con otros apartados sobre ps
, kill
, nice
, etc
Los ficheros de configuración estan en /etc/pam.d/
.
Cada línea de uno de estos ficheros tiene la estructura:
type control module-path module-arguments
donde, type
especifica el grupo de gestión al que el módulo estará asociado:
- auth: Le indica a la aplicación que debe pedir la identificación del usuario (nombre de usuario, contraseña, etc). Puede configurar las credenciales y otorgar privilegios.
- account: Verifica aspectos de la cuenta del usuario, tales como envejecimiento de la contraseña, control de acceso, etc.
- password: Es responsable de actualizar el token de autenticación del usuario, generalmente una contraseña.
- session: Se usa para proveer funciones antes y después de que se establece la sesión (tales como la configuración del ambiente, inicio de sesión, etc).
control
controla cómo el éxito o fracaso de un módulo afecta el proceso general de autenticación:
- required: Debe devolver éxito para que el servicio se otorgue. Si es parte de un conjunto, el resto de módulos serán ejecutados. No se le informa a la aplicación qué módulo o módulos fallaron.
- requisite: Igual a required, con la excepción de que una falla en cualquier módulo termina el stack (conjunto de módulos) y devuelve un estado, el cual se envía a la aplicación.
- optional: El módulo no es requerido. Si este es el único módulo, el estado que se envía a la aplicación puede causar una falla.
- sufficient: Si este módulo termina con éxito no hay módulos subsecuentes a ser ejecutados. Si este falla, no causa una falla general en el resto de módulos, a menos de que sea el único módulo del stack.
- include: significa que las lineas dadas por el type deben ser leidas de otro archivo
- substack: similar a includes pero los fallos o exitos del fichero incluido no provocan la salida del modulo, solo del substack.
tecmint.com - user and groups -> PAM (Pluggable Authentication Modules)
- Resolución de nombres estaticamente:
/etc/hosts
- Resolución de nombres dinamicamente: DNS
sysv-rc-conf
o update-rc.d servicio defaults
p chkconfig --level runlevel servicio on
firewalld
o iptables
, pero no se debe usar los dos a la vez.
iptables
- Tiene la configuración en
/etc/iptables/rules.v*
iptables -L
lista todas las reglas habitlitadas- Las cadenas son: INPUT, OUTPUT, FORWARD
- Las politicas son: ACCEPT, DROP, REJECT
iptables -P FORWARD DROP
define la politica DROP para la cadena FORWARD, es decir, los paquetes que no cumplan ninguna regla de FORWARD se les aplicara la politica DROPiptables -F INPUT
elimina todas las reglas de INPUT- Añadir regla:
iptables -A cadena criterio -j politica
:
Ejemplo 1: Permitir entrada y salida de trafico web
me@ubu ~ $ sudo iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
me@ubu ~ $ sudo iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
me@ubu ~ $ sudo iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
me@ubu ~ $ sudo iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Ejemplo 2: Bloquear trafico entrante desde una red espeficica
DROP todo el trafico que venga desde 192.168.1.0/24:
me@ubu ~ $ sudo iptables -I INPUT -s 192.168.1.0/24 -j DROP
DROP solo el trafico que venga de 192.168.1.0/24 por el puerto 22:
me@ubu ~ $ iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT
Ejemplo 3: Redirigir trafico entrate a otro destino
- Editamos
/etc/sysctl.conf
para ponernet.ipv4.ip_forward = 1
- Refrescamos la configuración con
sysctl -p /etc/sysctl.conf
- Redirigimos el trafico entrante por el puerto 631 a 192.168.0.10:631
me@ubu ~ $ sudo iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631
Ejemplo 4: Bloquear ping entrante
me@ubu ~ $ sudo iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP
Ejemplo 5: Deshabilitar/rehabilitar ssh logins desde dev2 a dev1
me@ubu ~ $ sudo iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT
Ejemplo 6: Permitir/prohibir a clientes NFS (de 192.168.0.0/24) motar unidades NFS4 compartidas
me@ubu ~ $ sudo iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
me@ubu ~ $ sudo iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT
Otros ejemplos:
- Insertar en la posición 2 de INPUT:
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
- BORRAR la regla 1 de INPUT:
iptables -D INPUT 1
- Mostrar las reglas con número de linea:
iptables -nL -v --line-number
- Remplaza la regla 2 de INPUT:
iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables-save > /etc/iptables/rules.v4
guardar las reglas para que se cargen al reiniciar (si iptables-persistent esta instalado)- Cargar manualmente las reglas guardadas
iptables-restore < /etc/iptables/rules.v4
FirewallD
Tiene la configuración en /usr/lib/firewalld/
y /etc/firewalld/
.
firewall-cmd --get-active-zones
nos da las zonas activas, es decir, las zonas a las que se les ha asociado "algo"
me@deb ~ $ sudo firewall-cmd --get-active-zones
me@deb ~ $ sudo firewall-cmd --zone=internal --change-interface=eth0
success
me@deb ~ $ sudo firewall-cmd --zone=external --change-interface=eth1
success
me@deb ~ $ sudo firewall-cmd --get-active-zones
internal
interfaces: eth0
external
interfaces: eth1
me@deb ~ $ sudo firewall-cmd --zone=internal --remove-interface=eth0
success
me@deb ~ $ sudo firewall-cmd --zone=external --remove-interface=eth1
success
me@deb ~ $ sudo firewall-cmd --get-active-zones
me@deb ~ $
Ejemplo 1: Permitir servicios a traves del firewall
me@ubu ~ $ sudo firewall-cmd --get-services
...
me@ubu ~ $ sudo firewall-cmd --zone=MyZone --add-service=http
me@ubu ~ $ sudo firewall-cmd --zone=MyZone --permanent --add-service=http
me@ubu ~ $ sudo firewall-cmd --zone=MyZone --add-service=https
me@ubu ~ $ sudo firewall-cmd --zone=MyZone --permanent --add-service=https
me@ubu ~ $ sudo firewall-cmd --reload
Ejemplo 2: Redirigir IP/Puerto
me@ubu ~ $ sudo firewall-cmd --zone=MyZone --query-masquerade
no
me@ubu ~ $ sudo firewall-cmd --zone=MyZone --add-masquerade
me@ubu ~ $ sudo firewall-cmd --zone=MyZone --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10
me@ubu ~ $ sudo firewall-cmd --reload
tecmint.com - iptables tecmint.com - firewalld vs iptable
sudo netstat -atup | grep LISTEN
ver network services arrancadossudo service servicio (start | stop | status)
sudo systemctl (start | stop | status) servicio
El comando básico es ip objeto comando
donde el objeto puede ser:
- link: dispositivo network
- addr: dirección del dispositivo (IP o IPv6)
- route: entrada en la tabla de ruta
- rule: regla de la base de datos de politicas de rutas
y el comando es uno de los que podemos ver, por ejemplo, haciendo ip link help
Ejemplos:
root@lub:~# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:06:7e:79 brd ff:ff:ff:ff:ff:ff
root@lub:~# ip link set eth0 down
root@lub:~# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 08:00:27:06:7e:79 brd ff:ff:ff:ff:ff:ff
root@lub:~# ip link set eth0 up
root@lub:~# ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:06:7e:79 brd ff:ff:ff:ff:ff:ff
Ejemplo 1: Rutear paquetes de una red privada a otra
Cliente 1: CentOS 7 enp0s3: 192.168.0.17/24
Router: Debian Wheezy 7.7 eth0: 192.168.0.15/24, eth1: 10.0.0.15/24
Cliente 2: openSUSE 13.2 enp0s3: 10.0.0.18/24
root@rtr:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@cl1:~# ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3
root@cl1:~# ping 10.0.0.18
root@cl2:~# ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3
root@cl2:~# ping 192.168.0.17
En openSUSE /etc/sysconfig/network-scripts/ifcfg-enp0s3
:
BOOTPROTO=static
BROADCAST=10.0.0.255
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.15
NAME=enp0s3
NETWORK=10.0.0.0
ONBOOT=yes
Ejemplo 1: Enrutar paquetes entre red interna e internet
Router: Debian Wheezy 7.7 eth0: Public IP, eth1: 10.0.0.15/24
Client: openSUSE 13.2 enp0s3: 10.0.0.18/24
root@rtr:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
root@rtr:~# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
root@rtr:~# iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
quagga
sirve para ruteo dinamico.
Router: Debian Wheezy 7.7 eth0: Public IP, router getaway 192.168.0.1, eth1: 10.0.0.15/24
Client: openSUSE 13.2 enp0s3: 10.0.0.18/24
En /etc/quagga/daemons
:
zebra=1
ripd=1
Crear ficheros de configuración
root@rtr:~# touch /etc/quagga/zebra.conf
root@rtr:~# touch /etc/quagga/ripd.conf
root@rtr:~# chown quagga:quaggavty /etc/quagga/*.conf
root@rtr:~# chmod 640 /etc/quagga/*.conf
Rellenarlos con:
service quagga restart
hostname usuario
password contraseña
Ejecutamos service quagga restart
Teniendo dos maquinas:
dev2: 192.168.0.15, 10.0.0.15
dev3: 192.168.1.1, 10.0.0.16
En cada una de ellas:
Conectamos a zebra:
root@dev2:~# telnet localhost 2601
...
DebianRouter> enable
DebianRouter# configure terminal
DebianRouter(config)# inter eth0
DebianRouter(config-if)# ip addr 192.168.0.15/24
DebianRouter(config-if)# inter eth1
DebianRouter(config-if)# ip addr 10.0.0.15/24
DebianRouter(config-if)# exit
DebianRouter(config)# exit
DebianRouter# write
Configuration saved to /etc/quagga/zebra.conf
Conectamos a RIP:
root@dev2:~# telnet localhost 2602
...
DebianRouter> enable
DebianRouter# configure terminal
DebianRouter(config)# router rip
DebianRouter(config-router)# version 2
DebianRouter(config-router)# network 192.168.0.0/24
There is a same network configuration 192.168.0.0/24
DebianRouter(config-router)# network 10.0.0.0/24
DebianRouter(config-router)# exit
DebianRouter(config)# exit
DebianRouter# write
Configuration saved to /etc/quagga/rip.conf
Al volver a conectar a zebra veremos que los routers han aprendido la ruta de una a otro
root@dev2:~# telnet localhost 2601
...
dev2> show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP
O - OSPF, I - IS-IS, B - BGP, A - Babel,
> - selected route, * - FIB route
K>* 0.0.0.0/0 via 192.168.0.1, eth0
C>* 10.0.0.0/24 is directly connected, eth1
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.0.0/24 is directly connected, eth0
R>* 192.168.1.10/24 [120/2] via 10.0.0.16, eth1, 00:00:20
root@dev3:~# telnet localhost 2601
...
dev2> show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP
O - OSPF, I - IS-IS, B - BGP, A - Babel,
> - selected route, * - FIB route
K>* 0.0.0.0/0 via 10.0.0.15, eth0
C>* 10.0.0.0/24 is directly connected, eth0
C>* 127.0.0.0/8 is directly connected, lo
K>* 169.254.0.0/16 is directly connected eth1
C>* 192.168.0.0/24 [120/2] via 10.0.0.15, eth0, 00:36:09
R>* 192.168.1.10/24 is directly connected eth1
me@deb ~ $ sudo apt-get install ntp ntpdate
...
me@deb ~ $ sudo service ntp status
● ntp.service - LSB: Start NTP daemon
Loaded: loaded (/etc/init.d/ntp)
Active: active (running) since dom 2016-07-17 13:48:50 CEST; 26s ago
CGroup: /system.slice/ntp.service
└─4357 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 121:130
...
me@deb ~ $ sudo ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+static-21.herco 158.227.98.15 2 u 21 64 1 181.480 66.936 42.859
*i2t15.i2t.ehu.e .GPS. 1 u 20 64 1 160.858 70.449 39.383
+ntp.redimadrid. 193.147.107.33 2 u 21 64 1 131.977 63.068 32.831
masip.celingest .STEP. 16 u 726 64 0 0.000 0.000 0.000
- La configuración esta en
/etc/ntp.conf
- Los logs se pueden ver con
grep ntp /var/log/syslog
- Las opciones con las que se arranca el demonio
ntpd
estan en/etc/default/ntp
Sin necesidad de tener ntpd
se puede actualizar la fecha con ntpdate pool.ntp.org
(añadir -u si se tiene isntalado ntpd
)
tecmint.com - ntp ubuntu
tecmint.com - ntp debian
pool.ntp.org
me@lub ~ $ sudo apt-get install bind9 bind9utils
...
me@lub ~ $ sudo cp /etc/bind/named.conf.options /etc/bind/named.conf.options.orig
me@lub ~ $ sudo cp /etc/bind/named.conf.local /etc/bind/named.conf.local.orig
Siendo 10.13.13.101 la ip en la red que comparte con otras máquinas, editamos /etc/bind/named.conf.options
:
options {
..
listen-on port 53 { 127.0.0.1; 10.13.13.101;};
allow-query { localhost; 10.13.13.0/24; };
recursion yes;
forwarders {
8.8.8.8;
8.8.4.4;
};
...
}
Luego editamos /etc/bind/named.conf.local
:
zone "sales.me.com." IN {
type master;
file "/var/named/sales.me.com.zone";
};
zone "13.13.10.in-addr.arpa" IN {
type master;
file "/var/named/13.13.10.in-addr.arpa.zone";
};
Chekeamos errores con sudo named-checkconf /etc/bind/named.conf
Siendo /var/named/sales.me.com.zone
:
$TTL 604800
@ IN SOA sales.me.com. root.sales.me.com. (
2016051101 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
604800) ; Negative TTL
;
@ IN NS dns.sales.me.com.
dns IN A 10.13.13.101
web1 IN A 10.13.13.104
www.web1 IN CNAME web1
y /var/named/13.13.10.in-addr.arpa.zone
:
$TTL 604800
@ IN SOA sales.me.com. root.sales.me.com. (
2016051101 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
604800) ; Minimun TTL
;
@ IN NS dns.sales.me.com.
104 IN PTR web1.sales.me.com.
Chequeamos los ficheros
me@lub ~ $ sudo named-checkzone sales.me.com /var/named/sales.me.com.zone
zone sales.me.com/IN: loaded serial 2016051101
OK
me@lub ~ $ sudo named-checkzone 0.168.192.in-addr.arpa /var/named/13.13.10.in-addr.arpa.zone
zone 0.168.192.in-addr.arpa/IN: loaded serial 2016051101
OK
Reiniciamos el servicio con sudo service bind9 restart
Editamos /etc/network/interfaces
para añadir la linea dns-nameservers 10.13.13.101
auto eth1
iface eth1 inet dhcp
dns-nameservers 10.13.13.101
Reiniciamos la red con sudo restart network-manager
(en realidad tuve que reiniciar),
y comprobamos que funciona
me@lub ~ $ host web1.sales.me.com
web1.sales.me.com has address 10.13.13.104
me@lub ~ $ host 10.13.13.104
104.13.13.10.in-addr.arpa domain name pointer web1.sales.me.com.
me@lub ~ $ host www.web1.sales.me.com
www.web1.sales.me.com is an alias for web1.sales.me.com.
web1.sales.me.com has address 10.13.13.104
tecmint.com - DNS -> Installing and Configuring a DNS Server
Instalamos con sudo apt-get install vsftpd ftp
.
La configuración esta en /etc/vsftpd.conf
, el cual editamos para habilitar
el acceso anonimo de solo lectura
anonymous_enable=YES
no_anon_password=YES
anon_root=/var/ftp/
write_enable=NO
anon_max_rate=10240
max_per_ip=5
me@lub ~ $ sudo mkdir /var/ftp
me@lub ~ $ sudo chmod 555 /var/ftp
me@lub ~ $ man -t vsftpd.conf | sudo ps2pdf - /var/ftp/vstpd.conf.pdf
me@lub ~ $ sudo service vsftpd restart
vsftpd stop/waiting
vsftpd start/running, process 4188
me@lub ~ $ ftp localhost
Connected to localhost.
220 (vsFTPd 3.0.2)
Name (localhost:me): anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-rw-rw- 1 0 0 39599 Jul 17 20:35 vstpd.conf.pdf
226 Directory send OK.
ftp> get vstpd.conf.pdf
local: vstpd.conf.pdf remote: vstpd.conf.pdf
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for vstpd.conf.pdf (39599 bytes).
226 Transfer complete.
39599 bytes received in 0.01 secs (2598.2 kB/s)
ftp> exit
221 Goodbye.
me@lub ~ $ ls vstpd.conf.pdf
vstpd.conf.pdf
Si en vez de eso queremos dar acceso a home a los usuarios del sistema haremos:
anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
local_max_rate=20480
max_per_ip=5
Donde /etc/vsftpd.chroot_list
es un fichero donde estan los nombres de los usuarios que queremos que si puedan salir de su home, por lo tanto en principio estará vacio.
Y si se usa SELinux ejecutar setsebool -P ftp_home_dir 1
Podemos añadir la linea allow_writeable_chroot=YES
a la configuración para que
no nos de problemas del tipo 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
me@lub ~ $ sudo touch ../walterwhite/walterwhite.txt
me@lub ~ $ ftp localhost
Connected to localhost.
220 (vsFTPd 3.0.2)
Name (localhost:me): walterwhite
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Jul 17 21:02 walterwhite.txt
226 Directory send OK.
ftp> get walterwhite.txt
local: walterwhite.txt remote: walterwhite.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for walterwhite.txt (0 bytes).
226 Transfer complete.
ftp> quit
221 Goodbye.
me@lub ~ $ ls walterwhite.txt
walterwhite.txt
tecmint.com - FTP benscobie.com - vsftpd
En el servidor:
me@ubu ~ $ sudo apt-get install nfs-common nfs-kernel-server
me@ubu ~ $ mkdir nfsshare
me@ubu ~ $ sudo bash -c 'echo "/home/me/nfsshare 10.13.13.101(rw,sync,no_root_squash)" >> /etc/exports'
me@ubu ~ $ sudo service nfs-kernel-server start
En el cliente:
me@lub ~ $ sudo apt-get install nfs-common
me@lub ~ $ showmount -e 10.13.13.102
Export list for 10.13.13.102:
/home/me/nfsshare 10.13.13.101
me@lub ~ $ sudo mkdir /mnt/nfsshare
me@lub ~ $ sudo mount -t nfs 10.13.13.102:/home/me/nfsshare /mnt/nfsshare
me@lub ~ $ sudo bash -c 'echo "10.13.13.102:/home/me/nfsshare /mnt/nfsshare nfs defaults 0 0" >> /etc/fstab'
tecmint.com - mount -> Mounting a NFS share on Linux
help.ubuntu.com - NFS
systemadmin.es - root squash
En el servidor:
me@ubu ~ $ sudo apt-get install samba-client samba-common cifs-utils
me@ubu ~ $ sudo nano /etc/samba/smb.conf
[share]
comment = Ubuntu File Server Share
path = /home/me/smb
browsable = yes
guest ok = yes
read only = no
create mask = 0755
me@ubu ~ $ mkdir smb
me@ubu ~ $ sudo chown nobody:nogroup smb
me@ubu ~ $ sudo service smbd restart
smbd stop/waiting
smbd start/running, process 4978
me@ubu ~ $ sudo service nmbd restart
nmbd stop/waiting
nmbd start/running, process 5015
En el cliente
me@lub ~ $ sudo apt-get install samba-client samba-common cifs-utils
me@lub ~ $ smbclient -L 10.13.13.102
WARNING: The "syslog" option is deprecated
Enter me's password:
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.3.8-Ubuntu]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
share Disk Ubuntu File Server Share
IPC$ IPC IPC Service (ubu server (Samba, Ubuntu))
Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.3.8-Ubuntu]
Server Comment
--------- -------
UBU ubu server (Samba, Ubuntu)
Workgroup Master
--------- -------
WORKGROUP
me@lub ~ $ sudo mkdir /mnt/samba
me@lub ~ $ sudo chown me:me /mnt/samba
me@lub ~ $ echo "username=samba_username" > /mnt/samba/.smbcredentials
me@lub ~ $ echo "password=samba_password" >> /mnt/samba/.smbcredential
me@lub ~ $ chmod 600 /mnt/samba/.smbcredentials
me@lub ~ $ sudo bash -c 'echo "//10.13.13.102/share /mnt/samba cifs credentials=/mnt/samba/.smbcredentials,defaults 0 0" >> /etc/fstab'
me@lub ~ $ sudo mount //10.13.13.102/share
tecmint.com - mount -> Mounting a Samba share on Linux help.ubuntu.com - samba
/etc/aliases
+newaliases
, o/etc/postfix/aliases
+postalias /etc/postfix/aliases
La 1º opción si me funciono, la seguna no.
/etc/ssh/sshd_config
condigura sshd/etc/default/ssh
permite añadir parametros para el arranque de sshdssh-keygen
genera una clave privada y pública para usar con ssh~/.ssh/authorized_keys
tiene las claves publicas autorizadasssh-copy-id
manda una clave publica a la maquina a la que queremos conectar~/.ssh/config
configura las conexiones ssh.
me@lub ~ $ mkdir .ssh
me@lub ~ $ touch .ssh/config
me@lub ~ $ chmod 700 .ssh
me@lub ~ $ chmod 600 ~/.ssh/*
me@lub ~ $ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/me/.ssh/id_rsa): /home/me/.ssh/ubuntu
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/me/.ssh/ubuntu.
Your public key has been saved in /home/me/.ssh/ubuntu.pub.
The key fingerprint is:
1e:10:a5:fd:d4:e4:91:0e:63:49:7d:db:b0:bf:81:94 me@lub
The key's randomart image is:
+--[ RSA 2048]----+
| .....oo. |
| + =+o.o |
| o ...+o..= |
| . o .Eo .|
| S . . .. |
| . . . ..|
| . o|
| . |
| |
+-----------------+
me@lub ~ $ ssh-copy-id -i .ssh/ubuntu.pub me@10.13.13.102
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
me@10.13.13.102's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'me@10.13.13.102'"
and check to make sure that only the key(s) you wanted were added.
me@lub ~ $ nano .ssh/config
Host ubuntu
HostName 10.13.13.102
IdentityFile /home/me/.ssh/ubuntu
User me
Port 22
me@lub ~ $ ssh ubuntu
Enter passphrase for key '/home/me/.ssh/ubuntu':
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.2.0-27-generic i686)
Last login: Mon Jul 18 20:49:36 2016 from 10.13.13.101
me@ubu ~ $ ls .ssh
authorized_keys
me@ubu ~ $ exit
me@lub ~ $ eval "$(ssh-agent -s)"
Agent pid 4986
me@lub ~ $ ssh-add ~/.ssh/ubuntu
me@lub ~ $ ssh-add ~/.ssh/ubuntu
Enter passphrase for /home/me/.ssh/ubuntu:
Identity added: /home/me/.ssh/ubuntu (/home/me/.ssh/ubuntu)
me@lub ~ $ ssh ubuntu
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 4.2.0-27-generic i686)
Last login: Mon Jul 18 22:14:01 2016 from 10.13.13.101
me@ubu ~ $ exit
sudo apt-get install install squid3 squidguard
tecmint.com - squid tecmint.com - squidguard
no tengo claro a que se refiere
tecmint.com - htaccess cs.cmu.edu - htaccess
- Instalamos con
sudo apt-get install mariadb-server
- Nos conectamos con
mysql -u root -p
- Securizamos con
mysql_secure_installation
- Configuramos editando
/etc/mysql/my.cnf
,/etc/my.cnf
,~/.my.cnf
- Reiniciamos con
sudo service mysql restart
tecmint.com - MariaDB 1
tecmint.com - MariaDB 2
tecmint.com - MariaDB 3
- Ejecutar
kvm-ok
para saber si podemos virutalizar bien, o solo regular. - Instalar:
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils virtinst virt-viewer ubuntu-vm-builder
- Comprobar instalación.
virsh -c qemu:///system list
- Si falla recargar el modulo:
modprobe -a kvm
sudo apt-get install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virtualization-client virtualization-platform virtualization-tools
Hacer movidas:
me@lub ~ $ sudo virsh -c qemu:///system list
Id Nombre Estado
----------------------------------------------------
me@lub ~ $ man virsh
me@lub ~ $ sudo virsh pool-define-as Spool1 dir - - - - "/mnt/personal-data/SPool1/"
Se ha definido el grupo Spool1
me@lub ~ $ sudo virsh pool-list --all
Nombre Estado Inicio automático
-------------------------------------------
Spool1 inactivo no
me@lub ~ $ sudo virsh pool-build Spool1
El grupo Spool1 ya ha sido compilado
me@lub ~ $ sudo virsh pool-start Spool1
Se ha iniciado el grupo Spool1
me@lub ~ $ sudo virsh pool-list --all
Nombre Estado Inicio automático
-------------------------------------------
Spool1 activo no
me@lub ~ $ sudo virsh pool-list --all
Nombre Estado Inicio automático
-------------------------------------------
Spool1 activo no
me@lub ~ $ sudo virsh pool-autostart Spool1
El grupo Spool1 ha sido marcado como iniciable automáticamente
me@lub ~ $ sudo virsh pool-list --all
Nombre Estado Inicio automático
-------------------------------------------
Spool1 activo si
me@lub ~ $ sudo qemu-img create -f raw /mnt/personal-data/SPool1/SVol1.img 1G
Formatting '/mnt/personal-data/SPool1/SVol1.img', fmt=raw size=1073741824
me@lub ~ $ sudo virt-install --name=cent --disk path=/mnt/personal-data/SPool1/SVol1.img --graphics spice --vcpu=1 --ram=1024 --location=/home/me/Descargas/iso/CentOS-7-x86_64-Minimal-1511.iso --network bridge=virbr0
help.ubuntu.com - KVM installation
help.ubuntu.com - KVM create guests
naturalborncoder.com - KVM part 3
naturalborncoder.com - KVM part 4
tecmint.com - KVM
vmstat
, pmap
, free
fdisk
crea, lista, borra y modifica particionesmkfs
y derivados formatean particionesmkswap
formatea particiones swap (se recomienda que sean del doble de la memoria ran si esta es menor de 2GB, e igual en caso contrario)/etc/fstab
tiene la información necesaria para que estas particiones se carguen al reiniciar.
Create, modify and delete Logical Volumes
Extend existing Logical Volumes and filesystems
Add new partitions, and logical volumes
Uno o más disco (/dev/sdb
) o una o más particiones te tipo 8e (/dev/sdb1
)
forman un volumen fisico, los cuales se agrupan en grupos de volumenes (vg
),
el cual se divide en uno o varios volumenes lógicos (mylvm
)
me@lub ~ $ sudo pvcreate /dev/sdb1
me@lub ~ $ sudo pvcreate /dev/sdc1
me@lub ~ $ sudo vgcreate -s 16M vg /dev/sdb1
me@lub ~ $ sudo vgextend vg /dev/sdc1
me@lub ~ $ sudo lvcreate -L 50G -n mylvm vg
me@lub ~ $ sudo mkfs -t ext4 /dev/vg/mylvm
me@lub ~ $ mkdir /mylvm
me@lub ~ $ sudo mount /dev/vg/mylvm /mylvm
Mostrar información:
- Volumnes fisicos:
pvs
,pvsdisplay
opvsdisplay /dev/sdX
- Grupos de volumenes:
vgs
,vgdisplay
ovgdisplay /dev/vg00
- Volumnes lógicos:
lvs
,lvdisplay
olvdisplay /dev/vg00/mylvm
Crear movidas:
- Volumnes fisicos:
ppvcreate /dev/sdX
- Grupos de volumenes:
vgcreate vg00 /dev/sdb /dev/sdc
- Volumnes lógicos:
lvcreate -n vol_projects -L 10G vg00
lvcreate -n vol_backups -l 100%FREE vg00
lvcreate -l 128 -s -n mysnap /dev/vg/mylvm
Extender volumen lógico:
me@lub ~ $ sudo lvextend -L +500M /dev/vg/mylvm
me@lub ~ $ sudo resize2fs /dev/vg/mylvm
Reducir un grupo de volumenes:
me@lub ~ $ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sdf
VG Name vg00
PV Size 10,00 MiB / not usable 2,00 MiB
Allocatable yes (but full)
PE Size 4,00 MiB
Total PE 2
Free PE 0
Allocated PE 2
PV UUID aZnPnF-QFFg-M1Wb-wvLq-9Ku1-dWB3-2zY4c7
--- Physical volume ---
PV Name /dev/sdh
VG Name vg00
PV Size 10,00 MiB / not usable 2,00 MiB
Allocatable yes (but full)
PE Size 4,00 MiB
Total PE 2
Free PE 0
Allocated PE 2
PV UUID uWEcvk-n2DU-6Nbq-RfUy-4fe8-1Ofo-BeDUDu
--- Physical volume ---
PV Name /dev/sdg
VG Name vg00
PV Size 10,00 MiB / not usable 2,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 2
Free PE 1
Allocated PE 1
PV UUID DdPUP0-nYAz-aKzz-vhpo-Rtt1-el3C-kz53AM
me@lub ~ $ sudo pvcreate /dev/sdk
Physical volume "/dev/sdk" successfully created
me@lub ~ $ sudo vgextend vg00 /dev/sdk
Volume group "vg00" successfully extended
me@lub ~ $ sudo pvmove /dev/sdg --alloc anywhere
/dev/sdg: Moved: 100,0%
me@lub ~ $ sudo vgreduce vg00 /dev/sdg
Removed "/dev/sdg" from volume group "vg00"
me@lub ~ $ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sdf
VG Name vg00
PV Size 10,00 MiB / not usable 2,00 MiB
Allocatable yes (but full)
PE Size 4,00 MiB
Total PE 2
Free PE 0
Allocated PE 2
PV UUID aZnPnF-QFFg-M1Wb-wvLq-9Ku1-dWB3-2zY4c7
--- Physical volume ---
PV Name /dev/sdh
VG Name vg00
PV Size 10,00 MiB / not usable 2,00 MiB
Allocatable yes (but full)
PE Size 4,00 MiB
Total PE 2
Free PE 0
Allocated PE 2
PV UUID uWEcvk-n2DU-6Nbq-RfUy-4fe8-1Ofo-BeDUDu
--- Physical volume ---
PV Name /dev/sdk
VG Name vg00
PV Size 100,00 MiB / not usable 4,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 24
Free PE 23
Allocated PE 1
PV UUID wUahgs-13gr-gNhq-qVmG-lrJV-Yfsy-3PMwWG
"/dev/sdg" is a new physical volume of "10,00 MiB"
--- NEW Physical volume ---
PV Name /dev/sdg
VG Name
PV Size 10,00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID DdPUP0-nYAz-aKzz-vhpo-Rtt1-el3C-kz53AM
Extender volumen logico
me@lub ~ $ sudo lvextend -r -L +50M /dev/vg00/vol_dos
Rounding size to boundary between physical extents: 52,00 MiB
Extending logical volume vol_dos to 68,00 MiB
Logical volume vol_dos successfully resized
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/mapper/vg00-vol_dos is mounted on /home/me/vol_dos; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/vg00-vol_dos is now 69632 blocks long.
me@lub ~ $ sudo lvdisplay
--- Logical volume ---
LV Path /dev/vg00/vol_uno
LV Name vol_uno
VG Name vg00
LV UUID kgAVDg-II7h-MoRM-394R-ZFox-ti7r-vhYCbb
LV Write Access read/write
LV Creation host, time lub, 2016-05-22 20:51:21 +0200
LV Status available
# open 1
LV Size 8,00 MiB
Current LE 2
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Logical volume ---
LV Path /dev/vg00/vol_dos
LV Name vol_dos
VG Name vg00
LV UUID ltBKDO-11vk-2oNN-rj1w-0RNa-ptYo-pi6FUe
LV Write Access read/write
LV Creation host, time lub, 2016-05-22 20:51:35 +0200
LV Status available
# open 1
LV Size 68,00 MiB
Current LE 17
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
Reducir volumen logico
me@lub ~ $ sudo lvreduce -r -L -50M /dev/vg00/vol_dos
Rounding size to boundary between physical extents: 48,00 MiB
Do you want to unmount "/home/me/vol_dos"? [Y|n] y
fsck de util-linux 2.20.1
/dev/mapper/vg00-vol_dos: 11/9216 files (9.1% non-contiguous), 2294/69632 blocks
resize2fs 1.42.9 (4-Feb-2014)
Resizing the filesystem on /dev/mapper/vg00-vol_dos to 20480 (1k) blocks.
The filesystem on /dev/mapper/vg00-vol_dos is now 20480 blocks long.
Reducing logical volume vol_dos to 20,00 MiB
Logical volume vol_dos successfully resized
Crear una nueva partición:
me@lub ~ $ sudo lvcreate -n vol_tres -L 10M vg00
Rounding up size to full physical extent 12,00 MiB
Logical volume "vol_tres" created
me@lub ~ $ sudo lvcreate -n vol_cuatro -l 100%FREE vg00
Logical volume "vol_cuatro" created
me@lub ~ $ sudo mkfs.ext4 /dev/vg00/vol_tres
...
Montar:
me@lub ~ $ mkdir vol_tres
me@lub ~ $ sudo blkid | grep vg00
/dev/mapper/vg00-vol_uno: UUID="ea692853-a0cc-49d1-904a-a72be6162312" TYPE="ext4"
/dev/mapper/vg00-vol_dos: UUID="be2350c7-e4ed-45a0-8ebf-9aeb2f4eb774" TYPE="ext4"
/dev/mapper/vg00-vol_tres: UUID="f026ffd3-0910-437e-aac5-fce9195ee60c" TYPE="ext4"
/dev/mapper/vg00-vol_cuatro: UUID="cb76d1aa-5ea9-4130-b19c-bc375d90fa28" TYPE="ext4"
me@lub ~ $ sudo bash -c "echo 'UUID=\"f026ffd3-0910-437e-aac5-fce9195ee60c\" /home/me/vol_tres ext4 defaults 0 2' >> /etc/fstab"
me@lub ~ $ sudo mount /home/me/vol_tres
me@lub ~ $ ls vol_tres/
lost+found
Snapshots:
Un Snapshot se va llenando con los datos originales que han sido cambiados en el volumen original, de manera que posteriormente si se quiere se podra revertir todos los cambios que se hicieron desde que se creo el Snapshots
me@lub ~ $ sudo lvcreate -l 128 -s -n mysnap /dev/vg/mylvm
me@lub ~ $ mkdir /mysnap
me@lub ~ $ sudo mount -o ro /dev/vg/mysnap /mysnap
me@lub ~ $ sudo umount /mysnap
me@lub ~ $ sudo umount /mnt/vgmount/
me@lub ~ $ lvconvert --merge /dev/vg/mysnap
El snapshot se autoborra tras el merge.
Si lo queremos borrar sin hacer el merge podemos hacer sudo lvremove /dev/vg/mysnap
tecmint.com - LVM parition
blog.timmattison.com - lvm2s
tecmint.com - LVM storage
vilecha.com - lvm2s
dd if=/dev/urandom of=/dev/sdb bs=4096
sobreescribe el disco /dev/sdbgrep -i config_dm_crypt /boot/config-$(uname -r)
comprueba el kernel tiene capacidad de encriptadlsmod | grep dm_crypt
comprueba si el modulo de encriptación esta cargadosudo modprobe dm_crypt
carga el modulo de encriptación- Añadir la linea
dm_crypt
en/etc/modules
para que se cargue el modulo al reiniciar sudo apt-get install cryptsetup
instala las herramientas necesarias
me@lub ~ $ sudo cryptsetup -y luksFormat /dev/sdg1
WARNING!
========
Sobrescribirá los datos en /dev/sdg1 de forma irrevocable.
Are you sure? (Type uppercase yes): YES
Introduzca frase contraseña:
Verify passphrase:
me@lub ~ $ sudo cryptsetup luksOpen /dev/sdg1 sdg1crypt
Introduzca una contraseña para /dev/sdg1:
me@lub ~ $ sudo mkfs.ext4 /dev/mapper/sdg1crypt
mke2fs 1.42.9 (4-Feb-2014)
Etiqueta del sistema de ficheros=
OS type: Linux
Tamaño del bloque=1024 (bitácora=0)
Tamaño del fragmento=1024 (bitácora=0)
Stride=0 blocks, Stripe width=0 blocks
1792 inodes, 7168 blocks
358 blocks (4.99%) reserved for the super user
Primer bloque de datos=1
Número máximo de bloques del sistema de ficheros=7340032
1 bloque de grupo
8192 bloques por grupo, 8192 fragmentos por grupo
1792 nodos-i por grupo
Allocating group tables: hecho
Escribiendo las tablas de nodos-i: hecho
Creating journal (1024 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho
me@lub ~ $ sudo mkdir /mnt/sdg1cryp
me@lub ~ $ sudo mount /dev/mapper/sdg1crypt /mnt/sdg1cryp/
me@lub ~ $ ls /mnt/sdg1cryp/
lost+found
me@lub ~ $ sudo umount /mnt/sdg1cryp
me@lub ~ $ sudo cryptsetup luksClose sdg1crypt
me@lub ~ $ sudo mount /dev/sdg1 /mnt/sdg1cryp/
mount: tipo de sistema de ficheros 'crypto_LUKS' desconocido
Añadir fichero de clave para que automonte en el reinicio:
me@lub ~ $ sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4
4+0 registros leídos
4+0 registros escritos
4096 bytes (4,1 kB) copiados, 0,0406153 s, 101 kB/s
me@lub ~ $ sudo chmod 0400 /root/keyfile
me@lub ~ $ sudo cryptsetup luksAddKey /dev/sdi1 /root/keyfile
Introduzca cualquier contraseña:
me@lub ~ $ sudo nano /etc/crypttab
# <target name> <source device> <key file> <options>
secret /dev/sdi1 /root/keyfile luks
me@lub ~ $ sudo nano /etc/fstab
/dev/mapper/secret /mnt/mycrypt ext4 defaults 0 0
me@lub ~ $ sudo cryptdisks_start secret
* Starting crypto disk...
* secret (starting)..
* secret (started)... [ OK ]
me@lub ~ $ sudo mount -a
me@lub ~ $ ls /mnt/mycrypt/
ejemplo.txt lost+found
Sin fichero de clave (pondriamos none
en su lugar en /etc/crypttab
)
se nos preguntaria la clave en el inicio.
Encryptado de swap:
Hacerlo con sudo ecryptfs-setup-swap
o manualmente:
me@lub ~ $ sudo swapon -s
Filename Type Size Used Priority
/dev/sda5 partition 783356 0 -1
me@lub ~ $ sudo swapoff -a
me@lub ~ $ sudo swapon -s
Filename Type Size Used Priority
me@lub ~ $ sudo nano /etc/crypttab
cswap /dev/sda5 /dev/urandom swap,cipher=aes-cbc-essiv:sha256
me@lub ~ $ sudo nano /etc/fstab
#/dev/sda5 none swap sw 0 0
/dev/mapper/cswap none swap sw 0 0
me@lub ~ $ sudo cryptdisks_start cswap
* Starting crypto disk... * cswap (starting)..
* cswap (started)... [ OK ]
me@lub ~ $ sudo swapon -a
me@lub ~ $ sudo swapon -s
Filename Type Size Used Priority
/dev/mapper/cswap partition 783356 0 -1
me@lub ~ $ sudo reboot
...
me@lub ~ $ sudo swapon -s
Filename Type Size Used Priority
/dev/mapper/cswap partition 783356 0 -1
me@lub ~ $ sudo cryptsetup status cswap
/dev/mapper/cswap is active and is in use.
type: PLAIN
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
device: /dev/sda5
offset: 0 sectors
size: 1566720 sectors
mode: read/write
tecmint.com - disk encryption
howtoforge.com - unlock luks
debian.org - trucos del sistema
/etc/fstab
swapon -s
=cat /proc/swaps
, es decir, swaps montadosswapon -a
,swapoff -a
, montar y desmotar todosmkswap
dar formato swap
Muy importante usar el tipo fd
(ver abajo), si no el raid no se montara
al iniciar el equipo aunque este configurado /etc/fstab
me@lub ~ $ sudo fdisk /dev/sdb
Orden (m para obtener ayuda): n
Tipo de partición:
p primaria (0 primaria, 0 extendida, 4 libre)
e extendido
Seleccione (predeterminado p):
Uso predeterminado de la respuesta p
Número de partición (1-4, valor predeterminado 1):
Se está utilizando el valor predeterminado 1
Primer sector (2048-20479, valor predeterminado 2048):
Se está utilizando el valor predeterminado 2048
Último sector, +sectores o +tamaño{K,M,G} (2048-20479, valor predeterminado 20479):
Se está utilizando el valor predeterminado 20479
Orden (m para obtener ayuda): t
Se ha seleccionado la partición 1
Código hexadecimal (escriba L para ver los códigos): fd
Se ha cambiado el tipo de sistema de la partición 1 por fd (Linux raid autodetect)
Orden (m para obtener ayuda): p
Disco /dev/sdd: 10 MB, 10485760 bytes
71 cabezas, 5 sectores/pista, 57 cilindros, 20480 sectores en total
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x391538bc
Dispositivo Inicio Comienzo Fin Bloques Id Sistema
/dev/sdd1 2048 20479 9216 fd Linux raid autodetect
Orden (m para obtener ayuda): w
¡Se ha modificado la tabla de particiones!
Llamando a ioctl() para volver a leer la tabla de particiones.
Se están sincronizando los discos.
me@lub ~ $ sudo fdisk /dev/sdc
...
me@lub ~ $ sudo mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sdb1 /dev/sdc1
me@lub ~ $ sudo mkfs.ext4 /dev/md0
me@lub ~ $ sudo mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 name=lub:0 UUID=d57fb9f6:0eb21ac7:d23f8d55:f4e810e3
me@lub ~ $ sudo bash -c "mdadm --detail --scan >> /etc/mdadm/mdadm.conf"
me@lub ~ $ sudo mkdir /myraid
me@lub ~ $ sudo bash -c "echo '/dev/md0 /myraid ext4 defaults 0 2' >> /etc/fstab"
Por otro lado hay que confirmar en /etc/default/mdadm
que mdadm esta configurado para
autoarrancar en el inicio.
Si un disco tiene problemas (por ejemplo sdc1
):
- Añadimos un disco de reserva
sudo mdadm /dev/md0 --add /dev/sdd1
- Marcamos el disco defectuoso
sudo mdadm /dev/md0 --fail /dev/sdc1
- Eliminamos el disco defectuoso
sudo mdadm /dev/md0 --remove /dev/sdc1
Esto hará que el disco de reserva (sdd1
) pase a ocupar el puesto del defectuoso (sdc1
).
autofs
lee /etc/auto.master
y compañia para montar dispositivos cuando estos se
demandan y desmontarlos cuando llevan x tiempo de inactividad.
Las lineas que añadamos a /etc/auto.master
tendran el siguiente aspecto:
/mmnt /etc/auto.mnt --timeout=60
Donde /mnt
es el directorio donde se colocaran los puntos de montaje inidcados
en /etc/auto.mnt
, y --timeout=60
indica que estos se desmontaran tras un minuto
sin ser usados.
Mientras que en `/etc/auto.mnt``tendremos:
nfs -fstype=nfs4 10.13.13.102:/home/me/nfsshare
Donde indicamos que se monte en nfs
(es decir /mnt/nfs
) un sistema de ficheros de tipo nfs4
que esta en 10.13.13.102:/home/me/nfsshare
Tras esto:
me@lub ~ $ sudo service autofs restart
autofs stop/waiting
autofs start/running, process 5214
me@lub ~ $ sudo mount | grep nfs
me@lub ~ $ ls /mnt/nfs
file1 file2 file3
me@lub ~ $ sudo mount | grep nfs
10.13.13.102:/home/me/nfsshare on /mnt/nfs type nfs4 (rw,addr=10.13.13.102,clientaddr=10.13.13.101)
me@lub ~ $ sleep 60
me@lub ~ $ sudo mount | grep nfs
me@lub ~ $
Otros ejemplos:
me@lub ~ $ cat /etc/auto.mnt
nfs -fstype=nfs4 10.13.13.102:/home/me/nfsshare
smb -fstype=cifs,credentials=/home/me/.smbcredentials ://10.13.13.102/share
ext -fstype=ext4 :/dev/sdk1
me@lub ~ $ tail -n 1 /etc/auto.master
/media/luks /etc/auto.luks --timeout=60
Siendo /etc/auto.luks
une script sh
ejecutable que monta dispositiovos
encriptados.
tecmint.com - NFS -> Mounting exported network shares using autofs
help.ubuntu.com - autofs
debian-administration.org - autofs
Con tune2fs -l /dev/sda1 | grep "Default mount options:"
vemos si /dev/sda1
tiene habilitado las acl
. Si no tiene acl puede ser que en /etc/fstab
use la opción noacl.
me@lub ~ $ sudo groupadd developers
me@lub ~ $ sudo useradd walterwhite
me@lub ~ $ sudo useradd saulgoodman
me@lub ~ $ sudo usermod -a -G developers walterwhite
me@lub ~ $ sudo usermod -a -G developers saulgoodman
me@lub ~ $ sudo mkdir /mnt/test
me@lub ~ $ sudo touch /mnt/test/acl.txt
me@lub ~ $ sudo chgrp -R developers /mnt/test
me@lub ~ $ sudo chmod -R 770 /mnt/test
me@lub ~ $ sudo su - walterwhite
walterwhite@lub:~$ echo "Wallter" > /mnt/test/acl.txt
walterwhite@lub:~$ exit
logout
me@lub ~ $ sudo su - saulgoodman
saulgoodman@lub:~$ echo "Saul" >> /mnt/test/acl.txt
saulgoodman@lub:~$ exit
logout
me@lub ~ $ sudo cat /mnt/test/acl.txt
Walter
Saul
me@lub ~ $ sudo getfacl /mnt/test/acl.txt
getfacl: Eliminando «/» inicial en nombres de ruta absolutos
# file: mnt/test/acl.txt
# owner: root
# group: developers
user::rwx
group::rwx
other::---
me@lub ~ $ sudo setfacl -m u:me:rw /mnt/test/acl.txt
e@lub ~ $ sudo getfacl /mnt/test/acl.txt
getfacl: Eliminando «/» inicial en nombres de ruta absolutos
# file: mnt/test/acl.txt
# owner: root
# group: developers
user::rwx
user:me:rw-
group::rwx
mask::rwx
other::---
me@lub ~ $ sudo chmod +x /mnt/test
me@lub ~ $ echo "me" >> /mnt/test/acl.txt
me@lub ~ $ cat /mnt/test/acl.txt
Walter
Saul
me
me@lub ~ $ setfacl -m d:o:r /mnt/test
me@lub ~ $ getfacl /mnt/test/
getfacl: Eliminando «/» inicial en nombres de ruta absolutos
# file: mnt/test/
# owner: root
# group: developers
user::rwx
group::rwx
other::--x
default:user::rwx
default:group::rwx
default:other::r--
Adicionalmente, con setfacl -x d:o /mnt/test
se borra una regla en concreto
y con setfacl -b /mnt/test
todas
No se muy bien a que se refiere
Para habilitar las cuotas hemos de añadir en /etc/fstab
la opciones
grpquota
para cuotas de grupo y la opción usrquota
para cuotas de usuario.
me@lub ~ $ tail -n 2 /etc/fstab
/dev/vg00/vol_uno /home/me/vol_uno ext4 defaults,grpquota 0 0
/dev/vg00/vol_dos /home/me/vol_dos ext4 defaults,usrquota 0 0
me@lub ~ $ sudo mount -a
me@lub ~ $ mount | grep vg00
/dev/mapper/vg00-vol_uno on /home/me/vol_uno type ext4 (rw,grpquota)
/dev/mapper/vg00-vol_dos on /home/me/vol_dos type ext4 (rw,usrquota)
me@lub ~ $ sudo quotacheck -avugc
quotacheck: Su núcleo probablemente soporta cuotas transaccionales pero no las está utilizando. Considere la opción de usar cuotas transaccionales para evitar tener que ejecutar quotacheck después de un apagado incorrecto.
quotacheck: Explorando /dev/mapper/vg00-vol_uno [/home/me/vol_uno] echo
quotacheck: Old user file name could not been determined. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /home/me/vol_uno/aquota.group: No existe el archivo o el directorio. Usage will not be subtracted.
quotacheck: Comprobados 2 directorios y 0 archivos.
quotacheck: Archivo antiguo no encontrado.
quotacheck: Explorando /dev/mapper/vg00-vol_dos [/home/me/vol_dos] echo
quotacheck: Cannot stat old user quota file /home/me/vol_dos/aquota.user: No existe el archivo o el directorio. Usage will not be subtracted.
quotacheck: Old group file name could not been determined. Usage will not be subtracted.
quotacheck: Comprobados 2 directorios y 0 archivos.
quotacheck: Archivo antiguo no encontrado.
me@lub ~ $ sudo quotaon -vu vol_dos/
/dev/mapper/vg00-vol_dos [/home/me/vol_dos]: user quotas activadas
me@lub ~ $ sudo quotaon -vg vol_uno/
/dev/mapper/vg00-vol_uno [/home/me/vol_uno]: group quotas activadas
me@lub ~ $ sudo edquota -u me
Cuotas de disco para user me (uid 1000):
Sist. arch. bloques blando duro inodos blando duro
/dev/mapper/vg00-vol_dos 13 900 1000 2 20 25
me@lub ~ $ cd vol_dos/
me@lub ~/vol_dos $ dd if=/dev/zero of=f2M bs=2M count=1
dd: error al escribir en «f2M»: Se ha excedido la cuota de disco
1+0 registros leídos
0+0 registros escritos
1007616 bytes (1,0 MB) copiados, 0,0914139 s, 11,0 MB/s
me@lub ~/vol_dos $ df -h .
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/vg00-vol_dos 6,9M 1019K 5,5M 16% /home/me/vol_dos
me@lub ~/vol_dos $ cd ../vol_uno/
me@lub ~/vol_uno $ setfacl -m g:developers:rwx .
me@lub ~/vol_uno $ sudo edquota -g developers
Cuotas de disco para group developers (gid 1001):
Sist. arch. bloques blando duro inodos blando duro
/dev/mapper/vg00-vol_uno 0 900 1000 0 20 25
me@lub ~/vol_uno $ sudo edquota -t
Período de gracia antes de imponer límites blandos para users:
La unidad de tiempo puede ser: días, horas, minutos, o segundos
Sist. arch. Periodo gracia bloque Periodo gracia inodo
/dev/mapper/vg00-vol_dos 7días 7días
me@lub ~/vol_uno $ sudo su walterwhite
walterwhite@lub:/home/me/vol_uno$ dd if=/dev/zero of=f2M bs=2M count=1
dd: error al escribir en «f2M»: Se ha excedido la cuota de disco
1+0 registros leídos
0+0 registros escritos
1007616 bytes (1,0 MB) copiados, 0,0779684 s, 12,9 MB/s
Un limite de 1000 bloques equivale a 1024 bytes/block * 1000 bloques = 1024000 bytes = 1 MB
tecmint.com - ACL -> Set Linux Disk Quotas on Users and Filesystems