Configuración de un entorno de trabajo con GIT

Cuando emprendemos el desarrollo de un sistema o de un sitio web, en el que participan dos o más personas, tenemos que organizarnos muy bien para evitar destruir con nuestros cambios el trabajo previo de los compañeros de proyecto. A pesar del nivel de sincronía y organización que se pueda alcanzar, frecuentemente surgen conflictos o dudas al trabajar en aspectos del proyecto muy cercanos entre si, por ejemplo cuando un desarrollador requiere modificar un archivo de código sobre el que viene trabajando un colega. La situación se complica cuando los involucrados no comparten un mismo entorno físico, por lo que el chat, correo o teléfono no mejoran el asunto. Es por ello que en estas circunstancias hay que recurrir a lo que se denomina un control de versiones, de los que existen varios, pero uno destaca especialmente por su origen: el GIT.

¿Qué es el GIT?

Git (pronunciado "guit") es un software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente. Al principio, Git se pensó como un motor de bajo nivel sobre el cual otros pudieran escribir la interfaz de usuario o front end como Cogito o StGIT. Sin embargo, Git se ha convertido desde entonces en un sistema de control de versiones con funcionalidad plena. Hay algunos proyectos de mucha relevancia que ya usan Git, en particular, el grupo de programación del núcleo Linux. (Wikipedia, 2017)

Manos a la obra

A continuación describiremos los pasos básicos para la configuración de un entorno de desarrollo conformado por al menos dos desarrolladores regido por el sistema de control de versiones GIT. Sin embargo esta metodología también sera aplicable para un programador solitario, ya que un control de versiones entre sus bondades ofrece un historial de versiones, por lo que se puede regresar a estados previos del desarrollo, en el caso de que los cambios efectuados no nos satisfagan.

En el servidor

Instalamos git. En el caso de Debian o Ubuntu

TERMINAL
  1. apt-get install git

En el caso de Fedora

TERMINAL
  1. yum install git-core

Crearemos el usuario git para que el repositorio principal se ubique en su directorio de trabajo, sin embargo se puede utilizar un usuario existente o crear uno distinto.

TERMINAL
  1. useradd git
  2. passwd git

Ahora creamos y configuramos el directorio donde se alojara el repositorio

TERMINAL
  1. cd ~
  2. mkdir repositorio.git
  3. cd repositorio.git
  4. git init --bare --shared
  5. mv hooks/post-update.sample hooks/post-update

Podemos usar el comportamiento por defecto del servicio git al momento de procesar la información proveniente de los clientes, o cambiarla por un esquema básico que se detalla a continuación:

Editamos el archivo hooks/post-update

TERMINAL
  1. nano hooks/post-update

Y realizamos el siguiente cambio:

ARCHIVO hooks/post-update
  1. # El parámetro $1 del script es el nombre del branch actualizado
  2. # Comparamos con master para actualizar el entorno de producción
  3. # y con test para actualizar el entorno de pruebas
  4. case " $1 " in
  5. *'refs/heads/master'*)
  6. echo "Pulling producción"
  7. unset GIT_DIR
  8. cd /var/www/repositorio || exit
  9. git pull origin master
  10. ;;
  11. esac
  12. case " $1 " in
  13. *'refs/heads/test'*)
  14. echo "Pulling pre-producción"
  15. unset GIT_DIR
  16. cd /var/www/repositorio-test || exit
  17. git pull origin test
  18. ;;
  19. esac
  20. exec git-update-server-info

En el cliente del desarrollador líder

Procedemos a configurar el repositorio del desarrollador líder, aquel que tiene la última palabra cuando surge un conflicto con los cambios que el equipo de desarrollo actualiza sobre el repositorio principal

TERMINAL
  1. apt-get install git
  2. cd ~
  3. mkdir repositorio.git
  4. cd repositorio.git
  5. git init
  6. git remote add origin usuario@servidor-ip:/home/usuario/repositorio.git

Ahora creamos o copiamos un archivo cualquiera en esta carpeta, por ejemplo:

TERMINAL
  1. touch prueba

Procedemos a hacer la sincronización inicial

TERMINAL
  1. git add *
  2. git commit -m “Subida inicial”
  3. git push origin master

En el cliente de los otros desarrolladores

Esta sera la configuración tipo a seguir por el resto del equipo de desarrollo

TERMINAL
  1. apt-get install git
  2. cd ~
  3. mkdir repositorio.git
  4. cd repositorio.git
  5. git init
  6. git remote add origin usuario@servidor-ip:/home/usuario/repositorio.git
  7. git pull origin master

En el servidor Web

Hasta ahora hemos configurado lo relativo a los repositorios, los pasos que se listan a continuación están enfocados hacia la construcción de un entorno adecuado para el desarrollo de un proyecto Web. El objetivo es que al momento de actualizar cambios hacia el repositorio central, estos también se reflejen en el servidor Web del ambiente de desarrollo de nuestro proyecto.

TERMINAL
  1. sudo usermod -G git www-data
  2. cd /var/www
  3. sudo mkdir repositorio
  4. sudo chown -R git:git repositorio
  5. sudo chmod 775 repositorio
  6. cd repositorio
  7. git init

En caso de tener un repositorio de pruebas, dentro del ambiente de desarrollo, se siguen estos pasos adicionales:

TERMINAL
  1. sudo usermod -G git www-data
  2. cd /var/www
  3. sudo mkdir repositorio-test
  4. sudo chown -R git:git repositorio-test
  5. sudo chmod 775 repositorio-test
  6. cd repositorio-test
  7. git init


