Saya memiliki pengguna dengan akses terbatas pada sistem (yaitu, dia bukan sudoer); sebut saja dia Bob .
Saya memiliki skrip atau biner yang saya, administrator sistem, percayai, dan tidak akan memiliki masalah menjalankannya sebagai root; sebut saja skripnya get-todays-passphrase.sh
. Tugas skrip ini adalah membaca data dari file "pribadi" (dimiliki oleh pengguna / grup selain Bob, atau bahkan root) yang berada di /srv/daily-passphrases
, dan hanya menampilkan baris tertentu dari file: baris yang sesuai dengan tanggal hari ini .
Pengguna seperti Bob tidak diizinkan untuk mengetahui frasa sandi besok, meskipun terdaftar dalam file. Karena alasan ini, file /srv/daily-passphrases
dilindungi oleh izin Unix, sehingga pengguna non-root seperti Bob tidak diizinkan untuk mengakses file secara langsung. Namun, mereka diizinkan menjalankan get-todays-passphrase.sh
skrip kapan saja, yang mengembalikan data "yang difilter".
Untuk meringkas (versi TL; DR ):
- Bob tidak dapat membaca file yang dilindungi
- Script dapat membaca file yang dilindungi
- Setiap saat, Bob dapat menjalankan skrip yang dapat membaca file
Apakah mungkin untuk melakukan ini dalam izin file Unix? Atau jika Bob memulai skrip, apakah skrip akan selalu ditakdirkan untuk dijalankan dengan izin yang sama dengan Bob?
sumber
Kata pengantar:
Seperti yang telah ditunjukkan dalam komentar dan untuk alasan yang dijelaskan dalam jawaban ini kernel linux mengabaikan bit setuid / setguid saat menangani skrip. Saya tidak akan menduplikasi jawaban Benjamin tetapi sebaliknya akan mengganti skrip dengan executabe untuk membuat jawaban saya benar.
Jawaban singkat: gunakan setgid
Langkah-langkah terperinci:
sudo chown :readpass thatfile
sudo chmod g=r,o= thatfile
sudo chmod g+s thatfile
Dengan cara itu executable Anda akan berjalan dengan izin dari grup pemilik dan dengan demikian dapat membaca file.
sumber
thatfile
dengan grupreadpass
.