21x9.org | System Administration | Home Automation | Smart Home
30.01.2013

sudo: Partielle root-Rechte

Der Befehl sudo ist praktisch um bestimmten Benutzerkennungen die Möglichkeit zu geben Befehle mit root-Rechten auszuführen. Schwierig wird es aber manchmal dann, wenn diese Benutzer nur bestimmte Befehle mit diesen erweiterten Rechten ausführen können sollen. Grundsätzlich ist es zwar möglich nur bestimmte Befehle freizugeben (oder auch bestimmte Befehle zu verbieten), aber auch harmlos erscheinende Befehle wie chmod können ausreichen um weitere Rechte zu erlangen.

Hier ist es besser ein kleines Script zu erstellen, welches vom Benutzer mit sudo aufgerufen werden kann und dort die benötigten Befehle (eventuell sogar mit entsprechenden Parametern) zu hinterlegen:

#!/bin/bash

if (( `id -u` != 0 )); then 
    echo "Are you root?

Always use 'sudo' when executing this script."
    exit 1
fi

case $1 in
    install)
    echo "Install $2"
    apt-get install $2
    exit 0
    ;;
    restart)
    echo "Restart service $2"
    /etc/init.d/$2 restart
    exit 0
    ;;
    reconfigure)
    echo "Reconfigure $2"
    dpkg-reconfigure $2
    exit 0
    ;;
    crontab)
    echo "Change crontab"
    if [ -z $2 ]; then
        crontab -e
    else
        crontab -l
    fi
    exit 0
    ;;
    phpini)
    echo "Edit php.ini"
    rmcedit /etc/php5/apache2/php.ini
    if [ -z $2 ]; then
        /etc/init.d/apache2 restart
    fi
    exit 0
    ;;
    setrights)
    echo "Setting access rights"
    chown www-data:www-data /var/www -R
    chmod 775 /var/www -R
    exit 0
    ;;
    *)
    echo "
Usage: 
Use sudo when using this script (Example: sudo ./adm.sh install apache2).

Using this script you can execute the following commands as root-user via sudo:

install    : Install new packages via apt-get
             Executes 'apt-get install $2'
restart    : Restart a service
             Executes '/etc/init.d/$2 restart'
reconfigure: Reconfigure packages using dpkg-reconfigure
             Executes 'dpkg-reconfigure $2'
phpini     : Edit php.ini
         Executes 'rmcedit /etc/php5/apache2/php.ini' and restarts apache
         Use the option '-norestart' to disable apache restart
crontab    : Edit crontab as root
             Executes 'crontab -e'
         Use the option'-list' to view the crontab instead of editing 
setrights  : Set correct file access rights and owner for /var/www
         Executes 'chown www-data:www-data /var/www -R'
                  'chmod 775 /var/www -R'

If you need some additional commands don't hesitate 
to contact: root@21x9.org
"
    exit 1
    ;;
esac

Mit dem obigen Script kann ein Benutzer also folgendes tun:

  • Pakete per apt-get installieren
  • Dienste neu starten (aber nicht beenden)
  • Pakete neu konfigurieren
  • Die php.ini bearbeiten
  • Cronjobs verwalten
  • Rechte für /var/www/ setzen

Damit das auch wirklich klappt müssen noch ein paar Änderungen an der Datei /etc/sudoers vorgenommen werden:

# /etc/sudoers
Defaults    env_reset
Defaults    mailto="root@example.de"
Defaults    mail_always
Defaults        !lecture,tty_tickets,!fqdn,!syslog
Defaults        logfile=/var/log/sudo.log

%sudo ALL=/usr/local/bin/adm.sh

Hinweis: Das Script erlaubt es Pakete über apt-get auch zu deinstallieren:

apt-get install -apache2

Wenn dies nicht gewünscht ist sollte geprüft werden ob der install-Parameter mit einem - beginnt und dann die Aktion entsprechend verweigert werden.

Nun noch einen logrotate-Eintrag (/etc/logrotate.d/sudo) für das neue sudo-Logfile /var/log/sudo.log:

# /etc/logrotate.d/sudo

/var/log/sudo*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 root adm
}

Alle Benutzer die in die Gruppe sudo aufgenommen wurden (adduser $benutzer sudo) können das Script nun per sudo adm.sh nutzen.

Tags: imported

Tags

imported

Feeds

Atom 1.0 RSS JSON
  • Datenschutz
  • Impressum
  • Archiv