Kami memiliki gambar Linux berbasis RH; di mana saya harus "menerapkan" beberapa "arsip khusus" untuk meningkatkannya ke versi pengembangan terbaru dari produk kami.
Orang yang membuat arsip menganggap bahwa di dalam gambar dasar kami, beberapa izin salah; jadi kami disuruh lari
sudo chgrp -R nobody /whatever
Kami melakukan itu; dan kemudian, ketika aplikasi kita berjalan, masalah yang tidak jelas muncul.
Apa yang saya temukan kemudian: panggilan ke chgrp akan menghapus informasi bit setuid pada binari kita di dalam / apa pun.
Dan masalah sebenarnya adalah: beberapa binari kita harus memiliki bit setuid yang diatur agar berfungsi dengan benar.
Singkat cerita: apakah ada cara untuk menjalankan perintah "chgrp" tanpa membunuh bit setuid saya?
Saya baru saja menjalankan yang berikut di Ubuntu lokal saya; mengarah ke hasil yang sama:
mkdir sticky
cd sticky/
touch blub
chmod 4755 blub
ls -al blub
-> menunjukkan kepada saya nama file dengan latar belakang merah -> jadi, ya, setuid
chgrp -R myuser .
ls -al blub
-> menunjukkan kepada saya nama file tanpa latar belakang merah -> setuid hilang
4XXX
bit disebut setuid bit (s
), tidak lengket. Sticky adalaht
bit dan tujuannya sedikit berbeda: en.wikipedia.org/wiki/Sticky_bitsetuid
bit, bukansticky
bit. (2) Tidak membersihkansetuid
bit saat Anda melakukanchgrp
atauchown
akan menjadi masalah keamanan.Jawaban:
Jika Anda ingin menerapkan
chgrp -R nobody /whatever
sambil mempertahankan bit setuid Anda dapat menggunakan duafind
perintah iniThe
find ... -perm 04000
pilihan mengambil file dengan bit set setuid. Perintah pertama kemudian menerapkanchgrp
dan kemudianchmod
untuk mengembalikan bit setuid yang telah terlempar. Yang kedua berlakuchgrp
untuk semua file yang tidak memiliki bit setuid.Bagaimanapun, Anda tidak ingin memanggil
chgrp
atauchmod
menggunakan symlink karena itu akan mempengaruhi target mereka, karenanya! -type l
.sumber
chgrp
juga menghapus bit setgid (dan kemampuan di Linux) yang mungkin juga perlu dipulihkan.find
find
permintaan. Saya tidak suka garis panjang di SE ketika Anda harus menggulir teks. Saya menambahkan! -tipe l membuatnya melampaui batasfind
pendekatan dengan-exec +
mungkin sulit dilakukan andal jika itu akhirnya memecahchmod
/chgrp
s menjadi beberapa doa.find . ! -type l -exec chgrp nobody {} + \( -perms -6000 -exec chmod gu+s {} + -o -perms -4000 -exec chmod u+s {} + -o -perms -2000 -exec chmod g+s {} + \)
harus baik-baik saja. Karenachgrp
pertandingan untuk lebih banyak file, untuk setiap file itu harus dilakukan sebelum parachmod
s.Menghapus bit SUID dan SGID pada
chgrp
(atauchown
) sangat masuk akal. Ini adalah langkah keamanan untuk mencegah masalah keamanan. Untuk SGID (pada executable, saya kira) berarti menjalankan program ini dengan grup pemilik grup yang efektif .Jika Anda mengubah pemilik grup, maka dalam hal keamanan dan kontrol akses, ini adalah sesuatu yang sama sekali berbeda, yaitu alih-alih berjalan dengan grup yang efektif
uvw
, program sekarang berjalan dengan grup yang efektifxyz
.Dengan demikian Anda harus mengembalikan bit SUID atau SGID secara eksplisit pada perubahan kepemilikan.
Tambahan: Pada klaim bahwa chgrp (atau chown) seharusnya hanya menghapus SGID (atau SUID, resp.)
Dengan
chown
atauchgrp
mengubah pengaturan keamanan untuk yang dapat dieksekusi, dan ini adalah alasan yang cukup untuk menghapus atribut peningkatan hak istimewa. Kekuatan Unix berasal dari kesederhanaan konseptual, dan keamanan Unix sudah cukup rumit. Untuk tujuan ini, menghapus SUID dan SGID pada setiap perubahan kepemilikan hanyalah jaring pengaman - setelah semua, dalam sejarah Unix / Linux ada beberapa kerentanan karena pengaturan SUID atau SGID yang salah arah.Jadi tidak ada alasan yang lebih dalam mengapa Unix berperilaku seperti ini, itu hanya keputusan desain yang konservatif.
sumber
uvw
, program sekarang akan berjalan dengan kelompok yang efektifxyz
", tetapi itu tidak berlaku untuk kasus yang sedang dibahas.chown
atauchgrp
mengubah pengaturan keamanan, dan ini adalah alasan yang cukup untuk menghapus atribut peningkatan hak istimewa. Kemungkinannya tinggi sehingga hal ini menyerang yang tidak waspada.Kliring bit
setuid
,setgid
(setidaknya di Linux) pada non-direktori dilakukan oleh kernel setelahchown()
panggilan sistem dilakukanchgrp
, bukan denganchgrp
sendirinya. Jadi satu-satunya cara adalah mengembalikannya setelah itu.Ini juga membersihkan kemampuan keamanan.
Jadi, di GNU Linux:
Dan jalankan (as
root
):untuk mengubah grup saat berusaha mempertahankan izin.
Secara rekursif, Anda bisa melakukan:
(Itu semua dengan asumsi tidak ada yang mengacaukan file pada saat yang sama).
sumber
Seperti biasa dalam admin ada banyak cara untuk pergi.
Solusi yang saya tempatkan berjalan seperti ini:
sumber