Saya mencoba membuat file sudoers dengan template yang memungkinkan. File sudoers akan terlihat seperti di bawah ini:
Cmnd_Alias LS = /bin/ls
Cmnd_Alias LESS = /usr/bin/less
Cmnd_Alias DU = /usr/bin/du
%support1 ALL=(ALL) NOPASSWD: LS, LESS, DU
Apa yang saya kelola sejauh ini adalah di bawah ini:
Cmnd_Alias LS = ls
Cmnd_Alias LESS = less
Cmnd_Alias DU = du
%support1 ALL=(ALL) NOPASSWD: LS, LESS, DU
Templatnya terlihat seperti di bawah ini:
{% for item in commands %}
Cmnd_Alias {{ item|upper }} = {{ item }}
{% endfor %}
%{{ group }} ALL=(ALL) NOPASSWD: {% for item in commands %}
{{ item|upper}}{% if not loop.last %}, {% endif %}
{% endfor %}
vars
commands:
- ls
- less
- du
Sejauh yang saya tahu, modul template yang tersedia tidak memiliki apa pun yang akan menjalankan perintah di server jauh dan mencetak hasilnya jika tidak saya berpikir untuk mengubah file template agar terlihat seperti di bawah ini:
{% for item in commands %}
Cmnd_Alias {{ item|upper }} = `which {{ item }}`
{% endfor %}
%{{ group }} ALL=(ALL) NOPASSWD: {% for item in commands %}
{{ item|upper}}{% if not loop.last %}, {% endif %}
{% endfor %}
dan hasilnya akan seperti yang saya inginkan.
Apakah ada metode lain yang dapat membuatnya sederhana?
BTW saya sudah memeriksa posting ini
Jawaban:
TL; DR: CIUMAN. Jangan gunakan lebih sedikit.
Orang sering membuat kesalahan dengan memungkinkan dengan mencoba membuat hal-hal variabel yang tidak perlu. Kecuali ada beberapa tempat di mana Anda menentukan daftar perintah yang dapat diakses oleh dukungan, sangat masuk akal jika Anda memasukkannya ke dalam file pembuatan templat:
templates / etc / sudoers.d / support1
atau bahkan secara eksplisit karena Anda tidak menggunakan kembali Cmnd_Alias di mana pun
Dan tambahkan beberapa tugas seperti:
Anda hanya akan menggunakan templat alih-alih file karena nanti mungkin ada beberapa variabel untuk ditambahkan ke semua itu atau nama grup mungkin berasal dari variabel jika Anda mendapatkan peran lain yang membuat grup.
Jika Anda perlu menggunakan variabel, hal yang dapat Anda lakukan adalah menggunakan daftar hash seperti ini:
Kemudian di templat:
Tidak aman menggunakan / usr / bin / less
Dalam semua ini Anda tidak melihat banyak hal penting dan itu adalah penggunaan yang kurang sebagai pemirsa. Sayangnya itu adalah lubang keamanan. Anda dapat mengetikkan '! Bash' untuk menjalankan bash. Dan dengan menekan 'v' Anda masuk ke editor berdasarkan variabel VISUAL, EDITOR atau LESSEDIT. Jadi Anda bisa memberi mereka '/ bin / cat' dan mereka selalu bisa menyalurkan kontennya menjadi lebih sedikit. Catatan ini masih lubang keamanan karena beberapa file di unix sangat sengaja dibatasi misalnya:
sumber
pertama
Anda harus merujuk ke Jinja yang menangani spasi / baris baru. template Anda saat ini akan membuat baris baru, Dan saya pikir ini akan membingungkan
sudo
dan gagal validasi sintaksis (IIRC, sintaks yang tepat adalah menambahkan-
seperti:-%}
pada for loop, tetapi Anda harus "bermain" dan melihat apa yang terjadi). Untuk membuat template Anda bisa melakukannya di workstation Anda, tanpa menjalankannya di mesin target yang sebenarnya.Juga, saya pikir membuat template dengan 1 perintah di baris instruksi lebih mudah dibaca:
Kedua
Saya tidak merekomendasikan untuk mengedit file global yang ada dengan memungkinkan. Alih-alih buat template khusus Anda di bawah
/etc/sudoers.d/
(seperti yang Anda sebutkan tadi Anda lihat)Ini adalah cara yang tepat untuk melakukannya, karena:
Ketiga
Saya pikir mengeksekusi
which
di dalamsudoers
adalah ide orisinal, tetapi seharusnya tidak berhasil.sumber