REFERENCIA

Wikipedia. (18 de abril de 2017). Git. Recuperado de: https://es.wikipedia.org/wiki/Git



Linux: Comandos usados en la manipulación de archivos y directorios (Parte 2)


Continuación de la recopilación de los principales comandos de Linux para el manejo de archivos y directorios:

TERMINAL
  1. cp arch_1 arch_2

Copia el archivo 'arch_1' colocándole el nombre 'arch_2'

TERMINAL
  1. cp dir_1/* .

Copia todos los archivos del directorio 'dir_1' dentro del directorio de trabajo actual. No incluye en la operación los subdirectorios

TERMINAL
  1. cp -r dir_1/* .

Copia todos los archivos del directorio 'dir_1' dentro del directorio de trabajo actual. Incluye en la operación los subdirectorios

TERMINAL
  1. cp -a dir_1/dir_2 .

Copia el directorio 'dir_1' dentro del directorio actual de trabajo

TERMINAL
  1. ln -s arch_1 link_1

Crea un enlace simbólico, con el nombre 'link_1', del archivo 'arch_1'

TERMINAL
  1. ln arch_1 link_1

Crea un enlace físico, con el nombre 'link_1', del archivo 'arch_1'

TERMINAL
  1. touch -t 0882250990 arch_1

Modifica el tiempo real (tiempo de creación) de un archivo o directorio. Si no existe el archivo 'arch_1' crea uno vació con ese nombre

TERMINAL
  1. file arch_1

Muestra por pantalla el contenido del archivo 'arch_1'

TERMINAL
  1. diff arch_1 arch_2

Muestra las diferencias entre los archivos 'arch_1' y 'arch_2'

TERMINAL
  1. tar -cvf tar_1.tar dir_1

Empaqueta el directorio 'dir_1' en el archivo 'tar_1.tar'

TERMINAL
  1. tar -xvf tar_1.tar

Desempaqueta el archivo 'mitar.tar'

TERMINAL
  1. whereis programa_1

Muestra la ubicación del programa_1

TERMINAL
  1. file arch_1

Describe el tipo del archivo 'arch_1', por ejemplo: imagen, de texto, etc.
Nota: file identifica el tipo de archivo aún si su extensión no es la correcta

TERMINAL
  1. whatis comando_1

Muestra la descripción de comando_1

TERMINAL
  1. wc -w arch_1

Cuenta las palabras en el archivo de texto 'arch_1'

TERMINAL
  1. wc -l arch_1

Cuenta las lineas en el archivo de texto 'arch_1'

TERMINAL
  1. wc -m arch_1

Cuenta los caracteres en el archivo de texto 'arch_1'

TERMINAL
  1. wc -c arch_1

Cuenta los bytes en el archivo de texto 'arch_1'

TERMINAL
  1. head arch_1

Muestra las primeras 10 líneas del archivo 'arch_1'

TERMINAL
  1. tail arch_1

Muestra las últimas 10 líneas del archivo 'arch_1'

 

Linux: Comandos usados en la manipulación de archivos y directorios (Parte 1)


A continuación les dejo una recopilación de los principales comandos de Linux para el manejo de archivos y directorios:

TERMINAL
  1. cd /home

Se posiciona en el directorio home

TERMINAL
  1. cd ..

Retrocede un nivel en el árbol de directorios

TERMINAL
  1. cd ../..

Retrocede 2 niveles en el árbol de directorios

TERMINAL
  1. cd

Se posiciona en el directorio raíz

TERMINAL
  1. cd –

Se posiciona en el directorio padre

TERMINAL
  1. pwd

Muestra la ruta del directorio de trabajo o actual

TERMINAL
  1. ls

Muestra los archivos del directorio de trabajo o actual

TERMINAL
  1. ls -a

Muestra los archivos ocultos en el directorio de trabajo o actual

TERMINAL
  1. ls -l

Muestra los detalles de archivos y directorios de la ruta actual

TERMINAL
  1. ls *[0-9]*

Muestra los archivos y directorios que contienen números, en la ruta actual

TERMINAL
  1. tree

Muestra los archivos y directorios en forma de árbol a partir de la ruta actual

TERMINAL
  1. mkdir dir_1

Crea un directorio con nombre ‘dir_1’

TERMINAL
  1. mkdir dir_1 dir_2

Crea dos directorios simultáneamente, con los nombres 'dir_1' y 'dir_2'

TERMINAL
  1. mkdir -p tmp/dir_1/dir_2

Crea un árbol de directorios, o una secuencia de directorios anidados

TERMINAL
  1. rm -f arch_1

Borra el archivo llamado ‘arch_1’

TERMINAL
  1. rmdir dir_1

Borra el directorio llamado ‘dir_1’

TERMINAL
  1. rm -rf dir_1

Elimina un directorio llamado ‘dir_1’ con su contenido

TERMINAL
  1. rm -rf dir_1 dir_2

Borra los directorios 'dir_1' y 'dir_2' junto con su contenido

TERMINAL
  1. mv dir_1 dir_nuevo

Renombra o mueve un archivo o directorio

 

Debian: Conocer la versión del sistema desde la consola

Disponemos de tres métodos para conocer la versión del sistema operativo, utilizando el terminal

Primer método:

TERMINAL
  1. cat /etc/debian_version

Segundo método:

Instalar el paquete lsb, como root:

TERMINAL
  1. aptitude install lsb

Y luego:

TERMINAL
  1. lsb_release -a

Tercer método:

TERMINAL
  1. cat /etc/apt/sources.list

Y fijarse que versión aparece en los repositorios.



Debian: Cambiar la hora en el sistema y la BIOS

Para cambiar la hora y fecha del sistema, debemos ingresar como root y ejecutar el siguiente comando en un terminal:

TERMINAL
  1. date --set "2012-06-15 10:20"

Sin embargo, el sistema operativo cada cierto tiempo chequeara la hora y fecha guardadas en la BIOS y actualizara con estos valores la del sistema. Para evitarlo podemos configurar la fecha y hora en la BIOS, mediante la siguiente instrucción:

TERMINAL
  1. hwclock --set --date="2012-06-15 10:20"


Debian: Migración y respaldo de usuarios


Para migrar el listado de un usuarios de un equipo a otro, o simplemente para respaldarlo, tenemos dos opciones:


Primer Método

Ingresamos al sistema como root y creamos una carpeta para respaldar los archivos:

TERMINAL
  1. mkdir /root/backup/

Respaldamos o sacamos una copia de los archivos del sistema relativos a los usuarios, teniendo en consideración que por tratarse de Debian (o sus derivaciones) tomaremos como referencia el valor 1000, si fuera RedHat o familiares tomaremos como valor 500:

TERMINAL
  1. awk -F: '($3>=1000) && ($3!=65534)' /etc/passwd > /root/backup/passwd.backup
  2. awk -F: '($3>=1000) && ($3!=65534)' /etc/group > /root/backup/group.backup
  3. awk -F: '($3>=1000) && ($3!=65534) {print $1}' /etc/passwd | tee - |egrep -f - /etc/shadow > /root/backup/shadow.backup
  4. cp /etc/gshadow /root/backup/gshadow.backup
  5. tar -zcvpf /root/backup/home.tar.gz /home
  6. tar -zcvpf /root/backup/mail.tar.gz /var/spool/mail

Ahora hay que copiar el contenido de /root/backup/ en el nuevo sistema, un camino es:

TERMINAL
  1. scp -r /root/backup/ root@10.0.0.2:/root/

Segundo Método

Ingresamos al sistema como root, creamos una carpeta y respaldamos los archivos involucrados en el proceso para poder reversar en caso de error:

TERMINAL
  1. mkdir /root/backup-nuevo/
  2. cp /etc/passwd /etc/shadow /etc/group /etc/gshadow /root/backup-nuevo/

Ahora agregamos la información de los archivos del sistema original en los archivos de configuración del nuevo sistema y copiamos el contenido del respaldo de /home y /var/spool/mail:

TERMINAL
  1. cd /root/backup/
  2. cat passwd.backup >> /etc/passwd
  3. cat group.backup >> /etc/group
  4. cat shadow.backup >> /etc/shadow
  5. cat gshadow.backup >> /etc/gshadow
  6. cd /
  7. tar -zxvf /root/backup/home.tar.gz
  8. tar -zxvf /root/backup/mail.tar.gz

Por último reiniciamos el sistema:

TERMINAL
  1. shutdown -r now


Ubuntu: Cambiar la ubicación de los botones maximizar, minimizar y cerrar



Para cambiar la ubicación de los botones de maximizar, minimizar y cerrar, introduce en el terminal el siguiente comando:

TERMINAL
  1. gconf-editor

Ir a 'apps / metacity / general / button_layout'

  • Si se quieren a la izquierda colocar close,minimize,maximize:
  • A la derecha :minimize,maximize,close
  • Como se aprecia el símbolo ':' determina a que lado de la ventana se ubican los elementos.
  • Otros elementos permitidos son: menu y spacer.


Ubuntu: Evitar la carga automática de dispositivos USB


Si te incomoda la aparición de una ventana cada vez que introduces un dispositivo USB y prefieres tener el control de lo que se despliega en pantalla, puedes evitar la carga automática de estos, mediante la ejecución del siguiente comando en una terminal:

TERMINAL
  1. gconf-editor

Ir a 'apps / nautilus / preferences'

  •   Desmarcar 'media_automount'
  •   Desmarcar 'media_automount_open'

 

Ubuntu: Unión y manipulación de PDFs

Mediante esta pequeña, pero potente utilidad podrás manipular archivos PDFs. Entre sus funciones figuran: unir varios en único archivo, eliminar o agregar paginas a un documento, o cifrar su contenido


Instalación


TERMINAL
  1. sudo aptitude install pdftk

Uso


TERMINAL
  1. pdftk archivo1.pdf archivo2.pdf cat output salida.pdf

o también

TERMINAL
  1. pdftk X=archivo1.pdf Y=archivo2.pdf cat X Y output salida.pdf

Otros Usos

Cifrar un archivo pdf:

TERMINAL
  1. pdftk archivo.pdf output archivo_sin_clave.pdf clave

Quitar clave de un archivo pdf:

TERMINAL
  1. pdftk archivo.pdf input_pw clave output archivo_sin_clave.pdf

Quitar una página de un archivo pdf:

TERMINAL
  1. pdftk archivo.pdf cat 1-7 9-end output salida.pdf


Linux: Clonación de máquinas en VirtualBox


"Oracle VM VirtualBox es un software de virtualización para arquitecturas x86, creado originalmente por la empresa alemana innotek GmbH. Actualmente es desarrollado por Oracle Corporation como parte de su familia de productos de virtualización. Por medio de esta aplicación es posible instalar sistemas operativos adicionales, conocidos como «sistemas invitados», dentro de otro sistema operativo «anfitrión», cada uno con su propio ambiente virtual." (Wikipedia, 2011)

Ejecutamos en un terminal:

TERMINAL
  1. VBoxManage clonevdi ruta_archivo_maquina_a_clonar ruta_archivo_maquina_nueva


REFERENCIA

Wikipedia. (19 de marzo de 2011). VirtualBox. Recuperado de: https://es.wikipedia.org/wiki/VirtualBox



Instalación de Neatx (FreeNX) en Ubuntu


"NX es un programa informático que realiza conexiones remotas X11 muy rápidas, lo que permite a los usuarios acceder a escritorios remotos de Linux o Unix incluso bajo conexiones lentas como las realizadas con módem. NX realiza una compresión directa del protocolo X11, lo que permite una mayor eficiencia que VNC. La información se envía mediante SSH, por lo que toda la información que se intercambian servidor y cliente está cifrada." (Wikipedia, 2011)

Servidor

Editamos el archivo /etc/apt/sources.list

TERMINAL
  1. nano /etc/apt/sources.list

Agregamos la linea de configuración que corresponda a la versión de Ubuntu

ARCHIVO /etc/apt/sources.list
  1. deb http://ppa.launchpad.net/freenx-team/ppa/ubuntu maverick main
  2. deb http://ppa.launchpad.net/freenx-team/ppa/ubuntu lucid main

Actualizamos los repositorios e instalamos el programa

TERMINAL
  1. sudo aptitude update
  2. sudo aptitude install neatx-server

Cliente

Descargar el paquete .deb de la dirección http://www.nomachine.com/download-client-linux.php

Ubicarse en el directorio donde se guardo el paquete

TERMINAL
  1. sudo dpkg -i nxclient_X.X.X_i386.deb

Donde X.X.X corresponde a la versión que se haya descargado.


REFERENCIA

Wikipedia. (12 de febrero de 2011). Tecnología NX. Recuperado de: https://es.wikipedia.org/wiki/Tecnología_NX



Instalación de MapSource en Ubuntu


Se debe tener instalado el wine y las fuentes típicas de Windows. Luego seguir los siguientes pasos:

- Instalar el Garmin Trainer Center, mediante el wine. Se puede descargar de la página de Garmin.

- Instalar mediante el wine, el MapSource 6.137, versiones más recientes probablemente no funcionarán.

- Conectar el dispositivo GPS y esperar que el sistema lo reconozca. Luego entrar al módulo de configuración de wine, e ir a la pestaña de Unidades. Ejecutar autodetectar o en su defecto agregar manualmente la ruta del dispositivo. Se debe configurar como un disco flexible (opciones avanzadas).

- Ejecutar MapSource, en el menu ir a la ruta Utilidades/Obtener ID de unidad, aquí debería aparecer el dispositivo GPS.

- Instalar los mapas que vayamos a utilizar, en el caso de Venezuela pueden ser los de Venrut.

Debian: Equivalente del autoexec.bat de MS-DOS


El equivalente del autoexec.bat de MS-DOS es el archivo /etc/rc.local. Se ejecuta después de acabado el proceso de arranque del sistema.


Debian: Evitar cambios en /etc/resolv.conf


Si hemos realizado cambios en el archivo /etc/resolv.conf y queremos evitar que el sistema operativo lo modifique, debemos ejecutar en el terminal:

TERMINAL
  1. sudo chattr +i /etc/resolv.conf


LDAP-Samba (Parte 3): Operaciones phpldapadmin


En la tercera entrega de la guiá relativa a LDAP-Samba, nos referimos a las opciones de configuración que se realizan mediante el paquete phplddapadmin.

En el navegador colocamos el siguiente URL:

http://ip_servidor_pdc/phpldapadmin

Conectarnos

Para conectarnos colocamos la siguiente credencial de ingreso

Usuario --> cn=admin,dc=cs,dc=inet

Password --> XXXXX

Crear unidades organizacionales

Expandimos el árbol dc=cs,dc=inet --> Create a child entry --> Organizational Unit

OPCIONES DE CONFIGURACIÓN

Organisational Unit: users

Repetir proceso para crear ou=machines y a ou=groups.

Mapear los 4 grupos principales

Expandimos el árbol dc=cs,dc=inet --> ou=groups --> Create a child entry --> Samba 3 Group Mappings

OPCIONES DE CONFIGURACIÓN

Group: sambausers

Windows Name: Domain Users

Samba SID: seleccionar el SID

Los grupos los ubicaremos a partir del GID 20000, por lo que deberá cambiarse este valor.

Expandimos el árbol dc=cs,dc=inet --> ou=groups --> cn=sambausers

OPCIONES DE CONFIGURACIÓN

gidNumber: 20001

sambaSID: S-1-5-21-2303635708-1500597228-3808285555-513

Repetir proceso para crear:

    sambaadmins - Domain Admins - 20002 - 512

    sambaguests - Domain Guests - 20003 - 514

    sambamachines - Domain Computers - 20004 - 515

Agregando usuarios

Expandimos el árbol dc=cs,dc=inet --> ou=users --> Create a child entry --> Samba3 Account

OPCIONES DE CONFIGURACIÓN

First name: Administrador

Last name: cs.inet

User ID: admin (este sera el login)

Samba SID: seleccionar el SID

Password: XXXXX

GID Number: sambaadmins

Primary Group ID: sambaadmins

Home directory: /home/users/admin

Los usuarios los ubicaremos a partir del UID 10000, por lo que deberá cambiarse este valor. Para este usuario en especifico (admin) utilizaremos UID = 0. Expandimos el árbol: dc=cs,dc=inet --> ou=users --> cn=Administrador cs.inet

OPCIONES DE CONFIGURACIÓN

uidNumber: 0

sambaSID: S-1-5-21-2303635708-1500597228-3808285555-0

Repetir el proceso para crear un usuario normal, para ello reemplazamos sambaadmins por sambausers y como uidNumber usamos un número de la secuencia 10000.

Para que los usuarios no puedan abrir una sesión en el servidor, expandir el arbol: dc=cs,dc=inet --> ou=users --> cn=Usuario Normal --> Add new attribute

OPCIONES DE CONFIGURACIÓN

Seleccionar loginShell: /bin/false

Por último

TERMINAL
  1. mkdir -p /home/users/usuario
  2. cp /etc/skel/.* /home/users/usuario
  3. chown -R usuario /home/users/usuario
  4. chgrp -R sambausers /home/users/usuario

Uniendo máquinas al dominio

Las máquinas las ubicaremos a partir del UID 30000 y pueden ser agregadas a través del proceso automático que se configuro en la instalación.


LDAP-Samba (Parte 1): Instalación


LDAP son las siglas de Lightweight Directory Access Protocol (en español Protocolo Ligero/Simplificado de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP también se considera una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas. (Wikipedia, 2010)

Samba es una implementación libre del protocolo de archivos compartidos de Microsoft Windows (antiguamente llamado SMB, renombrado recientemente a CIFS) para sistemas de tipo UNIX. De esta forma, es posible que computadoras con GNU/Linux, Mac OS X o Unix en general se vean como servidores o actúen como clientes en redes de Windows. Samba también permite validar usuarios haciendo de Controlador Principal de Dominio (PDC), como miembro de dominio e incluso como un dominio Active Directory para redes basadas en Windows; aparte de ser capaz de servir colas de impresión, directorios compartidos y autentificar con su propio archivo de usuarios. (Wikipedia, 2010)

Para instalar un servidor de LDAP con soporte de Samba, debemos seguir los siguientes pasos:

TERMINAL
  1. aptitude install slapd ldap-utils

OPCIONES DE CONFIGURACIÓN DE aptitude install slapd ldap-utils

Cualquiera, será reconfigurado.

Continuando

TERMINAL
  1. dpkg-reconfigure slapd

OPCIONES DE CONFIGURACIÓN DE dpkg-reconfigure slapd

Omitir la configuración de OpenLDAP: no

Nombre de dominio: cs.inet

Nombre de organización: cms

Contraseña del admin: XXXXX

Confirme la contraseña del admin: XXXXX

Motor de base de datos a utilizar: BDB

Borrar la base de datos al purgar slapd: no

Mover la base de datos antigua: si

Permitir LDAP v2: si

Continuando

TERMINAL
  1. /etc/init.d/slapd restart

Para probar ejecutar en el terminal

TERMINAL
  1. ldapsearch -x -b "dc=cs,dc=inet"

Continuando

TERMINAL
  1. aptitude install apache2

Para probar consultar en el navegador la URL: http://ip_servidor_pdc

TERMINAL
  1. aptitude install smbldap-tools
  2. aptitude install phpldapadmin php5-ldap

Para probar consultar en el navegador la URL: http://ip_servidor_pdc/phpldapadmin

TERMINAL
  1. aptitude install build-essential
  2. cd /usr/src/
  3. wget http://sourceforge.net/projects/ldaputils/files/Contrib/mkntpwd/mkntpwd.tar.gz
  4. tar -xzvf mkntpwd.tar.gz
  5. make
  6. cp mkntpwd /usr/local/bin

Para probar ejecutar en el terminal

TERMINAL
  1. mkntpwd

Continuando

TERMINAL
  1. aptitude install samba samba-doc

OPCIONES DE CONFIGURACIÓN DE aptitude install samba samba-doc

Nombre del dominio: cs.inet

Usar passwords encriptados: si

Modificar smb.conf para que use la configuración WINS proveniente de DHCP: no

Continuando

TERMINAL
  1. cd /usr/share/doc/samba-doc/examples/LDAP
  2. gunzip samba.schema.gz
  3. cp samba.schema /etc/ldap/schema

Modificar /etc/ldap/slapd.conf según LDAP-Samba (Parte 2): Archivos de configuración

TERMINAL
  1. /etc/init.d/slapd restart

Aplicar Crear unidades organizacionales según LDAP-Samba (Parte 3): Operaciones phpldapadmin

TERMINAL
  1. mkdir -p /home/samba/netlogon
  2. mkdir -p /home/samba/profiles
  3. chmod 777 -R /home/samba/profiles

Modificar /etc/samba/smb.conf según LDAP-Samba (Parte 2): Archivos de configuración

Para probar ejecutar en el terminal y verificar que la configuración no tenga errores

TERMINAL
  1. testparm

Continuando

TERMINAL
  1. smbpasswd -w XXXXX
  2. /etc/init.d/samba restart

Para probar consultar en el navegador la URL: http://ip_servidor_pdc/phpldapadmin y verificar la entrada en el arbol sambaDomainName=CS.INET

Aplicar Mapear los 4 grupos principales según LDAP-Samba (Parte 3): Operaciones phpldapadmin

TERMINAL
  1. aptitude install libnss-ldap

OPCIONES DE CONFIGURACIÓN DE aptitude install libnss-ldap

Cualquiera, será reconfigurado.

Continuando

TERMINAL
  1. dpkg-reconfigure libnss-ldap

OPCIONES DE CONFIGURACIÓN DE dpkg-reconfigure libnss-ldap

Servidor de LDAP: ldap:///127.0.0.1

Nombre distintivo (DN): dc=cs,dc=inet

Versión de LDAP: 3

Se requiere usuario para la base de datos LDAP: no

Privilegios especiales de LDAP para root: si

Configuración leíble y escribible sólo para el propietario: si

Cuenta LDAP para root: cn=admin,dc=cs,dc=inet

Contraseña para la cuenta LDAP de root: XXXXX

Modificar /etc/nsswitch.conf según LDAP-Samba (Parte 2): Archivos de configuración

Para probar ejecutar en el terminal

TERMINAL
  1. getent group

Continuando

TERMINAL
  1. aptitude install libpam-ldap
  2. dpkg-reconfigure libpam-ldap

OPCIONES DE CONFIGURACIÓN DE dpkg-reconfigure libpam-ldap

Servidor de LDAP: ldap:///127.0.0.1

Nombre distintivo (DN): dc=cs,dc=inet

Versión de LDAP: 3

Make local root Database admin: si

Se requiere usuario para la base de datos LDAP: no

LDAP account for root: cn=admin,dc=cs,dc=inet

Contraseña para la cuenta LDAP de root: XXXXX

Local crypt to use when changing passwords: md5

Modificar /etc/pam.d/common-account, /etc/pam.d/common-auth y /etc/pam.d/common-password según LDAP-Samba (Parte 2): Archivos de configuración

TERMINAL
  1. aptitude install nscd
  2. /etc/init.d/samba restart

Aplicar Agregando usuarios según LDAP-Samba (Parte 3): Operaciones phpldapadmin

Para probar ejecutar en el terminal

TERMINAL
  1. getent passwd

Continuando

TERMINAL
  1. cd /usr/share/doc/smbldap-tools/examples
  2. cp smbldap.conf.gz smbldap_bind.conf /etc/smbldap-tools
  3. cd /etc/smbldap-tools
  4. gunzip smbldap.conf.gz
  5. chown root:root *
  6. chmod 600 *

Modificar /etc/smbldap-tools/smbldap_bind.conf y /etc/smbldap_tools/smbldap.conf según LDAP-Samba (Parte 2): Archivos de configuración

Aplicar Uniendo máquinas al dominio según LDAP-Samba (Parte 3): Operaciones phpldapadmin


REFERENCIA

Wikipedia. (18 de agosoto de 2010). Protocolo Ligero de Acceso a Directorios. Recuperado de: https://es.wikipedia.org/wiki/Protocolo_Ligero_de_Acceso_a_Directorios

Wikipedia. (18 de agosoto de 2010). Samba (programa). Recuperado de: https://es.wikipedia.org/wiki/Samba_(programa)



LDAP-Samba (Parte 2): Archivos de configuración


Continuando con la guía de instalación de LDAP-Samba, mostramos el contenido de los archivos de configuración. El texto en negrillas indica los parámetros que se deben personalizar


ARCHIVO /etc/ldap/slapd.conf
  1. allow bind_v2
  2. include /etc/ldap/schema/core.schema
  3. include /etc/ldap/schema/cosine.schema
  4. include /etc/ldap/schema/nis.schema
  5. include /etc/ldap/schema/inetorgperson.schema
  6. include /etc/ldap/schema/samba.schema
  7. pidfile /var/run/slapd/slapd.pid
  8. argsfile /var/run/slapd/slapd.args
  9. loglevel none
  10. modulepath /usr/lib/ldap
  11. moduleload back_bdb
  12. sizelimit 500
  13. tool-threads 1
  14. backend bdb
  15. database bdb
  16. suffix "dc=cs,dc=inet"
  17. directory "/var/lib/ldap"
  18. dbconfig set_cachesize 0 2097152 0
  19. dbconfig set_lk_max_objects 1500
  20. dbconfig set_lk_max_locks 1500
  21. dbconfig set_lk_max_lockers 1500
  22. index objectClass eq
  23. lastmod on
  24. checkpoint 512 30
  25. access to attrs=userPassword,shadowLastChange,sambaLMPassword,sambaNTPassword
  26.     by dn="cn=admin,dc=cs,dc=inet" write
  27.     by anonymous auth
  28.     by self write
  29.     by * none
  30. access to dn.base="" by * read
  31. access to *
  32.     by dn="cn=admin,dc=cs,dc=inet" write
  33.     by * read


ARCHIVO /etc/samba/smb.conf
  1. [global]
  2. ### Configuracion basica del servidor ###
  3. workgroup = cs.inet
  4. netbios name = servidor
  5. server string = Samba PDC Version %v
  6. socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192
  7. ### Configuracion para que la maquina sea el PDC master ###
  8. os level = 65
  9. preferred master = yes
  10. local master = yes
  11. domain master = yes
  12. domain logons = yes
  13. ### Configuracion de seguridad y conexion ###
  14. security = user
  15. guest ok = no
  16. encrypt passwords = yes
  17. null passwords = no
  18. hosts allow = 127.0.0.1 10.0.0.0/255.255.255.0
  19. wins support = yes
  20. name resolve order = wins lmhosts host bcast
  21. dns proxy = no
  22. time server = yes
  23. ### Otras configuraciones varias para SAMBA ###
  24. log file = /var/log/samba/log.%m
  25. log level = 2
  26. max log size = 50
  27. hide unreadable = yes
  28. hide dot files = yes
  29. panic action = /usr/share/samba/panic-action %d
  30. ### Samba en castellano y compatible con Windows NT
  31. # Elimina problemas de acentos entre carpetas windows y samba
  32. dos charset = 850
  33. unix charset = iso-8859-15
  34. ### Parametros para el soporte de LDAP ###
  35. passdb backend = ldapsam:ldap://127.0.0.1
  36. ldap suffix = dc=cs,dc=inet
  37. ldap machine suffix = ou=machines
  38. ldap user suffix = ou=users
  39. ldap group suffix = ou=groups
  40. ldap admin dn = cn=admin,dc=cs,dc=inet
  41. ldap delete dn = no
  42. enable privileges = yes
  43. ;Para permitir a los usuarios cambiar su clave desde Windows
  44. ldap password sync = yes
  45. ### Perfiles moviles de usuario, carpeta home y script de inicio ###
  46. # Si no deseamos tener perfiles móviles comentar las lineas:
  47. # logon home
  48. # logon path
  49. logon home = \\%L\%U\.profile
  50. logon drive = H:
  51. logon path = \\%L\profiles\%U
  52. logon script = %U.bat OR netlogon.bat
  53. ### Script para automatizar la adicion de cuentas de maquinas ###
  54. ### al arbol LDAP cuando estas se unan por primera vez al dominio ###
  55. add machine script = /usr/sbin/smbldap-useradd -w "%u"
  56. ### Impresion ###
  57. load printers = yes
  58. printcap name = /etc/printcap
  59. printing = cups
  60. printcap name = cups
  61. ; Si quiero que el grupo sambaadmins pueda administrar las impresoras
  62. ; printer admin = @sambaadmins
  63. ### Recursos SAMBA ###
  64. # Ruta en donde se alojaran el(los) script(s) de inicio
  65. [netlogon]
  66. comment = Network Logon Service
  67. path = /home/samba/netlogon
  68. guest ok = no
  69. writable = no
  70. browseable = no
  71. share modes = no
  72. # Carpeta en donde se guardan los perfiles moviles de los usuarios
  73. # Si no deseamos tener perfiles móviles comentar todo este grupo.
  74. [profiles]
  75. ; comment = Perfiles de Usuarios
  76. ; path = /home/samba/profiles
  77. ; writeable = yes
  78. ; browseable = no
  79. ; guest ok = no
  80. ; hide files = /desktop.ini/ntuser.ini/NTUSER.*/
  81. ; create mask = 0600
  82. ; directory mask = 0700
  83. ; csc policy = disable
  84. # Impresoras
  85. [printers]
  86. comment = Impresoras
  87. browseable = no
  88. path = /var/spool/samba
  89. printable = yes
  90. public = no
  91. writable = no
  92. create mode = 0700
  93. # Los clientes Windows buscan este recurso como fuente de drivers
  94. [print$]
  95. comment = Drivers de Impresoras
  96. path = /var/lib/samba/printers
  97. browseable = yes
  98. read only = yes
  99. guest ok = no
  100. # carpetas home de los usuarios
  101. [homes]
  102. path = /home/users/%U
  103. comment = Carpetas HOME
  104. browseable = no
  105. writeable = yes
  106. valid users = %S
  107. read only = no
  108. guest ok = no
  109. inherit permissions = yes
  110. # Este es un recurso que solo debe ser accesible
  111. # para un grupo POSIX especial llamado sysfox
  112. # Si no necesitamos grupo POSIX comentar
  113. ;[sysfox]
  114. ; comment = Directorio de Sistemas en Fox
  115. ; path = /home/posix/sysfox
  116. ; writeable = yes
  117. ; delete readonly = yes
  118. ; valid users = @sysfox
  119. ; write list = @sysfox
  120. ; force group = sysfox
  121. ; browseable = yes
  122. ; create mask = 0770
  123. ; directory mask = 0770
  124. # Este recurso es por si quiero compartir la unidad de CD
  125. ;[cdrom]
  126. ­ ; comment = Samba server CD
  127. ; writable = no
  128. ; locking = no
  129. ; path = /media/cdrom0
  130. ; public = yes
  131. ; Lo siguiente es para auto-montar el CD cada vez que es introducido y desmontarlo
  132. ; cuando se termina la conexión al servidor.
  133. ; Para que esto trabaje, el archivo /etc/fstab debe contener una
  134. ; entrada así: /dev/hdc0 /media/cdrom iso9660 defaults,noauto,ro,user 0 0
  135. ;
  136. ; preexec = /bin/mount /cdrom
  137. ; postexec = /bin/umount /cdrom


