#!/bin/sh set -e -f ${DRY_RUN:+-n} -u tool=$0 while test -L "$tool" do tool=$(readlink "$tool") done tool=${tool%/*} . "$tool"/lib/rule.sh . "$tool"/etc/vm.sh export TRACE=1 cd / rule_help () { # SYNTAX: [--hidden] local hidden; [ ${1:+set} ] || hidden=set cat >&2 <<-EOF DESCRIPTION: ce script regroupe des règles pour administrer la VM ($vm_fqdn) _depuis_ la VM hébergée ($vm_fqdn) ; il sert à la fois d'outil (aisément bidouillable) et de documentation (préçise). Voir \`$tool/vm_host' pour les règles côté machine hôte ($vm_host). SYNTAX: $0 \$RULE \${RULE}_SYNTAX RULES: $(sed -ne "s/^rule_\(${hidden:+[^_]}[^ ]*\) () {\( *#.*\|\)/ \1\2/p" "$tool"/etc/vm.sh "$0") ENVIRONMENT: TRACE # affiche les commandes avant leur exécution $(sed -ne 's/^readonly \([^ ][^ =]*\).*}\( *#.*\|\)$/\t$\1\2/p' "$tool"/etc/vm.sh "$0") EOF } rule_git_configure () { ( cd "$tool" git config --replace branch.master.remote . git config --replace branch.master.merge refs/remotes/master local tool tool=$(cd "$tool"; cd -) install -m 770 /dev/stdin .git/hooks/post-update <<-EOF #!/bin/sh -efux case \$1 in (refs/remotes/master) cd .. git --git-dir=\$PWD/.git checkout -f -B master remotes/master git --git-dir=\$PWD/.git clean -f -d -x ;; esac EOF ) } rule_git_reset () { ( cd "$tool" git checkout -f -B master remotes/master git clean -f -d -x ) } rule_adduser () { local user="$1"; shift getent passwd "$user" >/dev/null || sudo adduser "$@" "$user" } rule_apt_get_install () { # SYNTAX: $package sudo DEBIAN_FRONTEND=noninteractive apt-get install --yes "$@" } rule_dpkg_reconfigure () { # SYNTAX: $package sudo DEBIAN_FRONTEND=noninteractive dpkg-reconfigure "$@" } rule__chrooted_configure () { # NOTE: est-ce bien utile à un moment ? export LANG=C export LC_CTYPE=C . /etc/profile } rule_apache2_configure () { # XXX: cette règle n'est pas testée/mise-à-jour local -; set +f rule apt_get_install \ apache2-mpm-itk \ libapache2-mod-php5 # VOIR: http://serverfault.com/questions/383526/how-do-i-select-which-apache-mpm-to-use/383634#383634 # VOIR: http://jkroon.blogs.uls.co.za/it/security/using-php-fpm-and-mod_proxy_fcgi-to-optimize-and-secure-lamp-servers # NOTE: apache2-mpm-itk semble le plus sécurisé, # car on est certain que tout est exécuté avec les uid/gid # assignés au VirtualHost/Directory/Location # néamoins il se peut qu'une combinaison du genre : # apache2-mpm-{worker,event} + mod_proxy_fcgi + apache2-suexec-custom + php-fpm # soit plus performante (threads et pas forks), # cependant l'usage de suexec impose des forks il semble.. # et mod_proxy_fcgi n'apparaît que dans apache 2.4 ; # donc pour l'instant : apache2-mpm-itk sudo rm -rf \ /etc/apache2/site.d sudo install -d -m 770 -o www -g www \ /etc/apache2 \ /etc/apache2/site.d \ /etc/apache2/x509.d cat /dev/stdin "$tool"/etc/apache2/apache2.conf <<-EOF | ServerName "$vm_fqdn" EOF sudo install -m 660 -o root -g root /dev/stdin \ /etc/apache2/apache2.conf sudo install -m 660 -o root -g root \ "$tool"/etc/apache2/envvars \ /etc/apache2/envvars sudo install -m 660 -o root -g root \ "$tool"/etc/apache2/httpd.conf \ /etc/apache2/httpd.conf #sudo install -m 660 -o root -g root /dev/stdin \ # /etc/apache2/suexec/www-data <<-EOF # /home # pub/www/cgi # EOF sudo install -m 660 -o root -g root \ "$tool"/etc/apache2/ports.conf \ /etc/apache2/ports.conf sudo a2enmod actions sudo a2enmod headers sudo a2enmod rewrite sudo a2enmod ssl sudo a2enmod userdir local conf sudo a2dissite "*" sudo ln -fns \ /etc/apache2 \ /home/www/etc/apache2 for conf in "$tool"/etc/apache2/site.d/*/VirtualHost.conf do conf=${conf#"$tool"/etc/apache2/site.d/} local site=${conf%/VirtualHost.conf} case $site in (*-tls) local hint="run vm_remote apache2_key_send before" assert "sudo test -f /etc/apache2/site.d/\"$site\"/x509/key.pem" hint sudo install -d -m 770 -o www-"$site" -g www-"$site" \ /etc/apache2 \ /etc/apache2/site.d/"$site" \ /etc/apache2/x509.d/"$site" \ /etc/apache2/x509.d/"$site"/ca \ /etc/apache2/x509.d/"$site"/empty \ /etc/apache2/x509.d/"$site"/rvk \ /etc/apache2/x509.d/"$site"/usr sudo install -m 664 -o www -g www \ "$tool"/var/pub/x509/"$site"/crt.self-signed.pem \ /etc/apache2/x509.d/"$site"/crt.self-signed.pem #sudo install -m 664 -o www-"$site" -g www-"$site" \ # "$tool"/var/pub/x509/"$site"/rvk.pem \ # /etc/apache2/x509.d/"$site"/rvk.pem sudo install -m 664 -o www -g www \ "$tool"/var/pub/x509/"$site"/ca/crt.self-signed.pem \ /etc/apache2/x509.d/"$site"/ca/crt.pem sudo install -m 664 -o www -g www \ "$tool"/var/pub/x509/"$site"/crt.pem \ /etc/apache2/x509.d/"$site"/crt.pem ;; esac case $site in (*-tls) cat <<-EOF AssignUserID www-$site www-$site BrowserMatch "MSIE [2-6]" ssl-unclean-shutdown nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown CustomLog "|/usr/sbin/rotatelogs /home/www/log/$site/apache2/access/%Y-%m-%d.log 86400 60" Combined #CustomLog "/dev/null" Combined DocumentRoot /home/www/pub/$site ErrorLog "|/usr/sbin/rotatelogs /home/www/log/$site/apache2/error/%Y-%m-%d.log 86400 60" #ErrorLog "/dev/null" LogLevel Warn SSLCACertificateFile /etc/apache2/x509.d/$site/crt.self-signed.pem SSLCACertificatePath /etc/apache2/x509.d/$site/usr/ #SSLCARevocationFile /etc/apache2/x509.d/$site/rvk.pem SSLCADNRequestFile /etc/apache2/x509.d/$site/crt.self-signed.pem SSLCADNRequestPath /etc/apache2/x509.d/$site/empty/ # NOTE: ne publie pas les certificats d’utilisateur-ice-s acceptés SSLCARevocationPath /etc/apache2/x509.d/$site/rvk/ SSLCertificateChainFile /etc/apache2/x509.d/$site/ca/crt.pem SSLCertificateFile /etc/apache2/x509.d/$site/crt.pem SSLCertificateKeyFile /etc/apache2/x509.d/$site/key.pem SSLCipherSuite AES+RSA+SHA256 SSLEngine On SSLInsecureRenegotiation Off SSLOptions +StrictRequire +OptRenegotiate +StdEnvVars SSLProtocol -All +TLSv1 #SSLRenegBufferSize 262144 SSLSessionCacheTimeout 1200 SSLStrictSNIVHostCheck On SSLUserName SSL_CLIENT_S_DN_CN SSLVerifyClient None SSLVerifyDepth 1 $(cat "$tool"/etc/apache2/site.d/"$site"/VirtualHost.conf) EOF ;; (*) cat <<-EOF AssignUserID www-$site www-$site CustomLog "|/usr/sbin/rotatelogs /home/www/log/$site/apache2/access/%Y-%m-%d.log 86400 60" Combined #CustomLog "/dev/null" Combined DocumentRoot /home/www/pub/$site ErrorLog "|/usr/sbin/rotatelogs /home/www/log/$site/apache2/error/%Y-%m-%d.log 86400 60" #ErrorLog "/dev/null" LogLevel Warn $(cat "$tool"/etc/apache2/site.d/"$site"/VirtualHost.conf) EOF ;; esac | sudo install -m 660 -o root -g root /dev/stdin \ /etc/apache2/site.d/"$site"/VirtualHost.conf sudo ln -fns \ ../site.d/"$site"/VirtualHost.conf \ /etc/apache2/sites-available/"$site" sudo install -d -m 770 -o www-"$site" -g www-"$site" \ /home/www/log/"$site" \ /home/www/log/"$site"/apache2 sudo ln -fns \ /etc/apache2/site.d/"$site" \ /home/www/etc/apache2/"$site" test -e /home/www/pub/"$site" || sudo install -d -m 2770 -o www-"$site" -g www-"$site" \ /home/www/pub/"$site" rule adduser www-"$site" --disabled-password \ --group \ --no-create-home \ --home /home/www/pub/"$site" \ --shell /bin/false \ --system #sudo setfacl -m u:"www-$site":--x \ # /home/www/ \ # /home/www/pub/ \ # /home/www/pub/"$site"/ #sudo setfacl -m d:u:"www-$site":rwx \ # "$home"/pub/www/"$site"/ test ! -r "$tool"/etc/apache2/site.d/"$site"/configure.sh || . "$tool"/etc/apache2/site.d/"$site"/configure.sh test -e /etc/apache2/sites-enabled/"$site" || sudo a2ensite "$site" done sudo service apache2 restart } rule_apt_configure () { sudo install -m 660 -o root -g root /dev/stdin /etc/apt/sources.list <<-EOF deb http://ftp.rezopole.net/debian $vm_lsb_name main EOF sudo install -m 660 -o root -g root /dev/stdin /etc/apt/sources.list.d/$vm_lsb_name-backports.list <<-EOF deb http://ftp.rezopole.net/debian $vm_lsb_name-backports main EOF sudo install -m 660 -o root -g root /dev/stdin /etc/apt/preferences <<-EOF Package: * Pin: release a=$vm_lsb_name Pin-Priority: 200 Package: * Pin: release a=$vm_lsb_name-backports Pin-Priority: 170 EOF sudo apt-get update rule apt_get_install apticron sudo install -m 644 -o root -g root /dev/stdin /etc/apticron/apticron.conf <<-EOF EMAIL="admin@$vm_domainname" # DIFF_ONLY="1" # LISTCHANGES_PROFILE="apticron" # ALL_FQDNS="1" # SYSTEM="foobar.example.com" # IPADDRESSNUM="1" # IPADDRESSES="192.0.2.1 2001:db8:1:2:3::1" # NOTIFY_HOLDS="0" # NOTIFY_NEW="0" # NOTIFY_NO_UPDATES="0" # CUSTOM_SUBJECT="" # CUSTOM_NO_UPDATES_SUBJECT="" # CUSTOM_FROM="root@$vm_fqdn" EOF } rule_boot_configure () { #warn "lors de l'installation Debian, surtout n'installer GRUB sur AUCUN disque proposé !" sudo debconf-set-selections <<-EOF grub-pc grub-pc/install_devices multiselect EOF rule apt_get_install grub-pc sudo install -d -m 644 -o root -g root /boot/grub rule apt_get_install linux-image-$vm_arch sudo install -m 644 -o root -g root /dev/stdin /etc/default/grub <<-EOF GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=\`lsb_release -i -s 2> /dev/null || echo Debian\` GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLINE_LINUX="vt.default_utf8=1 rootfstype=ext4 loglevel=5 console=hvc0 ip=$vm_ipv4::$vm_ipv4:255.255.255.254:$vm:eth0:off resume=/dev/mapper/${vm}_swap_deciphered" GRUB_DISABLE_RECOVERY="true" #GRUB_PRELOAD_MODULES="lvm" EOF sudo install -m 644 -o root -g root /dev/stdin /boot/grub/device.map <<-EOF (hd0) /dev/xvda (hd0) /dev/mapper/domU-$(printf %s $vm_fqdn-disk | sed -e 's/-/--/g') EOF sudo update-grub2 # NOTE: prend en compte /boot/grub/device.map rule initramfs_configure rule apt_get_install molly-guard sudo install -m 644 -o root -g root /dev/stdin /etc/molly-guard/rc <<-EOF ALWAYS_QUERY_HOSTNAME=true # NOTE: une alternative est de dire à sudo de conserver les SSH_* # néamoins demander tout le temps n'est pas trop contraignant # et davantage sécurisant. EOF } rule_dovecot_configure () { rule apt_get_install dovecot-imapd dovecot-managesieved dovecot-sieve rule insserv_remove dovecot local hint="run vm_remote dovecot_key_send before" assert "sudo test -f /etc/dovecot/\"$vm_domainname\"/imap/x509/key.pem" hint sudo install -m 400 -o root -g root \ "$tool"/var/pub/x509/imap."$vm_domainname"/crt+crl.self-signed.pem \ /etc/dovecot/"$vm_domainname"/imap/x509/crt+crl.self-signed.pem sudo install -d -m 770 -o root -g root \ /etc/skel/etc/mail \ /etc/skel/etc/sieve sudo install -d -m 1777 -o root -g root \ /var/lib/dovecot-control \ /var/lib/dovecot-index sudo install -m 664 -o root -g root /dev/stdin /etc/dovecot/local.conf <<-EOF auth_ssl_username_from_cert = yes listen = * log_timestamp = "%Y-%m-%d %H:%M:%S " mail_debug = yes mail_location = maildir:~/var/mail:INDEX=/var/lib/dovecot-index/%u:CONTROL=/var/lib/dovecot-control/%u # NOTE: INDEX et CONTROL sont sur une partition sans quota comme le demande la doc # VOIR: http://wiki2.dovecot.org/Quota/FS mail_plugins = \$mail_plugins quota mail_privileged_group = mail passdb { args = /home/%u/etc/dovecot/passwd driver = passwd-file } plugin { quota = fs:user recipient_delimiter = + sieve = ~/etc/mail/filter.sieve sieve_dir = ~/etc/mail/sieve sieve_global_dir = /var/lib/dovecot/sieve/global/ sieve_max_script_size = 1M sieve_quota_max_scripts = 0 sieve_quota_max_storage = 10M sieve_user_log = ~/var/log/mail/sieve.log } protocol imap { mail_plugins = \$mail_plugins imap_quota } protocol lda { auth_socket_path = /var/run/dovecot/auth-master hostname = $vm_domainname info_log_path = log_path = mail_plugins = \$mail_plugins sieve postmaster_address = contact+dovecot+lda@$vm_domainname syslog_facility = mail } protocols = imap sieve service auth { user = root unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } } ssl_ca = LABEL=${vm_lvm_lv}_boot /boot ext2 defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 /dev/mapper/${vm_lvm_lv}_root_deciphered / ext4 defaults,errors=remount-ro,acl,barrier=1,noatime 0 1 /dev/mapper/${vm_lvm_lv}_var_deciphered /var ext4 defaults,errors=remount-ro,acl,barrier=1,noatime 0 1 /dev/mapper/${vm_lvm_lv}_home_deciphered /home ext4 defaults,errors=remount-ro,acl,barrier=1,noatime,usrquota,grpquota 0 0 # NOTE: barrier=1 réduit drastiquement les performances d'écriture, mais garantit la cohérence du système de fichiers. /dev/mapper/${vm_lvm_lv}_swap_deciphered swap swap sw 0 0 EOF sudo install -m 644 -o root -g root /dev/stdin /etc/crypttab <<-EOF # ${vm_lvm_lv}_root_deciphered /dev/$vm_lvm_vg/${vm_lvm_lv}_root none luks,lvm=$vm_lvm_vg ${vm_lvm_lv}_var_deciphered /dev/$vm_lvm_vg/${vm_lvm_lv}_var ${vm_lvm_lv}_root_deciphered luks,lvm=$vm_lvm_vg,keyscript=/lib/cryptsetup/scripts/decrypt_derived ${vm_lvm_lv}_home_deciphered /dev/$vm_lvm_vg/${vm_lvm_lv}_home ${vm_lvm_lv}_root_deciphered luks,lvm=$vm_lvm_vg,keyscript=/lib/cryptsetup/scripts/decrypt_derived ${vm_lvm_lv}_swap_deciphered /dev/$vm_lvm_vg/${vm_lvm_lv}_swap ${vm_lvm_lv}_root_deciphered luks,lvm=$vm_lvm_vg,keyscript=/lib/cryptsetup/scripts/decrypt_derived EOF rule tmpfs_configure } rule_initramfs_configure () { sudo install -m 644 -o root -g root /dev/stdin /etc/initramfs-tools/initramfs.conf <<-EOF MODULES=most BUSYBOX=y KEYMAP=y COMPRESS=gzip DEVICE=eth0 EOF sudo install -m 644 -o root -g root /dev/stdin /etc/modprobe.d/xen-pv.conf <<-EOF alias eth0 xennet alias scsi_hostadapter xenblk EOF sudo install -m 644 -o root -g root /dev/stdin /etc/modules <<-EOF sha1_generic sha256_generic sha512_generic aes-x86_64 xts # NOTE: pour Xen en mode HVM : #modprobe xen-platform-pci EOF sudo install -m 644 -o root -g root /dev/stdin /etc/initramfs-tools/modules <<-EOF EOF sudo sed -e '/^configure_networking /s/ &$//' \ -i /usr/share/initramfs-tools/scripts/init-premount/dropbear # NOTE: corrige une vermine : dropbear doit attendre que le réseau soit configuré.. ssh-keygen -F "init.$vm_fqdn" -f "$tool"/etc/openssh/known_hosts | ( while IFS= read -r line do case $line in (*" RSA") return 0; break;; esac done; return 1 ) || { sudo rm -f \ /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key \ /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key.pub sudo dropbearkey -t rsa -s 4096 -f \ /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key } # NOTE: ne se préoccupe pas de dropbear_dss_host_key ; Debian la génère et l'utilise néamoins. sudo install -d -m 640 -o root -g root \ /etc/initramfs-tools/root \ /etc/initramfs-tools/root/.ssh getent group sudo | while IFS=: read -r group x x users do while test -n "$users" && IFS=, read -r user users <<-EOF $users EOF do eval local home\; home="~$user" sudo cat "$home"/etc/ssh/authorized_keys done done | sudo install -m 644 -o root -g root /dev/stdin \ /etc/initramfs-tools/root/.ssh/authorized_keys sudo rm -f \ /etc/initramfs-tools/root/.ssh/id_rsa.dropbear \ /etc/initramfs-tools/root/.ssh/id_rsa.pub \ /etc/initramfs-tools/root/.ssh/id_rsa # NOTE: clefs générées par Debian sudo update-initramfs -u } rule_insserv_remove () { # SYNTAX: $sv local sv="$1" sudo chmod u+x /etc/init.d/"$sv" sudo insserv --force --remove "$sv" sudo /etc/init.d/"$sv" stop sudo chmod ugo-x /etc/init.d/"$sv" } rule_gitolite_configure () { sudo debconf-set-selections <<-EOF gitolite gitolite/gituser string git gitolite gitolite/adminkey string gitolite gitolite/gitdir string /home/git EOF rule apt_get_install gitolite rule adduser git \ --disabled-password \ --group \ --home /home/git \ --shell /bin/bash \ --system sudo chfn --full-name git git rule adduser log-git \ --disabled-login \ --disabled-password \ --group \ --home /home/git/log \ --shell /bin/false \ --system rule adduser git-data \ --disabled-login \ --disabled-password \ --group \ --home /home/git/pub \ --shell /bin/false \ --system sudo adduser git git-data sudo install -d -m 750 -o git -g git \ /etc/gitolite \ /home/git/etc \ /home/git/etc/ssh sudo install -d -m 751 -o git -g git \ /home/git sudo install -d -m 2770 -o git-data -g git-data \ /home/git/pub sudo install -d -m 1771 -o git -g git \ /home/git/log sudo install -d -m 2770 -o git -g log-git \ /home/git/log/gitolite \ /home/git/log/gitolite/perf sudo install -d -m 3771 -o git -g git \ /home/git/hooks sudo ln -fns /etc/gitolite /home/git/etc/gitolite sudo ln -fns /etc/gitweb /home/git/etc/gitweb sudo ln -fns etc/gitolite/gitolite.rc /home/git/.gitolite.rc sudo ln -fns etc/ssh /home/git/.ssh sudo install -m 770 -o git -g git /dev/stdin \ /home/git/etc/gitolite/gitolite.rc <<-EOF #\$ADMIN_POST_UPDATE_CHAINS_TO = "hooks/post-update.secondary"; #\$BIG_INFO_CAP = 20; #\$ENV{GL_SLAVES} = 'gitolite@server2 gitolite@server3'; # NOTE: Please use single quotes, not double quotes. #\$GITWEB_URI_ESCAPE = 0; \$GIT_PATH = ""; #\$GL_ADC_PATH = ""; \$GL_ADMINDIR = \$ENV{HOME} . "/etc/gitolite"; #\$GL_ALL_INCLUDES_SPECIAL = 0; #\$GL_ALL_READ_ALL = 0; \$GL_BIG_CONFIG = 0; \$GL_CONF = "\$GL_ADMINDIR/conf/gitolite.conf"; \$GL_CONF_COMPILED = "\$GL_ADMINDIR/conf/gitolite.conf.pm"; #\$GL_GET_MEMBERSHIPS_PGM = "/usr/local/bin/expand-ldap-user-to-groups" \$GL_GITCONFIG_KEYS = "gitweb\\..* hooks\\..*"; #\$GL_HOSTNAME = "git.$vm_domainname"; # NOTE: read doc/mirroring.mkd COMPLETELY before setting this. #\$GL_HTTP_ANON_USER = "mob"; \$GL_KEYDIR = "\$GL_ADMINDIR/keydir"; \$GL_LOGT = \$ENV{HOME} . "/log/gitolite/%y-%m-%d.log"; #\$GL_NICE_VALUE = 0; \$GL_NO_CREATE_REPOS = 0; \$GL_NO_DAEMON_NO_GITWEB = 0; \$GL_NO_SETUP_AUTHKEYS = 0; \$GL_PACKAGE_CONF = "/usr/share/gitolite/conf"; \$GL_PACKAGE_HOOKS = "/usr/share/gitolite/hooks"; #\$GL_PERFLOGT = \$ENV{HOME} . "/log/gitolite/perf/%y-%m-%d.log"; #\$GL_REF_OR_FILENAME_PATT = qr(^[0-9a-zA-Z][0-9a-zA-Z._\\@/+ :,-]*\$); \$GL_SITE_INFO = "git.$vm_domainname"; #\$GL_SLAVE_MODE = 0; \$GL_WILDREPOS = 0; #\$GL_WILDREPOS_DEFPERMS = 'R @all'; \$GL_WILDREPOS_PERM_CATS = "READERS WRITERS"; \$HTPASSWD_FILE = ""; \$PROJECTS_LIST = \$ENV{HOME} . "/etc/gitweb/projects.list"; \$REPO_BASE = "pub"; \$REPO_UMASK = 0007; \$RSYNC_BASE = ""; \$SVNSERVE = ""; #\$UPDATE_CHAINS_TO = "hooks/update.secondary"; \$WEB_INTERFACE = "gitweb"; 1; EOF sudo install -m 600 -o git -g git \ "$tool"/var/pub/ssh/git.key \ /home/git/etc/ssh/git.pub sudo -u git \ GL_RC=/home/git/etc/gitolite/gitolite.rc \ GIT_AUTHOR_NAME=git \ gl-setup -q /home/git/etc/ssh/git.pub git local d for d in doc logs src do test ! -d /home/git/etc/gitolite/"$d" || rmdir /home/git/etc/gitolite/"$d" done rule tmpfs_configure } rule_locales_configure () { sudo debconf-set-selections <<-EOF locales locales/default_environment_locale select None locales locales/locales_to_be_generated multiselect fr_FR.UTF-8 UTF-8 EOF rule dpkg_reconfigure locales } rule_login_configure () { sudo install -m 644 -o root -g root /dev/stdin /etc/inittab <<-EOF # /etc/inittab: init(8) configuration. # The default runlevel. id:2:initdefault: # Boot-time system configuration/initialization script. # This is run first except when booting in emergency (-b) mode. si::sysinit:/etc/init.d/rcS # What to do in single-user mode. ~~:S:wait:/sbin/sulogin # /etc/init.d executes the S and K scripts upon change # of runlevel. # # Runlevel 0 is halt. # Runlevel 1 is single-user. # Runlevels 2-5 are multi-user. # Runlevel 6 is reboot. l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 # Normally not reached, but fallthrough in case of emergency. z6:6:respawn:/sbin/sulogin # What to do when CTRL-ALT-DEL is pressed. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now # What to do when the power fails/returns. pf::powerwait:/etc/init.d/powerfail start pn::powerfailnow:/etc/init.d/powerfail now po::powerokwait:/etc/init.d/powerfail stop # Xen hypervisor console hvc:2345:respawn:/sbin/getty 38400 hvc0 #xvc:2345:respawn:/sbin/getty 38400 xvc0 #-- runit begin SV:123456:respawn:/usr/sbin/runsvdir-start #-- runit end EOF sudo install -m 644 -o root -g root /dev/stdin /etc/login.defs <<-EOF MAIL_DIR /var/mail FAILLOG_ENAB yes LOG_UNKFAIL_ENAB no LOG_OK_LOGINS no SYSLOG_SU_ENAB yes SYSLOG_SG_ENAB yes FTMP_FILE /var/log/btmp SU_NAME su HUSHLOGIN_FILE .hushlogin ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # NOTE: met les sbin/ dans ENV_PATH ; # - ça n'apporte aucune protection de ne pas les mettre ; # - ça frustre de ne pas les trouver. TTYGROUP tty TTYPERM 0600 ERASECHAR 0177 KILLCHAR 025 UMASK 007 # NOTE: rwxrwx--- ; # - donne une même confiance au groupe propriétaire qu'au propriétaire ; # - facilite l'utilisation des ACL, qui sont dépendantes des droits du groupe propriétaire. PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_WARN_AGE 7 UID_MIN 1000 UID_MAX 60000 GID_MIN 1000 GID_MAX 60000 LOGIN_RETRIES 3 LOGIN_TIMEOUT 60 CHFN_RESTRICT rwh DEFAULT_HOME yes USERGROUPS_ENAB yes ENCRYPT_METHOD SHA512 EOF grep -q '^session optional pam_umask.so\>' /etc/pam.d/common-session || sudo install -m 644 -o root -g root /dev/stdin /etc/pam.d/common-session <<-EOF $(cat /etc/pam.d/common-session) session optional pam_umask.so EOF grep -q '^hvc0$' /etc/securetty || sudo install -m 644 -o root -g root /dev/stdin /etc/securetty <<-EOF $(cat /etc/securetty) hvc0 EOF grep -q '^xvc0$' /etc/securetty || sudo install -m 644 -o root -g root /dev/stdin /etc/securetty <<-EOF $(cat /etc/securetty) xvc0 EOF } rule_mail_configure () { rule postfix_configure rule postgrey_configure rule procmail_configure rule dovecot_configure } rule_mysql_configure () { rule apt_get_install mysql-server-5.5 rule insserv_remove mysql rule adduser mysql \ --disabled-login \ --disabled-password \ --group \ --home /home/mysql \ --shell /bin/false \ --system rule adduser mysql-data \ --disabled-login \ --disabled-password \ --group \ --home /home/mysql/data \ --no-create-home \ --shell /bin/false \ --system sudo usermod --home /home/mysql mysql sudo adduser mysql mysql-data sudo install -d -m 751 -o mysql -g mysql \ /home/mysql sudo rm -rf /etc/mysql sudo install -d -m 750 -o mysql -g mysql \ /etc/mysql \ /etc/mysql/conf.d \ /home/mysql/etc sudo ln -fns \ /etc/mysql \ /home/mysql/etc/mysql sudo install -m 644 -o mysql -g mysql \ "$tool"/etc/mysql/my.cnf \ /etc/mysql/my.cnf if sudo test ! -d /home/mysql/data then sudo install -d -m 750 -o mysql -g mysql-data \ /home/mysql/data sudo -u mysql mysql_install_db \ --datadir=/home/mysql/data \ --no-defaults fi rule tmpfs_configure rule runit_sv_configure mysql rule runit_sv_restart mysql while ! sudo -u mysql mysql -u mysql