sudoers
Het bestand /etc/sudoers
bevat de configuratie van user-accounts vervat in de sudo
- of wheel
-group.
In deze configuratie kunnen we policies plaatsen van groepen of individuele gebruikers over hun rechten en mogelijkheden op en in het linux systeem.
- default
sudoers
file ubuntu 16# This file MUST be edited with the 'visudo' command as root. # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d
visudo
Het aanpassen van de/etc/sudoers
file kan gebeuren met om het even welke tekst-editor. Eén enkele syntax-fout in het bestand zorgt voor een blokkering van alle sudo rechten:idiot-01@pt72-mt19v2:~$ sudo vim /etc/sudoers idiot-01@pt72-mt19v2:~$ sudo fdisk -l >>> /etc/sudoers: syntax error near line 9 <<< sudo: parse error in /etc/sudoers near line 9 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
Je kan het hogere voorbeeld zelf proberen, maar zorg er dan eerst voor dat je root-account een paswoord heeft (
sudo passwd
). Je kan de/etc/sudoers
file dan alsnog editeren als root, en alles werkt (hopelijk) weer.
Dergelijke problemen kun je vermijden door ALTIJD gebruik te maken vanvisudo
De eerste keer dat jevisudo
gebruikt vraagt deze (meestal) welke editor je zou willen gebruiken:There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press enter to keep the current choice[*], or type selection number: 2
Wij kozen voor
nano
...
We tikken nu bewust een syntax error in ...
$ sudo visudo
# See the man page for details on how to write a sudoers file. # De(>>>a syntax error<<<)(so obvious .. what was I thinking ... )aults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:
... we bewaren nu het bestand ...
CTRL-X Yes (in nano)
... envisudo
maakt bezwaar ... :>>> /etc/sudoers: syntax error near line 9 <<< What now? ? Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!)
Wij kozen voor x, want wij wilden alleen maar aantonen hoe
visudo
werkt.
- gebruik van
sudoers
De standaard syntax is als volgt:user host = (user1, user2, .. : group1, group2, ..) command1, command2, command3, .. %group host= ...
user
is de account-naam van de gebruiker waarop hogere syntax slaat.
%group
is de groupnaam voorafgegaan door de percent, waarvan de groepsleden rechten hebben
host
staat meestal opALL
. Als je maar eensudoers
-file hebt kun je ook jouw hostname ingeven. In vele gevallen wordt eensudoers
-file echter verdeeld over verschillende (of alle) hosts binnen een netwerk. Dan is het wenselijk om meer details te gebruiken.
user1
is de eerste account naar wie sudo kan aliassen.user2
de tweede, enzoverder.
group1
is de eerste group naar wie sudo kan aliassen ... enzoverder.
Als er meerdere user- of greoup-aliassen mogelijk zijn voor een specifiek sudo-gebruiker, dan kan deze in zijn sudo commando kiezen als volgt (of met een combinatie):
$ sudo -u operator /bin/ls
$ sudo -g sysadmin /bin/ls
command1
is het eerste commando dat mag worden uitgevoerd met andere rechten,
bijvoorbeeld/usr/bin/apt-get update
command2
is het tweede commando dat mag worden uitgevoerd als sudo vb./sbin/shutdown
UITEINDELIJK IS HET DE BEDOELING DAT NIET IEDEREENsudo su
ofsudo bash
KAN UITVOEREN ...
(zie ook punt 7 overvim
)
- een eenvoudig voorbeeld
userkoen
mag 2 verschillende commando's uitvoeren alsroot
; we plaatsen het volgende in/etc/sudoers
# Testing koen koen ALL=(root) /usr/bin/apt-get update, /sbin/shutdown
vervolgens testen we:
$ su koen Password: koen@pt72-mt19v2:~$ sudo apt-get update Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease Hit:2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease Hit:3 http://archive.ubuntu.com/ubuntu bionic-backports InRelease Hit:4 http://archive.canonical.com/ubuntu bionic InRelease Hit:5 http://security.ubuntu.com/ubuntu bionic-security InRelease Ign:6 http://packages.linuxmint.com tara InRelease Hit:7 http://packages.linuxmint.com tara Release Reading package lists... Done
alles werkt
een volgende test:koen@pt72-mt19v2:~$ sudo shutdown -k Shutdown scheduled for Thu 2018-10-18 14:22:41 CEST, use 'shutdown -c' to ca
dit gaat ook goed ...
... en we testen iets dat niet mag ...koen@pt72-mt19v2:~$ sudo fdisk -l [sudo] password for koen: Sorry, user koen is not allowed to execute '/sbin/fdisk -l' as root on pt72-mt19v2.
... en dit doet wat we verwachten
- een group met bepaalde rechten
We creëren een group, sysbh met twee leden: koen en cecile.
Vervolgens geven we de group sysbh het recht om de syslog te bekijken metless
en metcat
, en alle services metsystemctl
te controleren.
- test met de services
cron
enntp
(systemctl [status / stop / start / ... ] ) - test met de commando's
less
encat
op /var/log/syslog en syslog.1 - test met de commando's
zless
enzcat
op /var/log/syslog.2.gz (mag niet werken -- waarom niet?)
oplossing hieronder in witte letters (kun je zichtbaar maken met select)
# Testing sysbh
%sysbh ALL=(root) /bin/systemctl, /usr/bin/less /var/log/syslog*, /bin/cat /var/log/syslog*
oplossing hierboven ...
- test met de services
- command-alias
Het komt de leesbaarheid ten goede als je werkt metCmnd_Alias
voorbeeld:Cmnd_Alias AAN-UIT = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart ... %sysadmins ALL=(root) AAN-UIT
Pas dit nu toe op de vorige oefening en voeg in de command alias naast
less
encat
ook de comando'szcat
,zless
,zgrep
engrep
toe.
oplossing hieronder in witte letters (kun je zichtbaar maken met select)
Cmnd_Alias BLADEREN = /usr/bin/less, /bin/grep, /bin/cat, /bin/zless, /bin/zgrep, /bin/zcat
...
# Testing sysbh
%sysbh ALL=(root) BLADEREN
Is er nu geen probleem?
Probeer eens als cecile
$ sudo cat /etc/sudoers
Dat mag niet. Hoe los je dat op?
Is deCmnd_Alias
niet gevaarlijker dan je dacht?
- vim is gevaarlijk
Pas/etc/sudoers
zo aan dat gebruiker cecile het bestand/etc/cron.hourly/backup
kan aanpassen metvim
.
In dit bestand plaats je als normale sudo user (je eigen account) het volgende:#!/bin/bash # # starting backup filenaam="homebu-$(date +"%m-%d-%Y-%T").tar.bz2" echo $filenaam tar -cvjf /backup/$filenaam /home # end of backup
Als cecile open je nu metvim
dit bestand, en
invim
tik je dan het volgende:
<ESC>
:shell
<ENTER>
OK -- zie jij wat ik zie?
- links
man sudoers
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Getting_Started_Guide/ch02s03.html
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file-on-ubuntu-and-centos
http://toroid.org/sudoers-syntax
https://www.maketecheasier.com/edit-sudoers-file-linux/
https://medium.com/@viraj.khatavkar/understanding-the-sudoers-file-8d71961b28ac
https://www.google.com/search?q=digital+ocean+sudoers+file&ie=utf-8&oe=utf-8
https://www.sudo.ws/other.html
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/
https://www.sudo.ws/man/1.8.22/sudoers_timestamp.man.html
https://www.linux.com/blog/configuring-sudo-explaination-example
https://unix.stackexchange.com/questions/220966/sudo-host-field-what-is-it-used-for
https://www.garron.me/en/linux/visudo-command-sudoers-file-sudo-default-editor.html