ARCHIVO /etc/nsswitch.conf
  1. # /etc/nsswitch.conf
  2. #
  3. # Example configuration of GNU Name Service Switch functionality.
  4. # If you have the `glibc-doc-reference' and `info' packages installed, try:
  5. # `info libc "Name Service Switch"' for information about this file.
  6. passwd: compat ldap
  7. group: compat ldap
  8. shadow: compat ldap
  9. hosts: files dns
  10. networks: files
  11. protocols: db files
  12. services: db files
  13. ethers: db files
  14. rpc: db files
  15. netgroup: nis


ARCHIVO /etc/pam.d/common-account
  1. #
  2. # /etc/pam.d/common-account - authorization settings common to all services
  3. #
  4. # This file is included from other service-specific PAM config files,
  5. # and should contain a list of the authorization modules that define
  6. # the central access policy for use on the system. The default is to
  7. # only deny service to users whose accounts are expired in /etc/shadow.
  8. #account required pam_unix.so
  9. account sufficient pam_ldap.so
  10. account required pam_unix.so try_first_pass


ARCHIVO /etc/pam.d/common-password
  1. password sufficient pam_ldap.so
  2. password required pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass


ARCHIVO /etc/smbldap-tools/smbldap_bind.conf
  1. ############################
  2. # Credential Configuration #
  3. ############################
  4. # Notes: you can specify two differents configuration if you use a
  5. # master ldap for writing access and a slave ldap server for reading access
  6. # By default, we will use the same DN (so it will work for standard Samba
  7. # release)
  8. slaveDN="cn=admin,dc=cs,dc=inet"
  9. slavePw="XXXXX"
  10. masterDN="cn=admin,dc=cs,dc=inet"
  11. masterPw="XXXXX"


