diff --git a/autoconf/configure.in b/autoconf/configure.in index dcbc10db7e9..c084776dd21 100644 --- a/autoconf/configure.in +++ b/autoconf/configure.in @@ -3513,6 +3513,10 @@ fi AC_OUTPUT([autoconf/Make.common \ Makefile \ manpages/Makefile \ + debian/bareos-common.preinst \ + debian/bareos-filedaemon.preinst \ + debian/bareos-director.preinst \ + debian/bareos-storage.preinst \ scripts/bareos-config \ scripts/btraceback \ scripts/bconsole \ diff --git a/debian/bareos-common.preinst b/debian/bareos-common.preinst.in similarity index 51% rename from debian/bareos-common.preinst rename to debian/bareos-common.preinst.in index 98c8b4f5719..7518a82343c 100644 --- a/debian/bareos-common.preinst +++ b/debian/bareos-common.preinst.in @@ -16,37 +16,34 @@ set -e daemon_user=bareos daemon_group=bareos -working_dir=/var/lib/bareos +WORKING_DIR="@working_dir@" + create_group() { - # creating group if he isn't already there - if ! getent group $daemon_group >/dev/null; then - # Adding system group - addgroup --system $daemon_group >/dev/null - fi + [ -z "$1" ] && return + # creating group if he isn't already there. + # use addgroup instead of groupadd, + # because "addgroup" uses the next available number, + # while "groupadd" uses uses GID_MIN -1 (999) + getent group $1 > /dev/null || addgroup -q --system $1 } create_user() { - # creating user if he isn't already there - if ! getent passwd $daemon_user >/dev/null; then - # Adding system user - adduser \ - --system \ - --disabled-login \ - --ingroup $daemon_group \ - --home $working_dir \ - --gecos "Bareos" \ - --shell /bin/false \ - $daemon_user >/dev/null - fi + [ -z "$1" ] && return + # creating user if he isn't already there. + # use adduser instead of useradd, + # because "adduser" uses the next available number, + # while "useradd" uses uses UID_MIN -1 (999) + getent passwd $1 > /dev/null || adduser -q --system --ingroup $daemon_group --home "$WORKING_DIR" --no-create-home --gecos "$1" $1 } + case "$1" in install|upgrade) - create_group - create_user + create_group $daemon_group + create_user $daemon_user ;; abort-upgrade) diff --git a/debian/bareos-director.preinst b/debian/bareos-director.preinst deleted file mode 100644 index 5b3558e2c29..00000000000 --- a/debian/bareos-director.preinst +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/sh -# preinst script for bareos -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `install' -# * `install' -# * `upgrade' -# * `abort-upgrade' -# for details, see http://www.debian.org/doc/debian-policy/ or -# the debian-policy package - -daemon_user=bareos -daemon_group=bareos - -director_daemon_user=$daemon_user -#storage_daemon_user=$daemon_user -#file_daemon_user=root -#storage_daemon_group=$daemon_group - -working_dir=/var/lib/bareos - -create_group() -{ - # creating group if he isn't already there - if ! getent group $daemon_group >/dev/null; then - # Adding system group - addgroup --system $daemon_group >/dev/null - fi -} - -create_user() -{ - # creating user if he isn't already there - if ! getent passwd $director_daemon_user >/dev/null; then - # Adding system user - adduser \ - --system \ - --disabled-login \ - --ingroup $daemon_group \ - --home $working_dir \ - --gecos "Bareos" \ - --shell /bin/false \ - $director_daemon_user >/dev/null -fi -} - -case "$1" in - install|upgrade) - create_group - create_user - ;; - - abort-upgrade) - ;; - - *) - echo "preinst called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 diff --git a/debian/bareos-director.preinst.in b/debian/bareos-director.preinst.in new file mode 100644 index 00000000000..f788800b0d2 --- /dev/null +++ b/debian/bareos-director.preinst.in @@ -0,0 +1,63 @@ +#!/bin/sh +# preinst script for bareos +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +daemon_group=@dir_group@ +daemon_user=@dir_user@ + +WORKING_DIR="@working_dir@" + + +create_group() +{ + [ -z "$1" ] && return + # creating group if he isn't already there. + # use addgroup instead of groupadd, + # because "addgroup" uses the next available number, + # while "groupadd" uses uses GID_MIN -1 (999) + getent group $1 > /dev/null || addgroup -q --system $1 +} + +create_user() +{ + [ -z "$1" ] && return + # creating user if he isn't already there. + # use adduser instead of useradd, + # because "adduser" uses the next available number, + # while "useradd" uses uses UID_MIN -1 (999) + getent passwd $1 > /dev/null || adduser -q --system --ingroup $daemon_group --home "$WORKING_DIR" --no-create-home --gecos "$1" $1 +} + + +case "$1" in + install|upgrade) + create_group ${daemon_group} + create_user ${daemon_user} + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/bareos-filedaemon.preinst b/debian/bareos-filedaemon.preinst deleted file mode 100644 index c3b7aba1dee..00000000000 --- a/debian/bareos-filedaemon.preinst +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/sh -# preinst script for bareos -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `install' -# * `install' -# * `upgrade' -# * `abort-upgrade' -# for details, see http://www.debian.org/doc/debian-policy/ or -# the debian-policy package - -daemon_user=bareos -daemon_group=bareos - -#director_daemon_user=$daemon_user -#storage_daemon_user=$daemon_user -#file_daemon_user=root -#storage_daemon_group=$daemon_group - -working_dir=/var/lib/bareos - -create_group() -{ - # creating group if he isn't already there - if ! getent group $daemon_group >/dev/null; then - # Adding system group - addgroup --system $daemon_group >/dev/null - fi -} - -create_user() -{ - # creating user if he isn't already there - if ! getent passwd $director_daemon_use >/dev/null; then - # Adding system user - adduser \ - --system \ - --disabled-login \ - --ingroup $daemon_group \ - --home $working_dir \ - --gecos "Bareos" \ - --shell /bin/false \ - $director_daemon_user >/dev/null -fi -} - -case "$1" in - install|upgrade) - create_group - #create_user - ;; - - abort-upgrade) - ;; - - *) - echo "preinst called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 diff --git a/debian/bareos-filedaemon.preinst.in b/debian/bareos-filedaemon.preinst.in new file mode 100644 index 00000000000..f788800b0d2 --- /dev/null +++ b/debian/bareos-filedaemon.preinst.in @@ -0,0 +1,63 @@ +#!/bin/sh +# preinst script for bareos +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +daemon_group=@dir_group@ +daemon_user=@dir_user@ + +WORKING_DIR="@working_dir@" + + +create_group() +{ + [ -z "$1" ] && return + # creating group if he isn't already there. + # use addgroup instead of groupadd, + # because "addgroup" uses the next available number, + # while "groupadd" uses uses GID_MIN -1 (999) + getent group $1 > /dev/null || addgroup -q --system $1 +} + +create_user() +{ + [ -z "$1" ] && return + # creating user if he isn't already there. + # use adduser instead of useradd, + # because "adduser" uses the next available number, + # while "useradd" uses uses UID_MIN -1 (999) + getent passwd $1 > /dev/null || adduser -q --system --ingroup $daemon_group --home "$WORKING_DIR" --no-create-home --gecos "$1" $1 +} + + +case "$1" in + install|upgrade) + create_group ${daemon_group} + create_user ${daemon_user} + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/bareos-storage.postinst b/debian/bareos-storage.postinst index 71eac88341a..252d105c58b 100644 --- a/debian/bareos-storage.postinst +++ b/debian/bareos-storage.postinst @@ -40,6 +40,7 @@ enable_rc_scripts() case "$1" in configure) permissions + /usr/lib/bareos/scripts/bareos-config setup_sd_user /usr/lib/bareos/scripts/bareos-config initialize_local_hostname /usr/lib/bareos/scripts/bareos-config initialize_passwords enable_rc_scripts diff --git a/debian/bareos-storage.preinst b/debian/bareos-storage.preinst deleted file mode 100644 index d8c898ac735..00000000000 --- a/debian/bareos-storage.preinst +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/sh -# preinst script for bareos -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `install' -# * `install' -# * `upgrade' -# * `abort-upgrade' -# for details, see http://www.debian.org/doc/debian-policy/ or -# the debian-policy package - -daemon_user=bareos -daemon_group=bareos - -#director_daemon_user=$daemon_user -storage_daemon_user=$daemon_user -#file_daemon_user=root -storage_daemon_group=$daemon_group - -working_dir=/var/lib/bareos - -create_group() -{ - # creating group if he isn't already there - if ! getent group $daemon_group >/dev/null; then - # Adding system group - addgroup --system $daemon_group >/dev/null - fi -} - -create_user() -{ - # creating user if he isn't already there - if ! getent passwd $storage_daemon_user >/dev/null; then - # Adding system user - adduser \ - --system \ - --disabled-login \ - --ingroup $storage_daemon_group \ - --home $working_dir \ - --gecos "Bareos" \ - --shell /bin/false \ - $storage_daemon_user >/dev/null - fi -} - -case "$1" in - install|upgrade) - create_group - create_user - ;; - - abort-upgrade) - ;; - - *) - echo "preinst called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 diff --git a/debian/bareos-storage.preinst.in b/debian/bareos-storage.preinst.in new file mode 100644 index 00000000000..f788800b0d2 --- /dev/null +++ b/debian/bareos-storage.preinst.in @@ -0,0 +1,63 @@ +#!/bin/sh +# preinst script for bareos +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +daemon_group=@dir_group@ +daemon_user=@dir_user@ + +WORKING_DIR="@working_dir@" + + +create_group() +{ + [ -z "$1" ] && return + # creating group if he isn't already there. + # use addgroup instead of groupadd, + # because "addgroup" uses the next available number, + # while "groupadd" uses uses GID_MIN -1 (999) + getent group $1 > /dev/null || addgroup -q --system $1 +} + +create_user() +{ + [ -z "$1" ] && return + # creating user if he isn't already there. + # use adduser instead of useradd, + # because "adduser" uses the next available number, + # while "useradd" uses uses UID_MIN -1 (999) + getent passwd $1 > /dev/null || adduser -q --system --ingroup $daemon_group --home "$WORKING_DIR" --no-create-home --gecos "$1" $1 +} + + +case "$1" in + install|upgrade) + create_group ${daemon_group} + create_user ${daemon_user} + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/platforms/rpms/bareos.spec b/platforms/rpms/bareos.spec index 940b0fb00ea..589d6dc654e 100644 --- a/platforms/rpms/bareos.spec +++ b/platforms/rpms/bareos.spec @@ -823,6 +823,15 @@ echo "This is a meta package to install a full bareos system" > %{buildroot}%{_d %nil %endif +%define create_group() \ +getent group %1 > /dev/null || groupadd -r %1 \ +%nil + +# shell: use /bin/false, because nologin has different paths on different distributions +%define create_user() \ +getent passwd %1 > /dev/null || useradd -r --comment "%1" --home %{working_dir} -g %{daemon_group} --shell /bin/false %1 \ +%nil + %post director %{script_dir}/bareos-config initialize_local_hostname %{script_dir}/bareos-config initialize_passwords @@ -830,6 +839,9 @@ echo "This is a meta package to install a full bareos system" > %{buildroot}%{_d %add_service_start bareos-dir %post storage +# pre script has already generated the storage daemon user, +# but here we add the user to additional groups +%{script_dir}/bareos-config setup_sd_user %{script_dir}/bareos-config initialize_local_hostname %{script_dir}/bareos-config initialize_passwords %add_service_start bareos-sd @@ -888,73 +900,23 @@ echo "This is a meta package to install a full bareos system" > %{buildroot}%{_d %endif %pre director -if [ "%{director_daemon_user}" != "root" -a "%{director_daemon_user}" != "%{daemon_user}" ]; then - getent passwd %{director_daemon_user} > /dev/null || useradd -r -c "Bareos" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{director_daemon_user} -fi +%create_group %{daemon_group} +%create_user %{director_daemon_user} exit 0 %pre storage -# -# See what secondary groups exist for the sd user to be added to. -# -SEC_GROUPS="tape disk" -ADD_GROUPS="" -for sec_group in ${SEC_GROUPS} -do - cnt=`getent group ${sec_group} | wc -l` - if [ ${cnt} -gt 0 ]; then - [ -z ${ADD_GROUPS} ] && ADD_GROUPS="${sec_group}" || ADD_GROUPS="${ADD_GROUPS},${sec_group}" - fi -done - -if [ "%{storage_daemon_group}" != "%{daemon_group}" ]; then - getent group %{storage_daemon_group} > /dev/null || groupadd -r %{storage_daemon_group} -fi - -# -# If the user doesn't exist create a new one otherwise modify it to have -# the wanted secondary groups. -# -if [ "%{storage_daemon_user}" != "root" -a "%{storage_daemon_user}" != "%{daemon_user}" ]; then - getent passwd %{storage_daemon_user} > /dev/null - if [ $? = 0 ]; then - # - # Make sure the correct primary group is set otherwise fix it. - # - if [ `id -gn %{storage_daemon_user}` != %{storage_daemon_group} ]; then - usermod -g %{storage_daemon_group} %{storage_daemon_user} - fi - # - # Make sure storage_daemon_user is part of the wanted secondary groups - # - usermod -G ${ADD_GROUPS} %{storage_daemon_user} - else - # - # Create a new storage_daemon_user - # - useradd -r -c "Bareos" -d %{working_dir} -g %{storage_daemon_group} -M -s /sbin/nologin %{storage_daemon_user} - # - # Make sure storage_daemon_user is part of the wanted secondary groups - # - usermod -G ${ADD_GROUPS} %{storage_daemon_user} - fi -else - # - # Make sure storage_daemon_user is part of the wanted secondary groups - # - usermod -G ${ADD_GROUPS} %{storage_daemon_user} -fi +%create_group %{daemon_group} +%create_user %{storage_daemon_user} exit 0 %pre filedaemon -if [ "%{file_daemon_user}" != "root" -a "%{file_daemon_user}" != "%{daemon_user}" ]; then - getent passwd %{file_daemon_user} > /dev/null || useradd -r -c "Bareos" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{file_daemon_user} -fi +%create_group %{daemon_group} +%create_user %{storage_daemon_user} exit 0 %pre common -getent group %{daemon_group} > /dev/null || groupadd -r %{daemon_group} -getent passwd %{daemon_user} > /dev/null || useradd -r -c "Bareos" -d %{working_dir} -g %{daemon_group} -M -s /sbin/nologin %{daemon_user} +%create_group %{daemon_group} +%create_user %{daemon_user} exit 0 %preun director diff --git a/scripts/bareos-config.in b/scripts/bareos-config.in index e410837412e..0d20d8f537d 100644 --- a/scripts/bareos-config.in +++ b/scripts/bareos-config.in @@ -4,6 +4,16 @@ DIR_CFG=@sysconfdir@ CFG_DIR=${DIR_CFG}/bareos-dir.conf DIR_SCRIPTS=@scriptdir@ +SEC_GROUPS="tape disk" + +WORKING_DIR="@working_dir@" +FILE_DAEMON_USER="@fd_user@" +FILE_DAEMON_GROUP="@fd_group@" +STORAGE_DAEMON_USER="@sd_user@" +STORAGE_DAEMON_GROUP="@sd_group@" +DIRECTOR_DAEMON_USER="@dir_user@" +DIRECTOR_DAEMON_GROUP="@dir_group@" + PASSWORD_SUBST="\ XXX_REPLACE_WITH_DIRECTOR_PASSWORD_XXX \ XXX_REPLACE_WITH_CLIENT_PASSWORD_XXX \ @@ -13,6 +23,8 @@ XXX_REPLACE_WITH_CLIENT_MONITOR_PASSWORD_XXX \ XXX_REPLACE_WITH_STORAGE_MONITOR_PASSWORD_XXX \ " +os_type=`uname -s` + usage() { cat <<-EOT @@ -48,32 +60,84 @@ is_function() get_user_fd() { - echo "@fd_user@" + echo "${FILE_DAEMON_USER}" } get_group_fd() { - echo "@fd_group@" + echo "${FILE_DAEMON_GROUP}" } get_user_sd() { - echo "@sd_user@" + echo "${STORAGE_DAEMON_USER}" } get_group_sd() { - echo "@sd_group@" + echo "${STORAGE_DAEMON_GROUP}" } get_user_dir() { - echo "@dir_user@" + echo "${DIRECTOR_DAEMON_USER}" } get_group_dir() { - echo "@dir_group@" + echo "${DIRECTOR_DAEMON_GROUP}" +} + +[ ${os_type} = Linux ] && \ +setup_sd_user() +{ + # + # guaranties that storage-daemon user and group exists + # and storage-daemon user belongs to the required groups. + # + # normally, storage-daemon user + # is already installed by the package preinstall script. + # + + # + # See what secondary groups exist for the sd user to be added to. + # + ADD_GROUPS="" + for sec_group in ${SEC_GROUPS}; do + cnt=`getent group ${sec_group} | wc -l` + if [ ${cnt} -gt 0 ]; then + [ -z "${ADD_GROUPS}" ] && ADD_GROUPS="-G ${sec_group}" || ADD_GROUPS="${ADD_GROUPS},${sec_group}" + fi + done + + getent group ${STORAGE_DAEMON_GROUP} > /dev/null || groupadd -r ${STORAGE_DAEMON_GROUP} + + # + # If the user doesn't exist create a new one otherwise modify it to have the wanted secondary groups. + # + if [ "${STORAGE_DAEMON_USER}" != "root" ]; then + getent passwd ${STORAGE_DAEMON_USER} > /dev/null + if [ $? -ne 0 ]; then + # create a new storage_daemon_user + useradd -r --comment "bareos" --home ${WORKING_DIR} -g ${STORAGE_DAEMON_GROUP} ${ADD_GROUPS} --shell /bin/false ${STORAGE_DAEMON_USER} + fi + + # if the user has already created before, + # make sure the correct primary group is set otherwise fix it. + if [ "`id -gn ${STORAGE_DAEMON_USER}`" != "${STORAGE_DAEMON_GROUP}" ]; then + usermod -g ${STORAGE_DAEMON_GROUP} ${STORAGE_DAEMON_USER} + fi + + # add the storage_daemon_user to additional groups (if defined) + [ "${ADD_GROUPS}" ] && usermod ${ADD_GROUPS} ${STORAGE_DAEMON_USER} + fi +} + +[ ${os_type} != Linux ] && \ +setup_sd_user() +{ + echo "setup_sd_user() is not supported on this platform" + exit 1 } get_database_driver()