Archives pour avril, 2014

VirtualBox : dossier partagé sur un guest Linux

Exemple de montage du partage www sur le /var/www d’un guest Linux :

# vim /etc/fstab
www /var/www/ vboxsf rw,uid=33,gid=33 0 0

ProFTPD : mod_SFTP & authentification par clés publiques

Voici un rappel sur la configuration de ProFTP & mod_sftp pour permettre l’authentification par clé des utilisateurs :

# vim /etc/proftpd/proftpd.conf
Port 22
SFTPEngine on
SFTPHostKey /etc/ssh/ssh_host_dsa_key
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPCompression off
SFTPAuthorizedUserKeys file:/etc/proftpd/authorized_keys/%u

Include /etc/proftpd/conf.d/*.conf
AllowOverwrite on
AuthUserFile /etc/proftpd/ftpd.passwd
DefaultRoot ~
RequireValidShell off
TLSOptions NoCertRequest NoSessionReuseRequired

Umask 027

A noter que les clés publiques doivent être stockées sous le format SECSH, ce qui est obtenu avec cette commande :

# ssh-keygen -e -f keys/user.pub > /etc/proftpd/authorized_keys/user

VirtualBox : fixer les règles réseau d’udev suite au clonage d’une VM

udev a la facheuse tendance à faire perdre la connectivé réseau suite au clonage d’une VM. Dans le cas d’un déploiement en masse de mes VM, j’ai recours à un script init.d qui va supprimer les règles persistantes sur les interfaces réseaux à chaque shutdown / reboot. Le voici :

# vim /etc/init.d/udev-network-rules
#! /bin/sh
### BEGIN INIT INFO
# Provides:          udev-network-rules
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Fix udev network rules before restart
# Description:       Fix udev network rules before restart for VM machines
### END INIT INFO

# Author: Boris HUISGEN <bhuisgen@hbis.fr>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="udev network rules"
NAME=udev-network-rules
SCRIPTNAME=/etc/init.d/$NAME

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start()
{
	return 0
}

do_stop()
{
	rm -f /etc/udev/rules.d/70-persistent-net.rules
	return 0
}

do_reload() {
	return 0
}

case "$1" in
  start)
	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
	do_start
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  stop)
	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
	do_stop
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  status)
       exit 0
       ;;
  restart|force-reload)
	log_daemon_msg "Restarting $DESC" "$NAME"
	do_stop
	case "$?" in
	  0|1)
		do_start
		case "$?" in
			0) log_end_msg 0 ;;
			1) log_end_msg 1 ;;
			*) log_end_msg 1 ;;
		esac
		;;
	  *)
		log_end_msg 1
		;;
	esac
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
	exit 3
	;;
esac

:
# chmod +x /etc/init.d/udev-network-rules
# update-rc.d udev-network-rules defaults

SVN : erreur “attempt to write a readonly database”

# cd /var/svn/repository# chown -R svn .
# chmod g+w db/rep-cache.db

VirtualBox : augmenter la taille d’un disque

En premier lieu, coupez la VM et désassocier le disque à la VM depuis le VirtualBox Media Manager. Ensuite en CLI :

$ VBoxManage modifyhd vm-debian-disk1.vdi --resize 40000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

A noter que le système ne détectera pas la nouvelle taille du disque si des snapshots existent ; il faut donc tous les supprimer.

Drupal : configuration des alias Drush pour la gestion multi-sites

# cat /etc/drush/dev-sites.aliases.drushrc.php 
<?php

$aliases['en'] = array (
  'root' => '/var/www/dev/site',
  'uri' => 'www.site-en.com'
);

$aliases['us'] = array (
  'root' => '/var/www/dev/site',
  'uri' => 'www.site-us.com'
);

$aliases['fr'] = array (
  'root' => '/var/www/dev/site',
  'uri' => 'www.site-fr.com'
);

?>

Les alias sont à utiliser de cette façon :

# drush @dev-sites.us status
# drush @dev-sites.us cc all

La gestion par groupe permet de simplifier la maintenance des différents sites :

# drush @dev-sites cc all

Tout comme l’exécution du cron de maintenance Drupal en crontab :

# crontab -l -u www-data
10 * * * * drush @dev-sites core-cron --quiet -y

OpenSSH : récupération des clés publiques depuis un serveur OpenLDAP

Les dernières versions d’OpenSSH (version 6) permettent de récupérer les clés SSH des utilisateurs depuis une source externe. Je présente ici les étapes nécessaires à la mise en place d’une récupération des clés publiques depuis un serveur LDAP.

Installation

Sous Debian 7, il est nécessaire d’installer les packages depuis les backports Wheezy pour pouvoir bénéficier des dernirès versions d’OpenSSH :

deb http://ftp.debian.org/debian/ wheezy-backports main
# apt-cache show openssh-server
# apt-get install openssh-server=1:6.4p1-1~bpo70+1 openssh-client=1:6.4p1-1~bpo70+1

Configuration

Le script de récupération des clés publiques est le suivant :

# touch /etc/ssh/ldap-authorizedkeys.sh && chmod +x /etc/ssh/ldap-authorizedkeys.sh
# vim /etc/ssh/ldap-authorizedkeys.sh
URI="ldap://ldap1.my.domain,ldap://ldap2.my.domain"
BASE="dc=my,dc=domain"
BINDDN="cn=proxy,dc=my,dc=domain"
BINDPW="$ecret"
OPTIONS="-ZZ"

LOGIN=$1

ldapsearch -H ${URI} -D "${BINDDN}" -w "${BINDPW}" -b "${BASE}" ${OPTIONS} '(&(objectClass=posixAccount)(uid='"$LOGIN"'))' 'sshPublicKey' \
    | sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/\n *//g;s/sshPublicKey: //gp'