ARCHIVO /etc/smbldap-tools/smbldap.conf
  1. ## General Configuration
  2. SID="S-1-5-21-2303635708-1500597228-3808285555"
  3. sambaDomain="cs.inet"
  4. ## LDAP Configuration
  5. slaveLDAP="127.0.0.1"
  6. slavePort="389"
  7. masterLDAP="127.0.0.1"
  8. masterPort="389"
  9. ldapTLS="0"
  10. verify="none"
  11. suffix="dc=cs,dc=inet"
  12. usersdn="ou=users,${suffix}"
  13. computersdn="ou=machines,${suffix}"
  14. groupsdn="ou=groups,${suffix}"
  15. sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
  16. scope="sub"
  17. hash_encrypt="MD5"
  18. crypt_salt_format="%s"
  19. ## Unix Accounts Configuration
  20. userLoginShell="/bin/false"
  21. userHome="/home/users/%U"
  22. userHomeDirectoryMode="700"
  23. userGecos="System User"
  24. defaultUserGid="515"
  25. defaultComputerGid="20003"
  26. skeletonDir="/etc/skel"
  27. defaultMaxPasswordAge="45"
  28. ## SAMBA Configuration
  29. userSmbHome=""
  30. userProfile=""
  31. userHomeDrive="H:"
  32. ## SMBLDAP-TOOLS Configuration
  33. with_smbpasswd="0"
  34. smbpasswd="/usr/bin/smbpasswd"
  35. with_slappasswd="0"
  36. slappasswd="/usr/sbin/slappasswd"


