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
sudoersfile 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/sudoersfile 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 pluginJe 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/sudoersfile 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 jevisudogebruikt 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: 2Wij 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)
... envisudomaakt 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
visudowerkt.
- gebruik van
sudoers
De standaard syntax is als volgt:user host = (user1, user2, .. : group1, group2, ..) command1, command2, command3, .. %group host= ...useris de account-naam van de gebruiker waarop hogere syntax slaat.
%groupis de groupnaam voorafgegaan door de percent, waarvan de groepsleden rechten hebben
hoststaat 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.
user1is de eerste account naar wie sudo kan aliassen.user2de tweede, enzoverder.
group1is 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
command1is het eerste commando dat mag worden uitgevoerd met andere rechten,
bijvoorbeeld/usr/bin/apt-get update
command2is 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
userkoenmag 2 verschillende commando's uitvoeren alsroot; we plaatsen het volgende in/etc/sudoers# Testing koen koen ALL=(root) /usr/bin/apt-get update, /sbin/shutdownvervolgens 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... Donealles 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 cadit 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 metlessen metcat, en alle services metsystemctlte controleren.
- test met de services
cronenntp(systemctl [status / stop / start / ... ] ) - test met de commando's
lessencatop /var/log/syslog en syslog.1 - test met de commando's
zlessenzcatop /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-UITPas dit nu toe op de vorige oefening en voeg in de command alias naast
lessencatook de comando'szcat,zless,zgrepengreptoe.
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_Aliasniet gevaarlijker dan je dacht?
- vim is gevaarlijk
Pas/etc/sudoerszo aan dat gebruiker cecile het bestand/etc/cron.hourly/backupkan 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 metvimdit bestand, en
invimtik 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