divendres, 29 de maig de 2015

Bash I/O Redirections

Introducció:

L'objectiu d'aquest article es ajudar a comprendre com funcionen les redireccions d'entrada/eixida en bash i com es poden utilitzar amb bash. Si disposem de la versio 4.0 o posterior de bash, amb la següent comanda podem veure els descriptor de Linux associats a un pseudoterminal virtual /dev/pts/13.
lsof +f g -ap $BASHPID -d 0,1,2
COMMAND   PID USER   FD   TYPE FILE-FLAG DEVICE SIZE/OFF NODE NAME
bash    12135 root    0u   CHR     RW,LG 136,13      0t0   16 /dev/pts/13
bash    12135 root    1u   CHR     RW,LG 136,13      0t0   16 /dev/pts/13
bash    12135 root    2u   CHR     RW,LG 136,13      0t0   16 /dev/pts/13
Ací teniu un diagrama de com funciona un pseudoterminal en linux. La funció d'aquest article no es aprofundir sobre aquesta matèria sino ajudar a entendre millor el mecanisme.

El descriptors amb linux tenim el 0 per a l'entrada estandar, l'1 per a la eixida estandar i el 2 per a l'eixida d'errors. Quan es realitza un forc del process els descriptors s'hereden.
                  ---       +-----------------------+
standard input   ( 0 ) ---->| /dev/pts/13           |
                  ---       +-----------------------+

                  ---       +-----------------------+
standard output  ( 1 ) ---->| /dev/pts/13           |
                  ---       +-----------------------+

                  ---       +-----------------------+
standard error   ( 2 ) ---->| /dev/pts/13           |
                  ---       +-----------------------+

Redirigint l'eixida estandar

Les redireccions de entrada/eixida ens permeten redirigir la eixida estandar a un altre fitxer diferent de la pantalla. En el seguüent cas utilitzant l'operador ">" redirigim l'eixida estandar d'un programa a un fitxer de text.
ls -l / > output.txt
En aquest cas la distribucio dels descriptors queda com segueix
                  ---       +-----------------------+
standard input   ( 0 ) ---->| /dev/pts/13           |
                  ---       +-----------------------+

                  ---       +-----------------------+
standard output  ( 1 ) ---->| output.txt            |
                  ---       +-----------------------+

                  ---       +-----------------------+
standard error   ( 2 ) ---->| /dev/pts/13           |
                  ---       +-----------------------+
Per defecte l'operador de redirecció rescriu el fitxer desde l'inici. Açò es pot utilitzar per buidar un fitxer.
> output.txt
Si la nostra intencio es afegir mes informació a un fitxer utilitzem el doble operador ">>" per afegir la informació al final del fitxer anterior.
ls -l /etc >> output.txt
Si provoquem un error i redirigim l'eixida estandar a un fitxer no aconseguirem res ja que els errors utilitzen l'eixida d'errors que explicarem en el següent apartat.
ls -l /donotexist > output.txt
ls: cannot access /donotexist: No such file or directory

Redirigint l'eixida d'error

Per a redirigir errors hem de redirigir el discriptor numero 2 a un fitxer. La manera de realitzar-ho es com segueix:
ls -l /donotexists 2> error.txt
En aquest cas la distribucio dels descriptors queda com segueix:
                  ---       +-----------------------+
standard input   ( 0 ) ---->| /dev/pts/13           |
                  ---       +-----------------------+

                  ---       +-----------------------+
standard output  ( 1 ) ---->| /dev/pts/13           |
                  ---       +-----------------------+

                  ---       +-----------------------+
standard error   ( 2 ) ---->| error.txt             |
                  ---       +-----------------------+

Redirigit l'eixida estandar i l'eixida d'error

Per a realitzar la redirecció d'ambdós descriptor s'ha realitzat tradicionalment de la següent manera.
ls -l / > output.txt 2>&1
En aquest cas la distribucio dels descriptors queda com segueix:
                  ---        +-----------------------+
standard input   ( 0 ) ----->| /dev/pts/13           |
                  ---        +-----------------------+

                  ---        +-----------------------+
standard output  ( 1 ) ----->| output.txt            |
                  ---        +-----------------------+
                         
                  ---        +-----------------------+
standard error   ( 2 ) ----->| output.txt            |
                  ---        +-----------------------+
L'ordre es important, si ens equivoquem amb l'ordre
ls -l / 2>&1 > output.txt
El que provocarem es que l'eixida d'error segueixca vinculada a la pantalla, ja que quan copiarem el descriptor d'error amb el valor del descriptor d'eixida aquest encara tenia el valor inicial del terminal.
                  ---        +-----------------------+
standard input   ( 0 ) ----->| /dev/pts/13           |
                  ---        +-----------------------+

                  ---        +-----------------------+
standard output  ( 1 ) ----->| output.txt            |
                  ---        +-----------------------+
                         
                  ---        +-----------------------+
standard error   ( 2 ) ----->| /dev/pts/13           |
                  ---        +-----------------------+
En versions més actuals de bash, existeix l'abreviatura &>. Aquesta es una forma mes fàcil i comoda de realitzar la redireccio de l'entrada estandar i l'eixida a un mateix fitxer.
ls -l / &> output.txt
També podem utilitzar l'operador per a afegir com anteriorment.
ls -l / &>> output.txt

Enllaços

http://wiki.bash-hackers.org/howto/redirection_tutorial
http://sourceforge.net/projects/linuxcommand/files/TLCL/13.07/TLCL-13.07.pdf/download
http://en.wikipedia.org/wiki/Pseudoterminal

dilluns, 18 de maig de 2015

Centos 7, Configuring Simple HTTP Repository using installation DVD

Introducció

