Mengakses SSH_AUTH_SOCK dari pengguna non-root lainnya

11

Skenario:

Saya menjalankan ssh-agent pada PC lokal saya, dan semua server / klien saya diatur untuk meneruskan auth agent SSH. Saya dapat melompat di antara semua mesin saya menggunakan ssh-agent pada PC lokal saya. Itu bekerja.

Saya harus bisa SSH ke mesin seperti saya sendiri (user1) , ubah ke pengguna lain bernama user2 ( sudo -i -u user2 ), dan kemudian ssh ke kotak lain menggunakan ssh-agent yang saya jalankan di PC lokal saya. Katakanlah saya ingin melakukan sesuatu seperti ssh user3 @ machine2 (dengan anggapan bahwa user3 memiliki kunci SSH publik saya dalam file yang diotorisasi).

Saya telah mengkonfigurasi sudo untuk menjaga variabel lingkungan SSH_AUTH_SOCK .

Semua pengguna yang terlibat (pengguna [1-3]), adalah pengguna yang tidak memiliki hak istimewa (bukan root).

Masalah:

Ketika saya mengubah ke pengguna lain, meskipun variabel SSH_AUTH_SOCK diatur dengan benar, (katakanlah set ke: /tmp/ssh-HbKVFL7799/agent.13799) user2 tidak memiliki akses ke soket yang dibuat oleh user1 - Manakah dari tentu saja masuk akal, jika tidak user2 bisa membajak kunci pribadi user1 dan melompat-lompat sebagai pengguna itu.

Skenario ini berfungsi dengan baik jika alih-alih mendapatkan shell melalui sudo untuk user2, saya mendapatkan shell melalui sudo untuk root. Karena secara alami root memiliki akses ke semua file di mesin.

Pertanyaan:

Lebih disukai menggunakan sudo, bagaimana saya bisa berubah dari user1 ke user2, tetapi masih memiliki akses ke SSH_AUTH_SOCK user1?

Danny F
sumber

Jawaban:

12

Ada dua hal yang perlu Anda lakukan:

  1. atur SSH_AUTH_SOCKvariabel agar menunjuk ke file yang benar
  2. memungkinkan pengguna lain untuk terhubung ke soket (menggunakan izin sistem file)

Karena itu, yang dapat Anda lakukan adalah:

Sebagai pengguna1, izinkan pengguna2 untuk terhubung ke soket (akses penuh ke soket dan izin untuk masuk ke direktori). Saya harap Anda /tmpmengizinkan ACL.

setfacl -m u:user2:rw $SSH_AUTH_SOCK
setfacl -m u:user2:x $(dirname $SSH_AUTH_SOCK)

Ubah ke pengguna lain, dan ekspor variabel dengan benar.

sudo -u user2 env SSH_AUTH_SOCK=$SSH_AUTH_SOCK ssh user3@machine2

Jika Anda ingin membuka shell interaktif menggunakan sudo, Anda harus mengekspor SSH_AUTH_SOCKvariabel sendiri setelah Anda mendapatkan shell.

chutz
sumber
Terima kasih atas jawabannya. Itu bekerja dengan sempurna, dan sangat masuk akal. Maaf atas tanggapan yang terlambat, saya tidak mendapatkan pemberitahuan bahwa seseorang telah merespons.
Danny F