Mengapa disarankan untuk membuat grup dan pengguna untuk beberapa aplikasi?

11

Sebagian besar waktu, ketika menginstal program dari sumber, disarankan untuk membuat pengguna baru dan grup baru dan memberikan /usr/local/<myapp>kepemilikan pengguna dan grup yang baru dibuat.

  • Mengapa praktik seperti itu dianggap sebagai praktik yang baik?

  • Apa yang diperbaiki?

Contoh: grup mysql pengguna / mysql untuk server database MySQL.

Spredzy
sumber

Jawaban:

11

Prakteknya bukan untuk membuat satu pengguna dan grup per aplikasi, tetapi per layanan. Yaitu, program yang dijalankan oleh pengguna lokal tidak perlu diinstal sebagai pengguna selain root. Ini adalah daemon , program yang berjalan di latar belakang dan yang mengeksekusi permintaan yang datang melalui jaringan atau sarana komunikasi lainnya, yang harus dijalankan sebagai pengguna khusus.

Daemon berjalan sebagai pengguna yang berdedikasi sehingga jika ia melakukan kesalahan (karena bug, mungkin dipicu oleh penyerang) kerusakan yang dapat ia lakukan terbatas: hanya file data daemon yang terpengaruh (kecuali penyerang berhasil menemukan lubang root lokal , yang bisa terjadi). Sebagai contoh, daemon basis data mysqldberjalan sebagai pengguna dan grup khusus mysql:mysqldan file data dari basis data ( /var/lib/mysql/*) menjadi milik mysql:mysql.

Perhatikan bahwa daemon dapat dieksekusi dan data statis lainnya serta file konfigurasi yang digunakan tetapi tidak boleh dimodifikasi oleh daemon tidak boleh menjadi milik pengguna khusus; mereka harus dimiliki oleh root:root, seperti kebanyakan file program dan konfigurasi. The mysqldProses tidak memiliki Timpa bisnis /usr/sbin/mysqldatau /etc/mysql/my.cnf, sehingga file-file ini tidak harus milik para mysqlpengguna atau dapat ditulis oleh mysqlpengguna atau mysqlkelompok. Jika beberapa file hanya dapat dibaca oleh daemon dan administrator, mereka harus dimiliki oleh root pengguna dan oleh grup khusus, dan memiliki mode 0640 ( rw-r-----).

Kategori khusus yang dapat dieksekusi yang tidak dapat dimiliki root:rootadalah program yang dijalankan oleh pengguna tetapi perlu dijalankan dengan hak istimewa ekstra. Executable ini harus setuid root jika harus dijalankan (setidaknya sebagian) sebagai root; maka yang dapat dieksekusi harus memiliki mode 4755 ( rwsr-xr-x). Jika program membutuhkan dengan hak istimewa ekstra tetapi tidak sebagai root, maka program tersebut harus dibuat setgid, sehingga hak istimewa tambahan datang melalui grup dan bukan melalui pengguna. Yang dapat dieksekusi kemudian memiliki mode 2755 ( rwxr-sr-x). Alasannya ada dua:

  • Yang dapat dieksekusi tidak boleh diizinkan untuk memodifikasi sendiri, sehingga jika pengguna berhasil mengeksploitasi kerentanan, mereka mungkin dapat memodifikasi file data yang digunakan oleh program tetapi tidak menyuntikkan trojan horse ke dalam executable untuk menyerang pengguna lain yang menjalankan program. .
  • File data yang dapat dieksekusi milik grup. Program setuid harus beralih antara pengguna nyata (pengguna yang memanggil program) untuk berinteraksi dengan pengguna dan dengan pengguna efektif (pengguna yang menjalankan program) untuk mengakses file data pribadinya (alasan untuk itu untuk memiliki hak istimewa ekstra). Program setgid selanjutnya dapat memisahkan data per-pengguna yang hanya dapat diakses oleh grup (mis. Dengan menyimpan file yang dimiliki oleh pengguna dalam direktori yang hanya dapat diakses oleh root dan grup program).
Gilles 'SANGAT berhenti menjadi jahat'
sumber
3

Ini bukan aplikasi secara umum, tetapi daemon yang untuk ini. Alasannya adalah agar daemon dapat berjalan sebagai pengguna yang tidak memiliki hak pribadi alih-alih root sehingga jika ia memiliki kerentanan keamanan dan dikompromikan, kerusakan yang dapat dilakukan terkandung hanya pada area yang dapat diakses oleh pengguna.

psusi
sumber
1

Alasan itu dianggap praktik yang baik adalah untuk mencegah pengguna lain dari sistem menimpa data dan file konfigurasi untuk aplikasi tertentu.

Sebagai contoh mysql/ mysqlmenjadi pemilik penyimpanan untuk file database mysql mencegah siapa pun tidak menggunakan API aplikasi dari merusak database. Ditambah lagi, pengguna mysqlbiasanya tidak memiliki shell asli sehingga tidak ada yang bisa masuk sebagai pengguna itu.

Karlson
sumber
Anda melewatkan titik kritis, yaitu pengguna dan grup yang menjalankan aplikasi itu penting, dan file statis yang dapat dieksekusi dan lainnya harus dimiliki oleh root.
Gilles 'SO- stop being evil'
@Gilles Mereka dapat dimiliki oleh root dan sebagian besar aplikasi diinstal melalui distribusi tetapi mereka tidak perlu dan mereka tidak harus. Faktanya /usr/bin/atdimiliki oleh daemon/daemondi Ubuntu
Karlson
1
atbukan daemon. Ini setuid daemonsehingga dapat berkomunikasi dengan atddaemon melalui file pribadi.
Gilles 'SANGAT berhenti menjadi jahat'
1

Membuat grup / pengguna baru untuk daemon yang diinstal baru meningkatkan keamanan. Ketika proses server dijalankan di bawah pengguna seperti itu dibatasi untuk hak akses pengguna itu. Sebagai perbandingan: ketika dijalankan sebagai root, ia dapat melakukan segalanya.

Perbedaan ini penting jika daemon Anda tidak terkonfigurasi dan / atau mengandung bug terkait keamanan.

Saya tidak yakin apa yang Anda maksud dengan bagian kedua dari pertanyaan Anda, yaitu bagian tentang /usr/localkepemilikan. Secara umum tidak masuk akal bahwa pengguna yang sama Xdi mana daemon berjalan untuk alasan keamanan juga memiliki direktori dengan binari (karena dalam kasus itu bisa mengubahnya jika terjadi eksploitasi). Tetapi direktori dengan file data yang bekerja pada daemon harus dapat diakses oleh X- cara termudah untuk mengkonfigurasi ini adalah dengan membuat Xpemilik direktori data / file.

Menjalankan daemon di bawah penggunanya sendiri hanyalah satu teknik keamanan, yang lain mencakup semacam 'chroot' atau menggunakan sistem kontrol akses wajib (MAC) (mis. SELinux).

maxschlepzig
sumber
1

Ini adalah pertimbangan keamanan. Ini membatasi kerusakan yang dapat dilakukan oleh seseorang yang membobol aplikasi daemon. Aplikasi pengguna biasanya dimiliki oleh userid standar seperti root.

Jika server web, server email, dan basis data Anda semuanya berjalan sebagai pengguna yang sama, membuatnya lebih mudah untuk dikompromikan. Jika salah satu dari mereka memiliki bug atau kesalahan konfigurasi yang memungkinkan akses sistem, akses itu dapat digunakan untuk mengakses ketiga aplikasi.

Jika mereka semua memiliki akun terpisah, seperti yang disarankan, hanya aplikasi yang disusupi yang kemungkinan dapat diakses. Sementara detail konfigurasi publik dari yang lain dapat dibaca, kecil kemungkinan bahwa perubahan dapat dilakukan.

Banyak daemon memungkinkan pengguna untuk mengunggah dan mengunduh file dan jika tidak melakukan hal-hal yang Anda tidak ingin mereka lakukan terhadap konfigurasi untuk daemon lain. Jika setiap aplikasi memiliki userid dan grupnya sendiri, maka lebih mudah untuk mengamankan daemon.

Memiliki grup khusus daemon membuatnya lebih mudah untuk secara aman memberikan daemon akses aman hanya-baca ke file dan direktori. Jika file atau direktori dimiliki oleh pengguna yang berbeda, tetapi milik grup daemon biasanya akan dapat diakses hanya baca. Izin akses dapat dengan mudah diverifikasi dan diperbaiki dengan alat seperti find.

BillThor
sumber
Anda melewatkan titik kritis, yaitu pengguna dan grup yang menjalankan aplikasi itu penting, dan file statis yang dapat dieksekusi dan lainnya harus dimiliki oleh root.
Gilles 'SO- stop being evil'
@Gilles: Dicatat dan diedit sesuai.
BillThor