Apakah ini praktik yang baik untuk menjalankan daemon di bawah akun pengguna non-root?


13

Saya telah mengembangkan aplikasi yang menggunakan NTP untuk mengubah waktu jaringan, untuk menyinkronkan dua komputer saya. Ini berjalan sebagai root, karena hanya yang terakhir diizinkan untuk mengubah waktu dan tanggal di Linux (saya kira).

Sekarang, saya ingin menjalankannya sebagai pengguna. Tapi, saya perlu mengakses waktu.

  • Apakah ini praktik yang baik untuk menjalankan daemon di bawah akun pengguna non-root?
  • Haruskah saya memberi aplikasi saya kemampuan seperti CAP_SYS_TIME?
  • Apakah itu tidak menimbulkan kerentanan keamanan?
  • Apakah ada cara yang lebih baik?

Biasanya daemon NTP seharusnya dijalankan sebagai ntpakun pengguna (setidaknya pada sistem Linux) sehingga Anda tidak perlu melakukan perubahan ini. Paket NTP apa yang sudah Anda instal?

6
Menjalankan daemon di bawah akun non-root disebut "menjatuhkan hak akses root" dan merupakan praktik yang umum dikenal karena membatasi potensi kerusakan kerentanan keamanan di daemon.

1
Lihat wikipedia untuk " Pemisahan hak istimewa ".
Kusalananda

Saya telah mengumpulkan NTP dari sumbernya. Saya tidak memiliki kelompok NTP
Anonymous12223

@xhaltar Anda dapat membuat grup dan pengguna NTP. Untuk mengkonfigurasi bagaimana layanan dimulai (pengguna, grup, dll.) Anda dapat membuat / mengedit skrip init layanan, baik membuat / mengkonfigurasi unit systemd.
Pl4nk

Jawaban:


15

Apakah ini praktik yang baik untuk menjalankan daemon di bawah akun pengguna non-root?

Ya, dan ini biasa. Sebagai contoh, Apache memulai sebagai root dan kemudian melakukan proses baru sebagai data-www (secara default).
Seperti yang dikatakan sebelumnya, jika program Anda diretas (mis: injeksi kode), penyerang tidak akan mendapatkan akses root, tetapi akan terbatas pada hak istimewa yang Anda berikan kepada pengguna khusus ini.

Haruskah saya memberikan "Kemampuan" seperti "CAP_SYS_TIME"?

Ini adalah ide yang bagus karena Anda menghindari penggunaan setuid , dan membatasi izin untuk kemampuan yang sangat spesifik ini.

Haruskah saya menggunakan cara lain untuk melakukannya sehingga akan dianggap "Praktek yang Baik"?

Anda dapat meningkatkan keamanan, misalnya:

  • Jalankan layanan sebagai pengguna yang tidak memiliki hak, tanpa shell.
  • Gunakan chroot untuk mengunci pengguna di direktori home-nya.

NB: Chroot tidak memberikan keamanan jika Anda root dan berjalan di Linux. Pengguna root dapat membuat direktori di chroot, membuka direktori root chroot, chroot ke direktori baru, chdir jalan kembali ke root nyata, dan kemudian chroot ke root nyata. BSD memperbaiki ini dengan melarang mengambil direktori fd menjadi chroot.
Kevin

@Kevin Jika Anda root, Anda juga dapat melacak proses di luar chroot, dan ada banyak cara lain untuk mengelaknya. Chroot belaka tidak bisa terus berakar.
Gilles 'SO- stop being evil'

//, emp.jar.st sebenarnya menciptakan pengguna untuk dirinya sendiri karena alasan keamanan. Latihan yang sangat bagus.
Nathan Basanese

Tunggu, jika saya PENGGUNA, bisakah saya mengunci PENGGUNA ke direktori tertentu? Seperti "/ opt" (misalnya)?
Anonymous12223

@xhaltar Untuk mengunci proses yang dijalankan oleh USERke dalam direktori, Anda menggunakan chroot(jalankan sebagai pengguna root). Namun, Anda harus membuat dan menginisialisasi jail (direktori) sebelumnya. Singkatnya, Anda harus menempatkan perpustakaan dan binari yang dibutuhkan proses Anda ke penjara ini, lalu panggil chroot <path/to/jail> <command>. Tutorial yang bagus dengan beberapa contoh yang Anda butuhkan tersedia di sini
Pl4nk

13
  • Haruskah saya menggunakan cara lain untuk melakukannya sehingga akan dianggap "Praktek yang Baik"?

Jika Anda tidak memiliki alasan kuat dan tidak dapat dibantah, Anda harus menggunakan paket NTP yang disertakan dengan distribusi GNU / Linux Anda. Daemon NTP standar telah memakan waktu bertahun-tahun untuk menjadi dewasa dan dilengkapi dengan fitur-fitur canggih seperti memperlambat atau mempercepat jam sistem Anda agar sinkronisasi dengan jaringan atau jam GPS. Itu telah dirancang untuk sinkronisasi jam sehingga kemungkinan besar adalah alat terbaik untuk tujuan itu.

ntpdmasih dipertahankan, dilihat dari pembaruan terbaru (saat menulis posting ini). Jika Anda memerlukan lebih banyak fitur, saya sarankan Anda menghubungi pengembang secara langsung, percaya apa yang mereka katakan tentang itu.


5

Jika Anda memiliki program yang perlu dapat melakukan fungsi X (misalnya, memanipulasi jam), dan Anda dapat memberikannya hak istimewa / kekuatan untuk melakukan fungsi X dan tidak ada yang lain, itu lebih baik daripada memberikannya seluruh kaleng alfabet. Sup. Ini dikenal sebagai prinsip privilege paling tidak . Pertimbangkan, bagaimana jika program Anda memiliki bug - baik kesalahan pemrograman biasa atau kerentanan keamanan yang dapat dieksploitasi. Jika berjalan sebagai "root", itu dapat menghapus file semua orang - atau mengirimnya ke penyerang. Jika satu-satunya hal yang dapat dilakukan oleh program adalah memanipulasi jam (dan fungsi yang tidak diistimewakan, seperti memanipulasi file dalam direktori yang dikunci), maka itulah yang terburuk yang dapat terjadi jika program tersebut menjadi nakal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.