home       inleiding       sysadmin       services       links       bash       werk       nothing      

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.

  1. 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

     

  2. 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 van visudo
    De eerste keer dat je visudo 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)
    ... en visudo 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.
     

  3. 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 op ALL. Als je maar een sudoers-file hebt kun je ook jouw hostname ingeven. In vele gevallen wordt een sudoers-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 IEDEREEN

    • sudo su
      of
    • sudo bash
       
      KAN UITVOEREN ...
      (zie ook punt 7 over vim)
       
  4. een eenvoudig voorbeeld
     
    user koen mag 2 verschillende commando's uitvoeren als root; 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
     

  5. 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 met less en met cat, en alle services met systemctl te controleren.
     
    • test met de services cron en ntp (systemctl [status / stop / start / ... ] )
    • test met de commando's less en cat op /var/log/syslog en syslog.1
    • test met de commando's zless en zcat 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 ...
       
  6. command-alias
     
    Het komt de leesbaarheid ten goede als je werkt met Cmnd_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 en cat ook de comando's zcat, zless, zgrep en grep 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 de Cmnd_Alias niet gevaarlijker dan je dacht?
     

  7. vim is gevaarlijk
     
    Pas /etc/sudoers zo aan dat gebruiker cecile het bestand /etc/cron.hourly/backup kan aanpassen met vim.
    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 met vim dit bestand, en
    in vim tik je dan het volgende:
     
    <ESC>
    :shell
    <ENTER>
     
    OK -- zie jij wat ik zie?
     

  8. 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