Per a crear un repositori HTTP primer necessitem obtenir els paquets. En el nostre cas utilitzarem el DVD d'instal·lació com a font dels paquets, i l'utilitzarem de repositori HTTP per a diferents sistemes que no disposen de connexio a Internet.

Montatge de la ISO

El primer que farem serà montar el cdrom o la iso, depenent de quin siga el nostre cas. Per montar el cdrom executarem:
mount /dev/cdrom /media
Per montar la iso executarem:
mount -o loop Centos-7.0-1406-x86_64-DVD.iso /media

Configuració del Servidor Web

Per a la configuració del repositori instal·larem Apache.
yum install httpd
També instal·larem elinks per a testejar que el servidor funciona correctament una volta instal·lat.
yum install elinks
Per a arrancar el dimoni de l'Apache amb systemd utilitzarem la següent comanda:
sudo systemctl start httpd
Si ha arrancant correctament amb la següent comanda veure els detalls relatius al dimoni.
sudo systemctl status httpd
Comprovem que esta funcionant i que mostra la pàgina web inicial.
elinks http://127.0.0.1
Si funciona i tenim accés, llavors configurem l'Apache per a que s'execute automàticament durant l'arranc.
sudo systemctl enable httpd
Configurem el firewall per a que siga accessible desde fora de la maquina virtual o en una xarxa local.
firewall-cmd --permanent --add-port=80/tcp
success
firewall-cmd --reload
success
Comprobem des d'una maquina virtual en la mateixa xarxa local que funcione. Ho podem probar amb qualsevol navegador. Suposarem que la maquina te la ip 192.168.1.101 i esta correctament configurada una xarxa local 192.168.1.0/24.
elinks http://192.168.1.101

Configuració del repositori

Creem el següent directori dins de l'estructura de directoris d'Apache.
mkdir /var/www/html/inst
Copiem les dades de la ISO dins del directori. Utilitzarem l'opció -r per a que siga recursiu i la opció -a per a que mantinga permisos i propietaris de tots els fitxers, així com els seus atributs.
cp -ar /media/. /var/www/html/inst/
Apliquem els contextos de SELinux als nous directoris.
chcon -R --reference=/var/www/html/ /var/www/html/inst/
I reiniciem l'Apache per a que aplique la configuració i el nou recurs estiga disponible.
sudo systemctl restart httpd

dilluns, 4 de maig de 2015

Centos 7 Configure Local CDROM repository

Per a crear un nou repositori hem d'editar la configuracio del yum. En el nostre cas configurarem el cdrom com a repositori per a un sistema que no dispose de connexió a Internet. El primer que farem serà montar el cdrom o la iso, depenent de quin siga el nostre cas. Per montar el cdrom executarem:
mount /dev/cdrom /media
Per montar la iso executarem:
mount -o loop Centos-7.0-1406-x86_64-DVD.iso /media
Una volta tenim el cdrom montat configurem un repositori en /etc/yum.repos.d/. Creem el fitxer local.repo i l'editem.
vi /etc/yum.repos.d/local.repo
Aquesta serà la configuració del repositori.
[LocalRepo]
name=Local Repository
baseurl=file:///media
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Una volta configurat comprovem quins repositoris tenim activats.
yum repolist all
Tots els que apareguen com a enabled i no siguen LocalRepo els deshabilitem. Només hem de tenir habilitat el local.repo. Configurem tots els repositoris com a deshabilitats, nomes hem de posar enabled=0 en el repositori en qüestió. Revisem tots els fitxers de /etc/yum.repos.d/ i afegim el enabled=0.

Per exemple:
...
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=0
...
Arribats a aquest punt ja podem instal·lar paquets!

Enllaços:

http://www.itzgeek.com/how-tos/linux/centos-how-tos/create-local-yum-repository-on-centos-7-rhel-7-using-dvd.html

Recover root password on RHEL/Centos 7

Introducció:

En aquest article farem un reset d'un password de root sobre una Centos7/RHEL 7. El resum del procés es el següent:
  • Editar el menu d'arranc de GRUB2 per entrar en single user mode
  • Remontar la partició / per permetre lectura/escritura
  • Canviar el password de root
  • Forçar un relabeling de SElinux despres del reinici
  • Reiniciar el sistema

Procés:

Una volta entenem el procés passarem a l'acció. Per a canviar el password amb Centos7/RHEL7 procedirem de la següent forma:

Arranquem la màquina, i quan apareix el menu de Grub2, cliquem "e", damunt de la opció de boot per defecte.


Una volta presionem la lletra apareixerà la següent pantalla, en la que hem d'identificar rhgb quiet


Una volta identificat rhgb quiet, hem de canviar-ho per init=/bin/bash. I presionar Ctrl+X per a que s'apliquen els canvis. El sistema arrancara en single mode.


Ja tenim access a la consola del single mode.


Una volta tenim accés a la màquina tenim la partició montada com a ro (Read Only). Com pots veure a la captura de pantalla de baix.
mount | grep systevg-slash



Remontem la partició per a poder escriure i llegir.
mount -o remount,rw /
Si tornem a revisar les opcions amb les que esta montada la partició veurem que ja esta montada correctament.
mount | grep systevg-slash



Ara ja podem executar la comanda passwd per canviar el password the root.
passwd



Per a que el canvi funcione, necessitem fer un relabel dels contextos de selinux. Si no realitzem aquest canvi no serem capaços de fer login amb el nou password. Per a realitzar el relabel durant el reinici executem la següent comanda:
touch /.autorelabel



Per últim reiniciem el sistema. Per a reiniciar el sistema executem:
exec /sbin/init



Enllaços

http://linuxconfig.org/recover-a-forgotten-root-password-on-redhat-7-linux-selinux-system
http://www.tecmint.com/reset-forgotten-root-password-in-centos-7-rhel-7/