• Michael Schurter's avatar
    client: never embed alloc_dir in chroot · 37f053ff
    Michael Schurter authored
    Fixes #2522
    
    Skip embedding client.alloc_dir when building chroot. If a user
    configures a Nomad client agent so that the chroot_env will embed the
    client.alloc_dir, Nomad will happily infinitely recurse while building
    the chroot until something horrible happens. The best case scenario is
    the filesystem's path length limit is hit. The worst case scenario is
    disk space is exhausted.
    
    A bad agent configuration will look something like this:
    
    ```hcl
    data_dir = "/tmp/nomad-badagent"
    
    client {
      enabled = true
    
      chroot_env {
        # Note that the source matches the data_dir
        "/tmp/nomad-badagent" = "/ohno"
        # ...
      }
    }
    ```
    
    Note that `/ohno/client` (the state_dir) will still be created but not
    `/ohno/alloc` (the alloc_dir).
    While I cannot think of a good reason why someone would want to embed
    Nomad's client (and possibly server) directories in chroots, there
    should be no cause for harm. chroots are only built when Nomad runs as
    root, and Nomad disables running exec j...
    37f053ff