backuppc_client/client/fix_backuppc_linux_sudo.sh

102 lines
3.0 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# S'assurer que BackupPC peux exécuter rsync avec les droits sudo
# Jérémy GARDAIS — Mai 2018
# .. vim: foldmarker=[[[,]]]:foldmethod=marker
# Vars [[[
SUCCESS=0
ERROR=1
DEBUG=1
EUID=$(id -u)
BACKUP_USER_LOGIN="backup"
SUDOERS_LINE_REGEXP="backuppc.*ALL.*=.*(ALL:ALL).*NOEXEC:NOPASSWD:.*/usr/bin/rsync"
SUDOERS_LINE="backup ALL=(ALL:ALL) NOEXEC:NOPASSWD: /usr/bin/rsync
backuppc ALL=(ALL:ALL) NOEXEC:NOPASSWD: /usr/bin/rsync"
SUDOERS_FILE="/etc/sudoers.d/backuppc_noexec"
# ]]]
# Functions [[[
is_user() ## [[[
{
user_to_check="${1}"
if [ "$(id -- "${user_to_check}" 2> /dev/null)" ] ; then
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Function is_user() — ${user_to_check} user is available."
return "${SUCCESS}"
else
printf '\e[1;31m%-6s\e[m\n' "ERROR: Function is_user() — ${user_to_check} user is unavailable."
exit "${ERROR}"
fi
}
## ]]]
is_sudoers_line() ## [[[
{
line_to_check="${1}"
if grep -Rq -- "${line_to_check}" /etc/sudoers.d/
then
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Function is_sudoers_line() — ${line_to_check} line is available in sudo configuration."
return "${SUCCESS}"
else
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Function is_sudoers_line() — ${line_to_check} was not found in sudo configuration."
return "${ERROR}"
fi
}
## ]]]
add_sudoers_conf() ## [[[
{
sudoers_conf="${1}"
sudoers_file="${2}"
## Empty sudoers file
true > "${sudoers_file}"
## Set sudoers configuration for BackupPC
cat << EOF >> "${sudoers_file}"
# This file was generated by fix_backuppc_linux_sudo.sh script.
# Permissions for BackupPC - Backup tool
${sudoers_conf}
EOF
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Function add_sudoers_conf() — ${sudoers_file} was modified."
}
## ]]]
# ]]]
# Test permissions [[[
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Check admin rights."
if [ "${EUID}" -ne "0" ]; then
printf '\e[1;31m%-6s\e[m\n' "ERROR: You need to run with SUDO/Admin permissions."
exit "${ERROR}"
fi
# ]]]
# Ensure the backup user is available
is_user "${BACKUP_USER_LOGIN}"
# Test if sudoers conf is already set
if ! is_sudoers_line "${SUDOERS_LINE_REGEXP}"
then
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: First try — ${SUDOERS_LINE_REGEXP} was not found in sudo configuration."
## Add sudoers configuration
add_sudoers_conf "${SUDOERS_LINE}" "${SUDOERS_FILE}"
## Test if sudoers conf was successfully modified
if ! is_sudoers_line "${SUDOERS_LINE_REGEXP}"
then
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: Second try — ${SUDOERS_LINE_REGEXP} was not found in sudo configuration."
printf '\e[1;31m%-6s\e[m\n' "ERROR: The sudo configuration was not successfully modified."
printf '\e[1;31m%-6s\e[m\n' "ERROR: Please contact your administrator."
exit "${ERROR}"
fi
fi
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6s\e[m\n' "DEBUG: End"
printf '%b\n' "Your configuration is set up."
exit "${SUCCESS}"