#!/bin/sh /etc/rc.common . /lib/functions.sh START=95 STOP=10 USE_PROCD=1 BACKUPPC_BIN="/usr/share/backuppc/bin/BackupPC" BACKUPPC_USER=backuppc # it would be better if it was possible to do this at install time, but we # can't, because in case of an openwrt image bundled with backuppc, all # ownerships other than root are lost. preconfigure() { # create backuppc group and user if needed if ! group_exists backuppc; then group_add backuppc 864 fi if ! user_exists backuppc; then user_add backuppc 864 864 "BackupPC user" /data/backuppc /bin/sh fi # install default config if none exists, yet if [ ! -e /data/backuppc/conf/config.pl ]; then cp /usr/share/backuppc/conf/config.pl /data/backuppc/conf/config.pl fi # ensure proper ownerships and rights chown backuppc:backuppc /data/backuppc /data/backuppc/* \ /www/cgi-bin/BackupPC_Admin chmod 750 /data/backuppc /data/backuppc/* chmod 755 /usr/share/backuppc/bin/BackupPC_Admin_real # The CGI needs to be world-executable, because uhttpd-cgi.c:386 checks # for exactly that. We don't want that, but can't avoid it, currently. chmod 6751 /www/cgi-bin/BackupPC_Admin chown -R :backuppc /data/backuppc/conf chmod 2770 /data/backuppc/conf # protect webinterface with a random password by default if [ -x /usr/sbin/uhttpd ] && ! grep -q backuppc /etc/httpd.conf >/dev/null 2>&1; then PASS=$(perl -e 'print map{("a".."z","A".."Z",0..9)[int(rand(62))]}(1..8)') PASSHASH=$(/usr/sbin/uhttpd -m "${PASS}") echo "/cgi-bin/BackupPC_Admin:backuppc:${PASSHASH}" >> /etc/httpd.conf uci set uhttpd.main.config=/etc/httpd.conf /etc/init.d/uhttpd restart # inform user echo echo "To protect access to the backuppc web interface, HTTP basic authentication in" echo "uhttpd for http://$(/sbin/uci get "system.@system[0].hostname")/cgi-bin/BackupPC_Admin has been configured:" echo "user: backuppc" echo "pass: ${PASS}" echo echo "It is also recommended to follow the steps in" echo "https://openwrt.org/docs/guide-user/services/webserver/uhttpd#securing_uhttpd" echo "to secure access to uhttpd." fi } start_service() { # don't run preconfigure steps if called during image build if [ -z "${IPKG_INSTROOT}" ]; then preconfigure fi procd_open_instance procd_set_param user $BACKUPPC_USER procd_set_param reload_signal 1 procd_set_param command $BACKUPPC_BIN }