Bagaimana cara kerja ID pengguna yang nyata dan efektif?

13

Ketika pengguna normal ingin membuat perubahan pada file passwd, pengguna secara setuid akan diberikan akses pengguna yang efektif. Pengguna menjadi root untuk sementara dan dapat mengedit passwd.

Namun Anda hanya dapat mengedit kata sandi Anda, bukan orang lain? Namun akses pengguna Anda yang efektif adalah root. Jadi, mengapa Anda tidak diizinkan mengubah kata sandi lain di samping kata sandi Anda?

Ketika Anda menjalankan sebuah program dengan setuid, apa artinya sebenarnya ketika pengguna yang efektif adalah root, tetapi id pengguna sebenarnya masih nama Anda?

starcorn
sumber

Jawaban:

13

Anda tidak dapat mengubah kata sandi lain karena program tidak akan mengizinkan Anda melakukannya. Program memiliki izin sistem untuk mengubah kata sandi apa pun yang diinginkannya, karena sedang berjalan seperti itu root, tetapi program ini telah dirancang secara khusus untuk tidak memberi pengguna cara apa pun untuk membuatnya menggunakan izin itu.

Tidak cukup bahwa pengguna menjadi root sementara, itu adalah bahwa program tepercaya berjalan dengan izin root. Jelas, hanya program yang dirancang khusus untuk membatasi pengguna untuk hanya melakukan apa yang seharusnya diizinkan untuk dilakukan dengan aman dapat dibuat setuid.

David Schwartz
sumber
Jadi dalam kasus saya membuka shell pengaturan uid ke 0 (menggunakan setreuid), sehingga uid yang efektif akan menjadi root tetapi uid yang sebenarnya masih saya. Karena saya tidak berpikir shell secara khusus memiliki sesuatu yang dibangun yang mencegah saya, apakah itu berarti saya mendapatkan akses ke seluruh sistem?
starcorn
Aku bertanya-tanya dalam konteks teknik serangan smashing stack. Di mana hacker jahat membuka sebuah shell dengan tingkat pengguna super.
starcorn
@ starcron: Ya. Bahkan, mungkin serangan ditunjukkan dengan menunjukkan cara menggunakan serangan itu untuk membuat shell root setuid.
David Schwartz
2

Anda hanya diizinkan untuk mengubah hanya kata sandi Anda meskipun memiliki id pengguna root yang efektif karena pada saat kata sandi diubah, id pengguna yang sebenarnya diperiksa bukan ID pengguna yang efektif. Anda hanya dapat mengubah ID pengguna yang efektif dan bukan ID pengguna yang sebenarnya.
Hanya pengguna root yang dapat mengubah id pengguna sebenarnya untuk menjalankan program sebagai pengguna yang tidak memiliki hak istimewa. ID pengguna sebenarnya tidak dapat diubah karena diatur pada saat sesi dimulai.
Itu sebabnya hanya kata sandi Anda yang dapat diubah karena ID pengguna sebenarnya tidak diubah (karena masih milik Anda bukan milik root)

Mayank
sumber
0

Retas awal di Unix adalah membuat tautan simbolis ke skrip shell setuid dan memanggil tautan -i. Ini menghasilkan skrip yang disebut sebagai sh -ialih-alih mengeksekusi skrip yang disebut -imeluncurkan skrip interaktif, yang kemudian memberikan kekuatan penuh. ID pengguna yang efektif dapat digunakan untuk memodifikasi passwdfile untuk setiap pengguna atau root itu sendiri. Cara terbaik untuk mencegah hal ini adalah dengan menggunakan SELinux untuk mencegah skrip kepercayaan atau program dari memodifikasi di luar area SELinux memungkinkan mereka untuk berjalan.

Teknik lain adalah memiliki bit yang tidak dapat diubah pada file-file penting yang satu set tidak dapat dimodifikasi bahkan oleh pengguna root (selain dari dalam mode single-user)

Sebagai root, Anda dapat mengundang pengguna untuk masuk ke sistem Anda tanpa kata sandi dan muncul sebagai pengguna mana pun tetapi proses istimewa yang normal berusaha sangat keras untuk mencegah hal ini terjadi.

Jika Anda menggunakan sistem pengarsipan jaringan, pengguna root akan diperlakukan sebagai bukan siapa-siapa dalam ruang file itu alih-alih root yang memungkinkan komputer yang tidak dipercaya untuk bergabung dengan jaringan tepercaya seperti kampus universitas.

jrrk
sumber
0

Anda hanya diperbolehkan mengubah kata sandi, karena program kata sandi yang disetel, meskipun memiliki kekuatan untuk melakukan apa saja, diprogram untuk hanya mengubah kata sandi. Ini akan memeriksa id pengguna yang sebenarnya, untuk memutuskan kata sandi mana yang akan diubah.

Karena Anda tidak dapat mengubah id pengguna asli Anda, bahkan dengan memanggil program set-uid, program dapat menggunakannya untuk mengimplementasikan keamanan. Sistem operasi melepaskan keamanan ke program root set uid.

Catatan: program root set uid juga dapat mengubah id pengguna sebenarnya (tetapi ini tidak digunakan dalam kasus penggunaan ini).

Peringatan: set uid root dianggap berbahaya (jauh dari ideal). Kita harus menggunakan kemampuan hari ini (lihat Apa cara berbeda untuk mengatur izin file dll di gnu / linux dan http://man7.org/linux/man-pages/man7/capabilities.7.html )

ctrl-alt-delor
sumber