GNU/Linux >> Belajar Linux >  >> Linux

Tujuan Menggunakan Setuid() Dalam Program Suid?

Saya ingin tahu apakah program SUID seperti passwd menggunakan setuid() panggilan fungsi. Mengapa hak akses root dihapus?

Terhadap jenis serangan apa ini membantu? Buffer-overflow?

Jawaban yang Diterima:

Pertama saya akan membahas bit setuid, yang digunakan passwd dan berbeda dari setuid() panggilan sistem (yang tidak digunakan passwd). Mungkin ada beberapa kebingungan dalam pertanyaan dalam hal ini.

Ini bukan perlindungan terhadap buffer overflow, ini rentan untuk itu, atau pada dasarnya apa pun yang memungkinkan penyerang menggunakan proses istimewa untuk tujuan jahat yang tidak diinginkan. Ini karena bit setuid adalah kebalikan dari "menjatuhkan hak istimewa"; itu melimpahkan hak akses root, tetapi hanya untuk proses dan bukan pengguna sebenarnya. Itu termasuk passwd .

Bentuk setuid itu membutuhkan bit setuid sistem file yang disetel pada executable; passwd memiliki ini karena memerlukan hak istimewa untuk membaca dan menulis /etc/passwd . Namun, kami berharap passwd tidak memiliki kerentanan keamanan yang diketahui (misalnya, potensi eksploitasi overflow) yang memungkinkan orang jahat untuk membuatnya melakukan sesuatu selain membaca dan menulis /etc/passwd (dan selain melakukannya dengan benar!), karena itu berjalan sebagai root, dan karena itu bisa melakukan apa saja — kecuali dirancang untuk melakukan hanya satu hal tertentu, dan membuatnya melakukan hal lain harus (sekali lagi, semoga) tidak mungkin.

Jadi menggunakan setuid dalam pengertian itu bukanlah perlindungan terhadap apa pun , tetapi sering dibahas dalam kaitannya dengan kerentanan karena kerentanan potensial sangat penting untuk mengatur WRT yang dapat dieksekusi.

TETAPI:bit setuid menyetel euid dan bukan uid sebenarnya, jadi sebenarnya paralel dengan seteuid() panggilan sistem dan tidak setuid() .

Ada bentuk kebalikan dari "setuid" yaitu tentang menjatuhkan hak istimewa, yang melibatkan setuid() yang sebenarnya panggilan sistem dan tidak memerlukan bit setuid. Ini adalah saat proses yang berjalan sebagai root (karena root atau Sudo memulainya) mengubah uidnya menjadi pengguna yang kurang istimewa. Server dan daemon sering melakukan ini jika mereka membutuhkan hak akses root saat start up (misalnya, untuk membuka port yang diistimewakan) tetapi tidak selanjutnya. Dengan begitu jika server kemudian di-jack, server tidak memiliki hak pengguna super. Anda tidak dapat memanggil setuid(0) dan dapatkan kembali hak akses root (tetapi Anda bisa melakukannya dengan set*e *uid).

Terkait:Tujuan Utama FOREIGN KEY?
Linux
  1. Git Pelengkapan otomatis?

  2. Dapatkah Anda membuatnya? Kompilasi Program C di Linux Menggunakan Make Command

  3. Menggunakan <linux/types.h> di program pengguna, atau <stdint.h> di kode modul driver...apa bedanya?

  1. Debug Linux menggunakan ProcDump

  2. Cara men-debug program C di Linux menggunakan gdb

  3. Menggunakan grep vs awk

  1. Menggunakan UFW sebagai Daftar Hitam IP

  2. Menggunakan mod_cluster di Apache

  3. Tujuan Menggunakan Fifo Vs File Sementara Atau Pipa?