Au niveau de la configuration du serveur SSH :

# vim /etc/ssh/sshd_config
AuthorizedKeysCommand /etc/ssh/ldap-authorizedkeys.sh
AuthorizedKeysCommandUser root

Le serveur SSH doit être redémarré :

# /etc/init.d/ssh restart

Reste à modifier la base LDAP en ajoutant l’attribut sshPublicKey contenant la clé publique à chaque objet LDAP utilisateur :

dn: uid=bhuisgen,ou=titi,ou=tata,ou=toto,dc=my,dc=domain
objectClass: ldapPublicKey
sshPublicKey: ******************

Zabbix : patch pour le support des URL longues avec les scénarios Web

zabbix=# ALTER TABLE httpstep ALTER COLUMN url TYPE varchar(2048);
root@zabbix:/usr/share/zabbix # diff -Naur include/schema.inc.php.orig include/schema.inc.php
--- include/schema.inc.php.orig 2014-04-08 15:57:52.336603380 +0200
+++ include/schema.inc.php 2014-04-08 15:58:05.268806754 +0200
@@ -844,7 +844,7 @@
'url' =&gt; array(
'null' =&gt; false,
'type' =&gt; DB::FIELD_TYPE_CHAR,
- 'length' =&gt; 255,
+ 'length' =&gt; 2048,
'default' =&gt; '',
),
'timeout' =&gt; array(
root@zabbix:/usr/share/zabbix # diff -Naur include/views/configuration.httpconf.popup.php.orig include/views/configuration.httpconf.popup.php
--- include/views/configuration.httpconf.popup.php.orig	2014-04-08 16:10:49.660807171 +0200
+++ include/views/configuration.httpconf.popup.php	2014-04-08 16:11:25.721372545 +0200
@@ -75,7 +75,7 @@

 	$httpPopupFormList = new CFormList('httpPopupFormList');
 	$httpPopupFormList->addRow(_('Name'), new CTextBox('name', get_request('name', ''), ZBX_TEXTBOX_STANDARD_SIZE, get_request('templated', null), 64));
-	$httpPopupFormList->addRow(_('URL'), new CTextBox('url', get_request('url', ''), ZBX_TEXTBOX_STANDARD_SIZE));
+	$httpPopupFormList->addRow(_('URL'), new CTextBox('url', get_request('url', ''), ZBX_TEXTBOX_STANDARD_SIZE, 'no', 2048));
 	$httpPopupFormList->addRow(_('Post'), new CTextArea('posts', get_request('posts', '')));
 	$httpPopupFormList->addRow(_('Variables'), new CTextArea('variables', get_request('variables', '')));
 	$httpPopupFormList->addRow(_('Timeout'), new CNumericBox('timeout', get_request('timeout', 15), 5));

PostgreSQL : script de backup par snapshot LVM

#!/bin/bash
#
# Backup PostgreSQL cluster from LVM partition
#

VG_NAME="vg"
LV_NAME="sql"
LV_SIZE="4G"

MOUNT_DIR="/var/lib/postgresql/tmp"
PG_VERSION="9.3"
PG_CLUSTER="main"

BACKUP_DIR="/home/backup"

#
# script
#

PATH=/usr/sbin:/usr/bin:/sbin:/bin

DATE=`date +%Y%m%d%H%M%S`
SNAPSHOT="${LV_NAME}_${DATE}"

mkdir -p $BACKUP_DIR
mkdir -p $MOUNT_DIR

echo "Backuping PostgreSQL cluster $PG_VERSION/$PG_CLUSTER from LVM partition $VG_NAME/$LV_NAME"
echo ""

echo "- starting PostgreSQL hot backup"
su -c "psql -c \"SELECT pg_start_backup('$SNAPSHOT');\"" -l postgres

echo "- creating LVM snapshot"
lvcreate -s -L$LV_SIZE -n$SNAPSHOT $VG_NAME/$LV_NAME

echo "- stopping PostgreSQL hot backup"
su -c "psql -c \"SELECT pg_stop_backup();\"" -l postgres

echo "- mounting LVM snapshot"
mkdir -p $MOUNT_DIR
mount /dev/mapper/$VG_NAME-$SNAPSHOT $MOUNT_DIR

echo "- archiving files"
tar czf $BACKUP_DIR/$SNAPSHOT.tar.gz -C $MOUNT_DIR/$PG_VERSION/$PG_CLUSTER .

echo "- cleaning"
umount $MOUNT_DIR
lvremove -f $VG_NAME/$SNAPSHOT

echo ""
echo "Backup $SNAPSHOT done."

Zabbix : patch pour l’authentification LDAP par TLS

root@zabbix:/usr/share/zabbix # diff -Naur include/classes/class.cldap.php.orig include/classes/class.cldap.php
--- include/classes/class.cldap.php.orig	2014-03-18 16:08:49.710346146 +0100
+++ include/classes/class.cldap.php	2014-04-08 12:23:00.904298965 +0200
@@ -40,7 +40,7 @@
 			),
 			'referrals' => 0,
 			'version' => 3,
-			'starttls' => null,
+			'starttls' => true,
 			'deref' => null
 		);
Haut de page