Debian: Instalación de paquetes .deb


La extensión .deb es la utilizada para el formato de paquetes de software de Debian.

Estos paquetes contienen tres archivos:
  • debian-binary - número de versión del formato
  • debcontrol.tar.gz - toda la metainformación del paquete
  • data.tar.gz - los archivos que se instalan

Para instalar:

TERMINAL
  1. sudo dpkg -i nombredelpaquete.deb

Para desinstalar:

TERMINAL
  1. sudo dpkg -r nombredelpaquete


Debian: Instalación de un servidor de correo (Postfix - Dovecot)


Postfix es un MTA (Mail Transfer Agent), una alternativa al sendmail. Dovecot es un servidor de POP3 e IMAP. La configuración expuesta, en esta entrada, esta pensada en el envío de correos dentro de una red local, para usarlo externamente sera necesario instalar autenticación SASL con TLS.

Primero instalamos Postfix:

TERMINAL
  1. aptitude install postfix

Cuando pregunte seleccionamos la opción internet como tipo de servidor. El archivo de configuración del postfix esta en /etc/postfix/main.cf

Segundo instalamos Dovecot:

TERMINAL
  1. aptitude install dovecot-imapd dovecot-pop3d dovecot-common

El archivo de configuración de dovecot se encuentra en /etc/dovecot/dovecot.conf. Ahora debemos modificarlo.

