script to quickly create vhost + dir + chrooted sftp user

Attention ! This script is a draft. A lot of checks are not made.

Note: This require a little configuration in /etc/ssh/sshd_config

#!/bin/bash
# File : new-site
# Author: Michaël Marinetti
# Description: Create a new vhost named "foo.com", for the user "foo"
# and add him to the sftp user (which is chrooted).
# Default vhost does not allow php.
#
# Created : 2012-07-21
# Modified :
#
# CHANGELOG
#
# TODO
# * apache check vhost syntax
# * template file for vhost
# * config file for default values
# * add --help and --verbose
# *

DEFAULT_MAIL=default.mail.to.use@example.com
# ServerAdmin mail
ADMINMAIL=admin@example.com

sitename="$1"
usermail="$2"

apache_sites_dir=/etc/apache2/sites-available
base_dir=/home/web
if (test "$usermail" = "" ) then
usermail=$DEFAULT_MAIL

fi

if (test "$sitename" = "" ) then
echo "error, sitename empty. USAGE: new-site [sitename] [user email]"
exit 1
fi

# test if this name is valid and available
valid_name=`echo "$sitename"|grep '^[0-9a-z.-]*\.\(com\|net\|fr\|org\|info\)$'`

if ( test "$valid_name" != "$sitename") then
echo "invalid domain name: must match the regex #^[a-z.-]*\.(com|net|fr|org|info)$#"
exit 2
fi

user=$(echo $sitename|sed 's#\(.*\)\.[^.]*#\1#' )

if ( test -e "$base_dir/$user" ) then
echo "oO, directory already exists"
exit 3
fi

if ( test -e "$apache_sites_dir/$sitename" ) then
echo "oO, vhost already exists"
exit 4
else
echo "no vhost of that name present (this is normal) "
fi

# creating user for that directory only :)
# username is, by default, the domain name without ".fr/.com" at the end
user=$(echo $sitename|sed 's#\(.*\)\.[^.]*#\1#' )
# let's generate an easy to remember random password with apg
pass=`apg -q -a 0 -n 1 -M NCL`
pass_crypted=$(perl -e "print crypt($pass, 'password')");

# creating directory with correct rights :)
mkdir -p $base_dir/$user/www $base_dir/$user/prive

useradd -s /bin/false -M -d $base_dir/$user -g sftp -p $pass_crypted $user
if (test $? -eq 0 ) then
echo "user $user created."
else
echo "User $user NOT CREATED...... MAYBE ALREADY EXIST ?"
fi

chown root:sftp $base_dir/$user -R && chmod 755 $base_dir/$user/www -R

chmod g+w $base_dir/$user/www $base_dir/$usr/prive
#@TODO use a template file
echo "ici" > $base_dir/$user/www/index.html

chmod +x $base_dir/$user -R

tmpfile=`mktemp`

vhost_def="
ServerAdmin $ADMINMAIL
ServerName $sitename
ServerAlias www.$sitename

php_admin_value engine off

Options FollowSymLinks
AllowOverride None


DocumentRoot /home/web/$user/www

Options FollowSymLinks
AllowOverride None


Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all


# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
ErrorLog \${APACHE_LOG_DIR}/error-$sitename.log
CustomLog \${APACHE_LOG_DIR}/access-$sitename.log combined

"
echo "$vhost_def" > $tmpfile

echo "$vhost_def"

echo "Validate (no will open edit) (y/n) ?"
read pouet
if (test "$pouet" != "y" -a "$pouet" != "Y") then
echo "Edition vhost ..."
# vim +":r! cat $tmpfile" $apache_sites_dir/$sitename
vim $tmpfile
fi

cp $tmpfile $apache_sites_dir/$sitename
# always cleaning after works is done
rm $tmpfile

echo "I'm really proud of that script which
- create vhost
- create sftp user and chroot him.
- m'envoie tout ça !

host $sitename
user $user
pass $pass
"|mail -s "sftp - new user password" $usermail
# how to handle password ?
# passwd
# how to send all this informations :p

# enabling vhost
a2ensite $sitename

# reload apache :)
service apache2 restart

AuthType Digest

Pour vous éviter de chercher:
1) utilisation du digest dans le .htaccess (au lieu du Basic)

AuthType Digest
# AuthName est utilisé pour générer le mot de passe
AuthName "prive"
AuthUserFile /home/www/.htdigest
AuthDigestNonceLifetime 300
require valid-user

2) génération d’un mot de passe :
C’est similaire à un htpasswd, avec « realm » en plus au milieu : htdigest [fichier] [realm] [user]
« Realm » correspond à la valeur de « AuthName » mis plus haut.

