martes, 23 de octubre de 2007

SSH (Secure Shell)

- Para saber que sesiones están abiertas:


$ who
$ w


- Para saber cuantas sesiones estan abiertas:


$who -q
$who | grep wc


- Para desconectar un usuario usamos ps:


$ps aux | grep usuario
# kill -TERM id_del_proceso

miércoles, 17 de octubre de 2007

Compresión y Descompresión de Archivos en Linux

.tar (tar)

Empaquetar
tar cvf archivo.tar /archivo/mayo/*

Desempaquetar tar xvf archivo.tar

Ver el contenido (sin extraer) tar tvf archivo.tar



.tar.gz - .tar.z - .tgz (tar con gzip)

Empaquetar y comprimir tar czvf archivo.tar.gz /archivo/mayo/*

Desempaquetar y descomprimir tar xzvf archivo.tar.gz

Ver el contenido (sin extraer)
tar tzvf archivo.tar.gz



.gz (gzip)

Comprimir
gzip -q archivo
(El archivo lo comprime y lo renombra como "archivo.gz")

Descomprimir
gzip -d archivo.gz
(El archivo lo descomprime y lo deja como "archivo")
Nota: gzip solo comprime archivos, no directorios



.bz2 (bzip2)

Comprimir
bzip2 archivo
bunzip2 archivo
(El archivo lo comprime y lo renombra como "archivo.bz2")

Descomprimir bzip2 -d archivo.bz2
bunzip2 archivo.bz2
(El archivo lo descomprime y lo deja como "archivo")
Nota: bzip2 solo comprime archivos, no directorios



.tar.bz2 (tar con bzip2)

Comprimir
tar -c archivos | bzip2 > archivo.tar.bz2

Descomprimir bzip2 -dc archivo.tar.bz2 | tar -xv
tar jvxf archivo.tar.bz2 (versiones recientes de tar)

Ver contenido bzip2 -dc archivo.tar.bz2 | tar -tv



.zip (zip)

Comprimir
zip archivo.zip /mayo/archivos

Descomprimir unzip archivo.zip

Ver contenido unzip -v archivo.zip



.lha (lha)

Comprimir
lha archivo.lha /mayo/archivos

Descomprimir lha -x archivo.lha

Ver contenido lha -v archivo.lha
lha -l archivo.lha




.zoo (zoo)
Comprimir zoo -a archivo.zoo /mayo/archivos

Descomprimir zoo -x archivo.zoo

Ver contenido zoo -v archivo.zoo
zoo -L archivo.zoo




.rar (rar)

Comprimir
rar -a archivo.rar /mayo/archivos

Descomprimir rar -x archivo.rar

Ver contenido rar -v archivo.rar
rar -l archivo.rar

lunes, 15 de octubre de 2007

Bases de Datos MYSQL

Instalación de mysql server:


aptitude install mysql-server-5.0 mysql-client-5.0


Archivo de configuracion de mysql esta en:



/etc/mysql/my.cnf


renombrar la linea

bind-address = 127.0.0.1

para poderse conectar desde cualquier lado, tambien se puede colocar la ip desde donde queremos que se conecte solamente


mysql-query-browser: cliente grafico para conetarse a las bases de datos, tambien se puede usar phpmyadmin, abrimos un navegador colocamos el nombre o la ip del servidor seguido de /phpmyadmin

El usuario root de mysql por defecto tiene la clave en blanco por lo que es primordial colocarle una inmediatamente despues de instalar mysql

Coloque una clave para el usuario root de MySQL cuando ingrese desde localhost en la consola (no recomendado) con:


/usr/local/bin/mysqladmin -u root password 'nueva-clave'


Recordemos limpiar el historial para que no quede ese ultimo comando grabado y se pueda ver la contraseña:


history -c


- Desde el mysql (Recomendado):
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> UPDATE user SET Password=PASSWORD('password') WHERE user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql>

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql>

mysql> quit
bye


Ahora que asignamos una contraseña al usuario root comprobaremos que ya no puede acceder sin la contraseña:


$mysql -u root
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)


Para poder acceder como usuario "root" haremos uso del parametro "-p" para usar validación por contraseña:


$mysql -u root -p
Enter password:

De esta manera solo podras acceder como root con una contraseña

Ahora comprobamos con esto:
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>

mysql> SELECT host,user,password FROM user;
+-----------+------+------------------+
| host | user | password |
+-----------+------+------------------+
| localhost | root | 565491d704013245 |
+-----------+------+------------------+
1 row in set (0.00 sec)

mysql>
Como podemos ver, el usuario "root" desde 'localhost' necesita contraseña (la cual se muestra cifrada) para acceder, lo cual es recomendable.


Nuevamente refrescamos los privilegios así:

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Y salimos:
mysql> quit
bye


Ahora mencionaremos una medida mas de seguridad la cual también es recomendable y consiste en cambiar el nombre por default de la cuenta administrador de mysql (root), a algun nombre diferente que pueda ser mas difi­cil de adivinar. Este cambio hara mas dificil utilizar un ataque de fuerza bruta o con diccionario a la cuenta de administrador. En tal caso el intruso tendra que adivinar el password, pero primero el nombre de la cuenta de administrador, esto se hace así­:

mysql> use mysql;
mysql> update user set user="mydbadmin" where user="root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit

Ahora como ultimo test apagaremos el servicio mysqld así­:


# /etc/rc.d/rc.mysqld stop


Y comprobaremos que lo podamos reiniciar con:


# /etc/rc.d/rc.mysqld start


Bien, ahora nuestro servidor MySQL ya está correctamente instalado y configurado con las medidas de seguridad apropiadas.

Finalmente debemos de eliminar el contenido del historial de MySQL (~/.mysql_history), en el cual todos los comandos SQL ejecutados han sido almacenados (especialmente passwords, los cuales son almacenados en texto plano).


$ cat /dev/null > ~/.mysql_history

NOTA: Como podemos ver en el comando anterior, fue ejecutado como usuario normal, ya que las tareas de cambiar contraseñas fueron hechas con un usuario normal.

*NOTA: este procedimiento deberá de ser aplicado para todas las cuentas con las que se ha estado trabajando (si es que si hicieron las pruebas con un usuario normal y con el usuario root del sistema).





Crear una cuenta de usuario en la base de datos:



mysql> GRANT ALL ON basededatos.* TO ‘user’@'hosts’ IDENTIFIED BY ‘pass’;


donde host puede ser la ip de la maquina que se va a conectar


Algunas operaciones usuales del administrador son:


SHOW DATABASES;

muestra todas las bases disponibles.


USE base1;

permite usar la base base1.


SHOW TABLES;

que muestra todas las tablas de la base activa.


DESCRIBE tabla;
SHOW CREATE TABLE tabla;
que presentan estructura de la tabla.


Crear base de Datos:


create database nombre_de_bdd


Remplazar base de datos:



~# mysql -u root -p nombre_bdd < /ruta/nueva_bdd/ bdd.sql



Realizar dump (respaldo de la bdd):


mysqldump -u root -p nombre_bdd > nombre_del_respaldo.sql


y posteriormente restaurarla con:


#mysql < /respaldomysql/nombre_del_respaldo.sql

Para sacar una copia de respaldo de todas las bases de datos con:


# mysqldump --force -p --all-databases > /respaldomysql/dump-1nov2007.sql


y posteriormente restaurarla con:


# mysql < /respaldomysql/dump-1nov2007.sql Mas ayuda en:


   


DETECCIÓN DE HARDWARE

Si es posible evite el uso de controladores binarios ya que los binarios son compilados respecto a una única arquitectura y versión del núcleo.

- Para detectar hardware con lspci y obtener un resumen:

$lspci

- Para obtener mas informacion use los indicadores -v y -vv:

$lspci -v

$lspci -vv

La utilidad lspci recupera del bus PCI alguna información, mostrando datos adicionales obtenidos de su propia base de datos de identificadores de vendedores de hardware, dispositivos, clases y subclases almacenados en /usr/sharemisc/pci.ids , podemos actualizar este archivo con:


#update-pciids


lspci solo recupera información referente a los dispositivos pci, para ver todos los dispositivos que hay en el sistema use dmesg que es un registro de todo lo que ha detectado el núcleo:

$dmesg | less

- Para encontrar dispositivos específicos como dispositivos usb use:


$dmesg | grep -i usb


- Para saber cuanta memoria física hay en el sistema use:


$dmesg | grep -i memory


- Para obtener los dispositivos IDE que estan usando el subsistema de emulación SCSI:


$dmesg | grep -i scsi


- Para ver los puertos serie use:


$dmesg | grep -i tty


- Para ver el procesador o procesadores use:


$dmesg | grep -i cpu


- También podemos usar la utilidad hwinfo para mostrar todos los dispositivos del sistema, necesitamos instalarlo primero:


$aptitude install hwinfo

$hwinfo


- Para supervisar un sistema en funcionamiento y en tiempo real viendo información relativa a la memoria física y la CPU o la identificación de unidades lea el sistema de archivos virtual que se encuentra en /proc , utilice únicamente cat, no use editores para evitar el riesgo de modificación.


- Para ver el CPU:


$cat /proc/cpuinfo


- Para ver la memoria:

$cat /proc/meninfo

- Para ver el disco duro /proc/ide/hda o hdb


- Para conocer la geometría del disco, tanto física como lógica:


$cat /proc/ide/ide0/hda/geometry


- Para identificar un disco:


$cat /proc/ide/ide0/hda/model


- Para mostrar las versiones de los controladores de todas las unidades IDE use:


$cat /proc/ide/drivers


- Para ver las capacidades de las unidades de CD :



$cat /proc/sys/dev/cdrom/info



- Para ver los dispositivos SCSI, pero no se diferencia entre los dispositivos conectados al bus SCSI y los IDE que usan el subsistema de emulación:



$cat /proc/scsi/scsi



- El siguiente comando emite el sonido del CPU en funcionamiento, no tiene aplicación practica:



$cat /proc/kcore > /dev/dsp



- Para ver todas las particiones de un disco y ver la capacidad total del disco use:


#fdisk -l



- Para mostrar la tabla de particiones de un disco determinado use:



#fdisk -l /dev/hda



- Para ver el espacio usado y el disponible del disco use:


$df -h

sábado, 13 de octubre de 2007

MAN (Paginas de manuales o man pages) E INFO (Paginas de información o info pages)

Cada programa en Linux tiene su pagina man, tienen como propósito documentar la sintaxis del comando y cada opcion con que cuenta.

Visores gráficos para las paginas de manual e información:


Konqueror: Navegador web y de archivos de KDE. Simplemente escriba:

man:algo o info:/algo , en la barra de direcciones.

Yelp: Visor de GNOME

Pinfo: Basado en ncurses para ver paginas de manual e info desde la consola.

*RTFM (read the fine man page, lee la pagina de manual adecuada).

Linux ve todas las paginas de manual de un sistema como si fueran parte de un unico manual. Este se divide en secciones:

1 Programas ejecutables o comandos del interprete de ordenes (shell).
2 Llamadas de sistema.
3 Llamadas de bibliotecas.
4 Archivos especiales (alojados normalmente en /dev)
5 Formatos de archivo y convenciones
6 Juegos
7 Miscelanea
8 Comandos de adminsitración del sistema
9 Rutinas no estandar del nucleo
n Documentacion nueva, que podria ser trasladada posteriormente
l Documentación local especifica de si sistema

Referencias a paginas numeradas de manual, ejm:

grep(1) hace referencia a man grep en la seccion 1:

$man 1 grep

Para enumerar todas las secciones de las man pages de un comando o programa:

$man -f nombre_comando_programa

Cada man pages esta dividida en secciones, generalmente son: NOMBRE, SINOPSIS, DESCRIPCION, OPCIONES, ARCHIVOS, EJEMPLOS, VEA TAMBIEN, BUGS, AUTOR/TRADUCCION

La sintaxis de los comandos es:

nombre_comando [indicadores opcionales] cualquier otro elemento necesario

Texto en negrita: Escriba esto exactamente como se muestra.
Texto en cursiva: Denota argumento, o sea se debe remplazar con el valor que quiera. Depende del visro que use puede verse subrayado o en negritas.

[-abc] : Todo entre corchetes es opcional y se puede combinar
[-a | -b | -c] : No se pueden combinar entre si
argumento... Los puntos suspensivos indican que se pueden introducir varios argumentos, los delimitantes son espacios pero a veces se usan comas.
[expresión]... pueden facilitarse varias expresiones
Las opciones cortas pueden escribirse:

-abc o -a -b -c

Las opciones largas se introducen individualmente con doble guión:

--opcion1 –opcion2 –opcion3

ENCONTRA PAGINAS DE MANUAL APROPIADAS

Ejm: quiere encontrar un programa que cuente las palabras contenidas en un archivo, use la busqueda de palabras clave con apropos o man -k:

$apropos cout words
$man -k count words


A veces la base de datos de man puede quedar corrupta, para encontrar paginas de manual perdidas intente buscar con whereis -m:

$whereis -m cat
cat:/usr/man/man1/cat.1.gz

luego leala con man:

$man /usr/man/man1/cat.1.gz

si no funciona se puede intentar reconstruir la base de datos con mandb:

#mandb

si no funciona se puede usar locate y egrep para realizar una busqueda por todo el sistema:

$locate /cat. | egrep -w 'cat\.[1-9] [a-zA-Z]*[.gz]?[_F_]' o $locate/cat.


Si el visor man no funciona se puede usar zcat y nroff:


$zcat /usr/man/man1/cat.1.gz | nroff -man | less


Ultimo recurso: leer la pagina de manual en bruto con zless:


$zless /usr/man/man1/cat.1.gz


*groff : programa para dar formato a documentos o de composición tipografica, se pueden crear multiples documentos con formatos distintos a partir de un mismo archivo origen.



CONFIGURAR MANPATH

Si desea agregar una pagina de manual que no se encuentra en la ruta normal por ejemplo /opt/man, edite /etc/manpath.conf y añada la ruta:

MANDATORY_MANPATH /opt/man

si se tienen subdirectorios se colocan en este orden:

MANDATORY_MANPATH /opt/man/local
MANDATORY_MANPATH /opt/man

primero los subdirectorios y de ultimo el directorio padre.

Para mostrar los directorios de manual actuales use:

$manpath

Para ver las PAGINAS DE INFORMACION (info pages)

$info nombre_comando_programa



IMPRIMIR PAGINAS DE MANUAL Y PAGINAS DE INFORMACIÓN


Para imprimir manpages:


$man -t nombre_comando_programa | lpr


-t se encarga de darle el formato adecuado.

- Para imprimirlo por una impresora de red:


$man -t nombre_comando_programa | lpr -P printername


Para ver las impresoras disponibles:

$lpstat -p -d

Manual de usarios de CUPS:


http://localhost:631/help

Para imprimir infopages:


$info nombre_comando_programa | lpr -o cpi=12 -o page-left=54 -o page-right=54 \ -o page-top=54 -o page-bottom=54

tambien se puede usar:


$info nombre_comando_programa | lpr


pero saldra sin formato apropiado.

Para imprimir paginas selectivas hay que exportarlas a un archivo:


$man nombre_comando_programa | col -b > archivo.txt
$info nombre_comando_programa | col -b > archivo.txt


el comando col -b elimina saltos de linea inversos o retrocesos.

- Para encontrar todos los archivos leame, de cambios, how to, guias, ejemplos, muestras y cualquier otra documentacion relevante a algun porgrama instalado use findoc, programa en python de Akkana Peck

ADMINISTRACIÓN DE PAQUETES EN DEBIAN

Página oficial de Debian:

http://www.debian.org/

Descarga de Debian Testing:

http://www.debian.org/devel/debian-installer/

Descarga de Debian Stable:

http://www.debian.org/releases/etch/debian-installer/

Espejo oficial Debian:

http://www.debian.org/mirror

Lista de mirrors oficiales:

mirrors

Guia de Instalación de Debian:

http://www.debian.org/releases/stable/installmanual

Depositos apt no oficiales:

http://www.apt-get.org

Página de búsqueda e información de paquetes Debian Individuales:

http://www.debian.org/distrib/packages


Pagina de backports:

http://www.backports.org

Actualizaciones de seguridad únicamente disponibles en:

http://www.debian.org/security

Instalación de Linux en Laptops:

http://www.linux-laptop.net/

A continuación unos tips para utilizar apt, también se puede usar aptitude

- Para añadir archivos desde un CD-ROM usar:

#apt-cdrom add

- Para identificar un disco o CD usar:

#apt-cdrom ident

- Para reinstalar un paquete sobreescribiendo los archivos usar:

#apt-get install --reinstall nombre_paquete

- Para descargar únicamente sin instalar o desempaquetar usar:

#apt-get -d install nombre_paquete

puede añadir --dry-run para probarlo antes de ejecutarlo:

#apt-get -d install nombre_paquete --dry-run

- Para eliminar paquetes:

#apt-get remove nombre_paquete

- Para probar el comando de eliminación usar:

#apt-get remove nombre_paquete --dry-run

-Para eliminar todo rastro del paquete incluyendo archivos de configuración usar:

#apt-get --purge remove nombre_paquete


INSTALAR DESDE FUENTES EN UN DEBIAN

Para compilar un programa en vez de instalar los binarios, o para ejecutar un paquete inestable en uno estable y recompilarlo asegurara que se construya con las dependencias correctas, para esto usar apt-get source con ayuda de dpkg, primero descargue las bibliotecas y cabeceras dependientes en el directorio donde se quiere construir el paquete:


#cd /usr/src
#apt-get build-dep nombre_paquete


Luego construir el paquete con:

#apt-get -b source paquete

Luego instalarlo con:

#dpkg - i nombre_paquete.deb

Una alternativa a construir el paquete es el uso de backports que son binarios de Debian compilados apropiadamente preparados para su uso, tambien se puede instalar un programa que no se encuentre en los repositorios construyendo un deb usando chekinstall, utilidad que crea paquetes RPM, deb y slackware.


ACTUALIZACIÓN DE PAQUETES

No existe comando independiente para actualizar paquetes, apt-get install busca siempre la versión mas reciente.

- Para actualizar un sistema Debian usar:

#apt-get update (actualiza la lsita de paquetes)

- Para actualizar todos los paquetes instalados sin eliminar ningún paquete para resolver dependencias usar:

#apt-get -u upgrade (realizar siempre primero el update)

- Para actualizar todos los paquetes (incluso la versión) que hay instalados, eliminando o instalando paquetes según se necesite para satisfacer todas las dependencias usar:

#apt-get -u dist-upgrade

El indicador -u le da una oportunidad de revisar todos los cambios antes de que se produzcan.


DETERMINAR QUE HAY INSTALADO EN SU SISTEMA DEBIAN


Usar las opciones de consulta de dpkg para obtener una lista de todos los paquetes instalados y redirigirla a un archivo de la siguiente forma:

$dpkg -l | tee dpkglist

- Para verificar si un paquete en particular esta instalado:

$dpkg -l nombre_paquete

- Para encontrar únicamente paquetes ajustados a un término de búsqueda usar:

$dpkg -l | grep nombre_paquete

- Para enumerar los archivos que pertenecen a un paquete use:

$dpkg -L nombre_paquete

- Para saber a que paquete pertenece un archivo use:

$dpkg -S nombre_archivo

- Para obtener toda la información relativa a un paquete usar:

$dpkg -s nombre_paquete


INSTALAR PROGRAMAS A PARTIR DEL CODIGO FUENTE

Para crear una lista de archivos de una instalación fuente para facilitar la desinstalación:


#find / | grep -v -e ^/proc/ -e ^/tmp/ -e ^/dev/ > nombre_paquet_preinstall.list

Compile e instale el nuevo programa, generando a continuacion la lista posterior a la instalación:


#find / | grep -v -e ^/proc/ -e ^/tmp/ -e ^/dev/ > nombre_paquet_postnstall.list

la opcion -v de grep activa las explicaciones detalladas -e ^ significa que debe excluirse el directorio a continuación.


A continuación cree la lista de archivos instalados por el paquete haciendo un diff de las 2 listas previas:

$diff nombre_paquet_preinstall.list nombre_paquet_postnstall.list > paquet_instalado.list

- Para instalar desde el codigo fuente paso por paso desempaquete el tarball porcesando a continuacion el programa con configure, make, make install


#cd /usr/src/descargas
#tar zxvf paquete.tar.gz
#cd paquete
#ls -l
#less README
#less INFO
#./configure --help
#./configure
#make
#make install | tee paquete_makeinstall

El ultimo comando almacena el resultado de la instalacion en el archivo de texto paquete_makeinstall

Otros programas estan archivados con bunzip2 en lugar de gzip para desempaquetarlo use:

#tar jxvf paquete.tar.bz2

- Para desinstalar un programa instalado a partir de los fuentes use:

#make uninstall

solo funcionara en caso que el autor del programa haya incluido la opcion make uninstall, tambien se puede redirigir la salida del comando hacia un archivo para verificar que se desinstalo todo.


USO DE CHECKINSTALL PARA CREAR PAQUETES A PARTIR DE LOS FUENTES

Checkinstall
aloja los archivos README y el resto de la documentacion del programa en el directorio doc-pak.

#mkdir /doc-pak
#tar zxvf paquete.tar.gz
#cd paquete
#./configure
#make
#checkinstall -D

Se construira e instalara un paquete .deb, se puede verificar con:


$dpkg -l | grep paquete


para crear un paquete slackware:


#checkinstall -S


para crear un paquete RPM:


#checkinstall -R


Para eliminar un paquete de checkinstall simplemente use el administrador de paquetes de su sistema.