TERMINAL
  1. nano /etc/dovecot/dovecot.conf

ARCHIVO /etc/dovecot/dovecot.conf
  1. protocols = pop3 imap
  2. disable_plaintext_auth = no

Reiniciamos el servicio.

TERMINAL
  1. /etc/init.d/dovecot restart


Debian: SSH sin contraseña


Si frecuentemente nos conectamos a otro equipo vía SSH, o hemos definido un proceso que se ejecuta automáticamente y de manera desatendida, podemos valernos de este método para evitar que al realizar la conexión el sistema nos solicite la contraseña.

Nos referiremos a cliente como la maquina que se quiere conectar al servidor, sin que este último le solicite clave.

Editamos el archivo /etc/ssh/sshd_config

TERMINAL
  1. nano /etc/ssh/sshd_config

Verificamos la presencia de estas lineas:

ARCHIVO /etc/ssh/sshd_config
  1. RSAAuthentication yes
  2. PubkeyAuthentication yes

Luego verificar si en el cliente están creadas las llaves publicas RSA y DSA

TERMINAL
  1. ls ~/.ssh

En caso de estar creadas, deberíamos observar estos archivos:

id_rsa.pub
id_dsa.pub

En caso de no estar creadas, ejecutar:

TERMINAL
  1. ssh-keygen -t rsa
  2. ssh-keygen -t dsa
  3. ssh-add

Ahora la idea es copiar el contenido de los archivos id_rsa.pub e id_dsa.pub dentro del archivo ~/.ssh/authorized_keys en el servidor.

En el cliente:

TERMINAL
  1. scp ~/.ssh/id_rsa.pub usuario@servidor:.ssh/1.pub
  2. scp ~/.ssh/id_dsa.pub usuario@servidor:.ssh/2.pub

En el servidor:

TERMINAL
  1. cd .ssh/
  2. cat 1.pub >> authorized_keys
  3. cat 2.pub >> authorized_keys