htdigest -c /home/web/.htdigest "prive" michael

quelques opérations simple avec les chaines dans #bash

${variable: ±substring}
${variable#prefixe_a_supprimer}
${variable/search/replace}
${variable//search/replaceall}

var=poete
echo ${var: -1} # affiche "e" 
echo ${var: +1} # affiche "p"
echo ${var%te}  # affiche "poe"
echo ${var#po}  # affiche "ete" 
echo ${var/t/m}  # affiche "poeme" 
echo ${var//e/3}  # affiche "po3t3" 

date range in bash

#!/bin/bash
# display all dates between arg1 and arg2

date1=$1
date2=$2

# checks dates
if ! date -d "$date1" 2>&1 > /dev/null ; 
	then echo "first date is invalid" ; exit 1
fi
if ! date -d "$date2" 2>&1 > /dev/null ; 
	then echo "second date is invalid" ; exit 1
fi

#set current and end date
current=$(date -d "$date1" +%F)
end=$(date -d "$date2" +%F)

#loop over all dates
while [ "$end" != "$current" ] 
do
	echo $current
	current=$(date -d "$current +1 days" +%F)
done
echo $current

[crontab] Ouvrir une application graphique

Tous les matins à 10h, exécuter le script qui ouvre un nouveau message thunderbird

00 10 * * * env DISPLAY=:0 /home/michael/crons/send.sh

send.sh

# destinataire :)
to="dest@example.com"
# Si plusieurs identités dans Thunderbird, il faut aller dans
# "options > paramètres avancés pour trouver l'identité voulu.
preselectId=id3
# exemple de titre simple
subject="[rapport quotidien] `date +%F`"
# 
body=`/home/michael/scripts/reports/daily-report.sh`


thunderbird -compose "to='$to',preselectid=$preselectId,subject='$subject',body='$body'"

Sources:
https://help.ubuntu.com/community/CronHowto
http://kb.mozillazine.org/Command_line_arguments_%28Thunderbird%29

completion automatique dans un terminal ?

Exemple pour compléter avec un nom de répertoire dans un dossier particulier :

Pour mon script « prepareDirFromWeb » qui se trouve dans mon dossier « /home/michael/bin » , je créé le fichier /etc/bash_completion.d/prepareDirFromWeb qui contient le code suivant :

# bash completion for Debian apache2 configuration tools
# $Id: apache2,v 1.1 2005/03/16 22:51:19 guillaume Exp $

_prepareDirFromWeb()
{
  local cur prev opts dirList
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  prev="${COMP_WORDS[COMP_CWORD-1]}"
  opts="--help --verbose --version"
  dirList="`ls -d /var/www/*/ | awk -F / '{print $5}' `"
  if [[ ${cur} == -* ]] ; then
    COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
    return 0
  else
    COMPREPLY=( $(compgen -W "${dirList}" ${cur}) )
    
  fi  
}
complete -F _prepareDirFromWeb prepareDirFromWeb

Quel con a dit « Y’a rien qui s’passe » ?

« Y’a rien qui s’passe » est une chanson d’Allain Leprest. « Quel con a dit y’a rien qui s’passe » est une réponse, des années plus tard, du même auteur. Je laisse découvrir ces textes aux curieux qui veulent en savoir plus.

Allain Leprest s’est aidé à mourir ce matin du 15 Août 2011 à Entraigues. C’est un ami qui m’a prévenu aujourd’hui. J’ai entendu le chanteur pour la première fois au festival Georges Brassens, il y a 2 ou 3 ans. Il arrivait difficilement au milieu de la scène. Mais une fois au micro, l’artiste avait conquis la salle dès les premiers mots, moi y compris. Depuis, j’ai découvert son univers. Ses textes me tiennent chaud au cœur, c’est souvent une de ses mélodies qui me trotte dans la tête.

Je l’ai recroisé depuis plusieurs fois, je le savais malade mais j’avais l’impression qu’il allait mieux petit à petit. J’ai eu l’immense chance, en novembre dernier, de partager une table, une discussion, et de nombreux verres entre 2h et 7h du matin, à parler de rien et de tout.

Ces derniers temps, il a eu une très riche actualité et de nombreux chanteurs ont chanté ses mots : Sanseverino, Jacques Higelin, Michel Fugain, Anne Sylvestre, Agnès Bihl, Olivia Ruiz, Nicolas Bacchus, Mon Côté Punk, Yves Jamait, La Rue Ketanou, Gerard Morel, Clarika, Alexis HK, la liste est longue.

Salut à toi, l’Artiste !

Artiste : Allain Leprest

Titre : Quand j’étais mort

URL: http://www.deezer.com/fr/music/track/2666942