Bisakah kemampuan digunakan dalam skrip tanpa mengatur binary interpreter?

14

Saat ini saya menggunakan cap_net_bind_service MY_USERNAMEdi /etc/security/capability.conf.
Sekarang saya hanya perlu mengatur cap_net_bind_service+ipenerjemah bahasa scripting favorit saya untuk dapat menambahkan CAP_NET_BIND_SERVICEke set efektif melalui libcap [-ng].

Ini berfungsi dengan baik, tapi saya ingin tahu apakah ada cara untuk mencapai hal yang sama tanpa menetapkan batas ke biner interpreter. Meskipun ini bukan masalah besar (akun pengguna lain tidak memiliki batas sehingga mereka tidak dapat menggunakannya bahkan dengan bit yang ditetapkan pada biner interpreter) itu agak menjengkelkan karena saya harus mengatur ulang bendera setiap kali penerjemah tersebut diperbarui.

Pencuri
sumber

Jawaban:

4

Biasanya, kemampuan itu diwariskan kepada anak-anak. Sebagaimana dinyatakan dalam manual :

Seorang anak yang dibuat melalui garpu (2) mewarisi salinan set kemampuan orang tuanya.

Masalah dengan skrip adalah mereka tidak langsung dieksekusi. Kernel melewati daftar pemeriksaan (kode kernel terletak di fs / binfmt _ *. C). Salah satunya adalah "binfmt_script.c", yang memeriksa baris pertama untuk shebang, kemudian memanggil penerjemah nyata (yang di shebang) dengan skrip Anda sebagai argumen. Dengan demikian, penerjemah standar / umum dipanggil, dan cukup membaca skrip Anda sebagai argumen.

Ini berarti Anda harus mengatur kapabilitas pada penerjemah, bukan pada skrip. Hal yang sama berlaku untuk suidbit, dan bendera khusus lainnya.

Jadi, apakah Anda membuat salinan juru bahasa Anda, atur kemampuan yang Anda inginkan (juga periksa bahwa tidak ada yang dapat mengaksesnya melalui chmod / chown), dan panggil juru bahasa yang disalin ini di shebang Anda. Anda juga dapat melakukan logika setcap dalam skrip Anda.

Adrien M.
sumber
Ok, tidak melihat pertanyaan diajukan 2 tahun lalu tetapi tidak pernah ditutup ... Juga, sepertinya duplikat dari unix.stackexchange.com/questions/87348/…
Adrien M.
tetapi hanya i(mewarisi), melewati eksekutif. Dan itidak melakukan apa-apa sendiri, itu hanya berfungsi jika file memiliki kecocokan i, dan saya esedikit (efektif) bit (kecuali script / executable set itu). Bahkan lebih rumit dari setuid, ini bukan efek skrip.
ctrl-alt-delor
1
Saya pikir shebang dibaca oleh kernel bukan shell? ( stackoverflow.com/questions/3009192/how-does-the-shebang-work/… )
Philip Couling
couling kamu benar. Itu adalah salah tafsir yang saya mengerti kemudian. Saya telah memperbaikinya dengan petunjuk di mana kode kernel untuk eksekusi skrip berada.
Adrien M.