Kemampuan untuk skrip di Linux

8

Jika saya ingin mengatur kapabilitas ( capabilities(7)), seperti CAP_NET_BIND_SERVICE, pada file yang dapat dieksekusi dan file itu adalah skrip , apakah saya harus mengatur kapabilitas ( setcap(8)) pada penerjemah yang memulai skrip atau apakah cukup untuk mengaturnya pada file skrip diri?

Catatan: pertanyaannya terutama menyangkut Scientific Linux 6.1, tapi saya pikir itu bisa dijawab secara umum.

0xC0000022L
sumber

Jawaban:

8

Pengaturan kemampuan pada skrip tidak akan efektif. Ini situasi yang sama karena tidak berfungsi setuidsedikit pada skrip. Mirip seperti pada kasus terakhir ini adalah implementasi bagaimana execvemenangani shebang dan alasan keamanan di belakangnya (untuk detail lihat: Izinkan setuid pada skrip shell ).

Saya pikir Anda memiliki opsi ini

  1. atur kemampuan pada juru bahasa itu sendiri (sebenarnya lebih tepatnya salinannya)

    • Anda memiliki masalah di sini bahwa siapa pun yang dapat menjalankannya akan berjalan dengan kapabilitas yang ditinggikan (dapat menjalankan beberapa skrip sewenang-wenang atau memulainya secara interaktif)
  2. tulis wrapper executable yang akan memiliki logika hardcoded untuk mengeksekusi skrip Anda, dan atur kemampuan yang diinginkan pada executable ini

    • pastikan tidak ada yang dapat memodifikasi atau menghapus / mengganti skrip
    • masih dengan melakukan chrootsalah satu dapat menyalahgunakan pembungkus tersebut

Dalam kedua kasus Anda harus memastikan kemampuan yang ditetapkan akan bertahan execvedengan menetapkan inheritablebendera. Anda mungkin juga menggunakan pam_capdidistribusikan dengan libcapbiasanya, untuk benar-benar mengaktifkan kemampuan yang diinginkan oleh konfigurasi hanya untuk pengguna yang dipilih.

Dan secara umum Anda ingin memastikan tidak ada yang dapat mengubah perilaku juru bahasa Anda dengan mengubah lingkungan mis. PYTHON_PATHatau yang serupa.

Miroslav Koškár
sumber