GNU/Linux >> Belajar Linux >  >> Linux

Mengizinkan eksekusi perintah otomatis sebagai root di Linux menggunakan SSH

Saya percaya solusi yang tepat untuk sebagian besar kasus sederhana [yaitu jika kerangka kerja seperti Puppet/Chef/CfEngine/Ansible berlebihan], tetapi kontrol tingkat tinggi dari sistem jarak jauh diperlukan untuk

(a) Memerlukan autentikasi berbasis kunci(b) mengunci lokasi yang dapat digunakan oleh SSH - khususnya untuk mengunci alamat IP yang dapat digunakan pengguna root(c) Memastikan bahwa mesin dengan hubungan kepercayaan ini diamankan dengan benar.

Saya tidak percaya "masuk sebagai root tidak disukai", sebanyak "masuk sebagai root untuk melakukan hal-hal yang tidak memerlukan izin root" tidak disukai. Memiliki kata sandi yang dapat ditebak memungkinkan akun untuk dipaksa secara kasar, sehingga merupakan masalah yang harus dihadapi, dan dengan mengizinkan orang untuk masuk sebagai root, mereka dapat membuat kesalahan bodoh dengan cakupan yang lebih luas, dan melakukan hal-hal yang dipertanyakan yang disembunyikan aktivitas jahat - tetapi bergantung pada arsitekturnya, hal ini mungkin sebenarnya tidak berarti.

Komik XKCD ini menunjukkan bahwa bergantung pada lingkungan, mungkin tidak masalah jika akun root disusupi.

Mungkin solusi sederhana dan paling efektif untuk kasus umum adalah dengan membatasi siapa yang dapat masuk sebagai root dengan mengontrol kunci bersamaan dengan menentukan baris AllowUsers yang sesuai di /etc/ssh/sshd.conf. Baris yang sesuai untuk mengizinkan pengguna normal tetapi mengunci akses root mungkin terlihat seperti:

  AllowUsers normaluser1 normaluser2 [email protected]

Tentu saja, penting bahwa login berbasis kata sandi tidak diizinkan, atau akun root tidak memiliki kata sandi (yaitu memiliki "!" atau "*" di bidang kata sandi dari file kata sandi.)

Seperti yang telah Anda dalilkan, jika hanya satu (atau sejumlah kecil) program yang perlu dijalankan, Anda mungkin lebih baik menyiapkan pengguna tertentu dengan otentikasi berbasis kunci dan mengizinkan akses sudo yang sesuai ke perintah yang diperlukan.

Ada, tentu saja, banyak hal yang dapat dilakukan untuk "mengunci" akses lebih lanjut, tergantung pada nilai data - selinux, logging jarak jauh, shell terbatas, batasan waktu, pemberitahuan segera saat login , pemantauan log aktif seperti fail2ban [selain pembatasan jaringan yang saya lihat sebagai non-opsional] semuanya dapat menjadi bagian dari solusi. Meskipun demikian, jika Anda hanya mengontrol sistem yang dapat dihancurkan dan dibuat ulang dengan mudah, sebagian besar dari ini mungkin berlebihan.

Harap diingat bahwa keamanan dibangun berlapis-lapis, agar bisa mendapatkan akses root, akun harus melewati beberapa lapisan. Mengunci akses, kunci pribadi SSH, firewall, batasan waktu hari [ dan prinsip akses paling sedikit, yaitu hanya menyediakan akses ke apa yang dibutuhkan, tidak lebih, logging, backup ] semuanya harus berfungsi bersama sebagai bagian dari keamanan yang baik.

Tambahan - akses SUDO

Sudo adalah mekanisme untuk memungkinkan pengguna biasa menjalankan perintah tertentu dengan akses tinggi, dan cukup fleksibel dan beragam cakupannya. Meskipun ikhtisar sudo tidak sesuai di sini (tetapi didokumentasikan dengan baik jika Anda mengetik man sudo di sebagian besar distribusi, langkah yang tepat mungkin adalah -

  1. Edit /etc/sudoers - Sebagian besar varian Linux memiliki program khusus untuk melakukan ini yang disebut "visudo" yang perlu dijalankan sebagai root, dan kira-kira sama dengan menggunakan editor sistem untuk mengedit /etc/sudoers (yang merupakan cara lain untuk melakukannya ini - meskipun mungkin menemukan)

  2. Tambahkan/ubah baris yang sesuai untuk membiarkan pengguna tertentu melakukan hal-hal tertentu. Jika, misalnya, Anda ingin mereka dapat me-mount direktori misalnya dan tanpa harus memasukkan kata sandi, Anda akan memasukkan baris seperti :

    username    ALL=/sbin/mount NOPASSWD: ALL
    

Untuk kemudian menjalankan perintah ini, pengguna yang sesuai akan menjalankan sesuatu seperti

  sudo mount /dev/xxx /path/to/mount

Anda dapat membuat daftar beberapa baris untuk beberapa perintah, menggunakan grup daripada menggunakan - sudoers adalah subsistem yang cukup fleksibel. Di banyak distribusi juga dimungkinkan untuk menambahkan file dengan perintah ke subdirektori seperti /etc/sudoers.d


Berikut ini adalah jawaban dari posting Unix Stackexchange
Cara mengeksekusi perintah ssh dari jarak jauh perintah sudo tanpa kata sandi.

Metode ini memungkinkan administrator server mengizinkan akun Anda untuk mengeksekusi satu perintah sebagai sudo tanpa menentukan kata sandi. Perintah tersebut mungkin adalah panggilan ke skrip Anda, dan hanya diperbolehkan saat dijalankan di bawah akun Anda. Karena perintah yang diizinkan sepenuhnya ditentukan termasuk argumen, saya yakin metode ini cukup aman.

Anda dapat memberi tahu sudo untuk melewati kata sandi untuk beberapa perintah.

misalnya di /etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

ini memungkinkan saya untuk menggunakan

sudo -u www-data /bin/rm -rf /var/www/log/upload.*

sebagai archemar tanpa kata sandi.

Perhatikan bahwa

sudo -u www-data rm -rf /var/www/log/upload.*

tidak akan berfungsi (akan meminta kata sandi) sebagai rm berbeda dengan /bin/rm .

Pastikan untuk mengedit /etc/sudoers menggunakan visudo perintah.

Setelah Anda mencapai tingkat lanjut, Anda mungkin ingin memilikisudo Anda sendiri file di /etc/sudoers.d .


Linux
  1. Menggunakan Perintah ripgrep (rg) di Linux

  2. Contoh penggunaan perintah dmsetup di Linux

  3. Contoh Perintah passwd di Linux

  1. Pindahkan folder di Linux menggunakan perintah mv

  2. Untuk mengetahui IP mana yang menjalankan perintah tertentu di linux menggunakan ssh

  3. ZFS mengirim/menerima melalui ssh di linux tanpa mengizinkan login root

  1. Setel Ulang Kata Sandi Root di Linux

  2. Ubah Kata Sandi Secara Terprogram

  3. Terhubung ke MySQL melalui baris perintah tanpa menggunakan kata sandi root?