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.