it-swarm-id.com

Mana cara teraman untuk mendapatkan hak akses root: Sudo, su atau login?

Saya ingin memiliki akun root dalam keamanan bahkan jika pengguna saya yang tidak berkompromi terganggu.

Di Ubuntu Anda hanya dapat menggunakan Sudo karena "alasan keamanan" secara default. Namun saya tidak yakin itu lebih aman daripada hanya menggunakan login pada konsol mode teks. Ada terlalu banyak hal yang bisa salah jika penyerang dapat menjalankan kode sebagai pengguna normal saya. Misalnya menambahkan alias, menambahkan hal-hal ke PATH saya, mengatur LD_PRELOAD dan X11 keyloggers hanya untuk menyebutkan beberapa. Satu-satunya keuntungan yang bisa saya lihat adalah batas waktu jadi saya tidak pernah lupa untuk logout.

Saya memiliki keraguan yang sama tentang su tetapi bahkan tidak memiliki batas waktu. Beberapa operasi (terutama IO redirection) lebih nyaman dengan su tetapi keamanan-bijaksana ini tampaknya lebih buruk.

Masuk pada konsol mode teks tampaknya paling aman. Karena ini dimulai oleh init jika penyerang dapat mengontrol PATH atau LD_PRELOAD, ia sudah di-root. Acara penekanan tombol tidak dapat dicegat oleh program yang berjalan di X. Saya tidak tahu apakah program yang berjalan di X dapat mencegat [ctrl] + [alt] + [f1] (dan membuka jendela layar penuh yang terlihat seperti konsol) atau aman seperti [ctrl] + [alt] + [del] pada Windows. Selain itu satu-satunya masalah yang saya lihat adalah kurangnya waktu tunggu.

Jadi, apakah saya melewatkan sesuatu? Mengapa orang-orang Ubuntu memutuskan untuk hanya mengizinkan sudo? Apa yang bisa saya lakukan untuk meningkatkan keamanan dari salah satu metode?

Bagaimana dengan SSH? Secara tradisional root tidak bisa masuk melalui SSH. Tetapi menggunakan logika di atas bukankah ini hal yang paling aman untuk dilakukan:

  • izinkan root melalui SSH
  • beralih ke mode teks
  • login sebagai root
  • ssh ke mesin lain
  • login sebagai root?
124
stribika

Keamanan selalu tentang pengorbanan. Seperti halnya pepatah server yang berada di tempat yang aman, tidak terhubung, di dasar lautan, root akan menjadi sebagian besar aman jika ada sama sekali tidak ada cara untuk mengaksesnya.

Serangan LD_PRELOAD dan PATH seperti yang Anda jelaskan berasumsi bahwa sudah ada penyerang dengan akses ke akun Anda, atau setidaknya ke dotfiles Anda. Sudo sama sekali tidak melindungi terhadap hal itu dengan baik - jika mereka memiliki kata sandi Anda, tidak perlu mencoba menipu Anda untuk nanti ... mereka hanya dapat menggunakan Sudo sekarang .

Penting untuk mempertimbangkan apa yang awalnya dirancang untuk Sudo: pendelegasian spesifik perintah (seperti yang mengelola printer) ke "sub-administrator" (mungkin mahasiswa pascasarjana di laboratorium) tanpa memberikan root sepenuhnya. Menggunakan Sudo untuk melakukan semuanya adalah penggunaan paling umum yang saya lihat sekarang, tapi itu belum tentu masalah yang ingin dipecahkan oleh program (karena konfigurasi yang sangat rumit sintaks file).

Tapi, Sudo-for-unrestricted-root tidak mengatasi masalah keamanan lain: pengelolaan kata sandi root. Di banyak organisasi, ini cenderung diedarkan seperti permen, ditulis di papan tulis, dan dibiarkan sama selamanya. Itu meninggalkan kerentanan besar, karena mencabut atau mengubah akses menjadi jumlah produksi yang besar. Bahkan melacak mesin apa yang memiliki kata sandi merupakan tantangan - apalagi melacak siapa yang tahu yang mana.

Ingatlah bahwa sebagian besar "kejahatan dunia maya" berasal dari dalam. Dengan situasi root password yang dijelaskan, sulit untuk melacak siapa yang melakukan apa - sesuatu yang Sudo dengan penawaran logging jarak jauh dengan cukup baik.

Pada sistem rumah Anda, saya pikir ini lebih merupakan masalah kenyamanan karena tidak harus mengingat dua kata sandi. Mungkin banyak orang hanya mengaturnya agar sama - atau lebih buruk, mengaturnya agar sama pada awalnya dan kemudian membiarkan mereka keluar dari sinkronisasi, membiarkan kata sandi root membusuk.

Menggunakan kata sandi sama sekali untuk SSH berbahaya, karena daemon ssh trojaned ssh sniffing diletakkan di tempat seperti 90% dari kompromi sistem dunia nyata Saya telah melihat. Jauh lebih baik menggunakan kunci SSH, dan ini bisa menjadi sistem yang bisa diterapkan untuk akses root jarak jauh juga.

Tapi masalahnya sekarang Anda sudah beralih dari manajemen kata sandi ke manajemen kunci, dan kunci ssh tidak terlalu mudah dikelola. Tidak ada cara untuk membatasi salinan, dan jika seseorang membuat salinan, mereka memiliki semua upaya yang mereka inginkan untuk secara paksa memaksa frasa sandi. Anda dapat membuat kebijakan dengan mengatakan bahwa kunci harus disimpan pada perangkat yang dapat dilepas dan hanya dipasang jika diperlukan, tetapi tidak ada cara untuk menegakkannya - dan sekarang Anda telah memperkenalkan kemungkinan perangkat yang dapat dilepas hilang atau dicuri.

Keamanan tertinggi akan datang melalui kunci satu kali atau token kriptografi berbasis waktu/counter. Ini dapat dilakukan dalam perangkat lunak, tetapi perangkat keras yang tahan terhadap kerusakan bahkan lebih baik. Di dunia open source, ada WiKiD , YubiKey , atau LinOTP , dan tentu saja ada juga kelas berat berpemilik RSA SecurID . Jika Anda berada di organisasi menengah ke besar, atau bahkan organisasi kecil yang sadar akan keamanan, saya sangat merekomendasikan untuk melihat ke salah satu pendekatan ini untuk akses administratif.

Ini mungkin terlalu berat untuk rumah, di mana Anda tidak benar-benar memiliki kerepotan manajemen - selama Anda mengikuti praktik keamanan yang masuk akal.

105
mattdm

Ini adalah pertanyaan yang sangat kompleks. mattdmsudah membahas banyak poin .

Antara su dan Sudo, ketika Anda mempertimbangkan satu pengguna, su sedikit lebih aman karena penyerang yang menemukan kata sandi Anda tidak dapat langsung mendapatkan hak akses root. Tapi yang diperlukan hanyalah penyerang menemukan lubang root lokal (relatif tidak umum) atau menginstal trojan dan menunggu Anda menjalankan su.

Sudo memiliki kelebihan bahkan dibandingkan login konsol ketika ada banyak pengguna. Misalnya, jika suatu sistem dikonfigurasikan dengan log anti-perusakan jarak jauh, Anda selalu dapat mengetahui siapa yang terakhir menjalankan Sudo (atau yang akunnya disusupi), tetapi Anda tidak tahu siapa yang mengetik kata sandi root pada konsol.

Saya menduga keputusan Ubuntu adalah sebagian untuk kepentingan kesederhanaan (hanya satu kata sandi untuk diingat) dan sebagian untuk kepentingan keamanan dan kemudahan distribusi kredensial pada mesin bersama (bisnis atau keluarga).

Linux tidak memiliki kunci perhatian aman atau antarmuka pengguna aman lainnya untuk otentikasi. Sejauh yang saya tahu bahkan OpenBSD tidak memilikinya. Jika Anda khawatir tentang akses root, Anda bisa menonaktifkan akses root dari sistem yang sedang berjalan sekaligus: jika Anda ingin menjadi root, Anda perlu mengetikkan sesuatu di Prompt bootloader. Ini jelas tidak cocok untuk semua kasus penggunaan. (* BSD securelevel berfungsi seperti ini: pada securelevel tinggi, ada hal-hal yang tidak dapat Anda lakukan tanpa me-reboot, seperti menurunkan securelevel atau mengakses perangkat mentah yang terpasang secara langsung.)

Membatasi cara seseorang menjadi root tidak selalu merupakan keuntungan untuk keamanan. Ingat anggota ketiga dari triad keamanan : kerahasiaan , integritas , ketersediaan . Mengunci diri Anda dari sistem dapat mencegah Anda merespons insiden.

Para perancang distro OpenWall GNU/*/Linux yang diamankan juga telah menyatakan pendapat kritis tentang su (untuk menjadi root) dan Sudo. Anda mungkin tertarik membaca utas ini:

... sayangnya kedua su dan Sudo secara halus tetapi pada dasarnya cacat.

Selain membahas kekurangan su dan hal-hal lain, Solar Designer juga menargetkan satu alasan khusus untuk menggunakan su:

Ya, dulu kebijaksanaan sysadmin umum untuk "su root" daripada login sebagai root. Beberapa orang yang, ketika ditanya, benar-benar dapat mengajukan alasan yang sah untuk preferensi ini akan merujuk pada akuntabilitas yang lebih baik yang dicapai dengan pendekatan ini. Ya, ini benar-benar alasan yang bagus untuk pendekatan ini. Tapi itu juga satu-satunya. ...(Baca lebih banyak)

Di distro mereka, mereka telah "sepenuhnya menyingkirkan program root SUID di instalasi default" (mis., Termasuk su; dan mereka tidak menggunakan kemampuan untuk ini):

Untuk server, saya pikir orang perlu mempertimbangkan kembali dan, dalam banyak kasus, melarang permintaan su dan Sudo oleh pengguna. Tidak ada keamanan tambahan dari "login sebagai non-root, lalu su atau Sudo untuk me-root" sysadmin "wisdom", dibandingkan dengan masuk sebagai non-root dan sebagai root secara langsung (dua sesi terpisah). Sebaliknya, pendekatan yang terakhir adalah satu-satunya yang benar, dari sudut pandang keamanan:

http://www.openwall.com/lists/owl-users/2004/10/20/6

(Untuk akuntabilitas beberapa sysadmin, sistem perlu mendukung memiliki beberapa akun root-privilege, seperti yang dilakukan Owl.)

(Untuk desktop dengan X, ini menjadi lebih sulit.)

Anda juga benar-benar harus berurusan dengan ...

BTW, mereka mengganti sulogin dengan msulogin untuk memungkinkan pengaturan dengan beberapa akun root: msulogin memungkinkan seseorang untuk mengetikkan nama pengguna juga ketika masuk ke mode pengguna tunggal (dan menjaga "akuntabilitas") (info ini berasal dari diskusi ini dalam bahasa Rusia ).

Anda tampaknya berasumsi bahwa menggunakan Sudo selalu mempertahankan variabel lingkungan, tetapi hal ini tidak selalu terjadi. Berikut ini kutipan dari halaman buku Sudo:

Ada dua cara berbeda untuk menangani variabel lingkungan. Secara default, opsi sudoers env_reset diaktifkan. Ini menyebabkan perintah dieksekusi dengan lingkungan minimal yang berisi TERM, PATH, HOME, Shell, LOGNAME, USER dan USERNAME sebagai tambahan terhadap variabel dari proses pemanggilan yang diizinkan oleh opsi sudo env_check dan env_keep. Ada secara efektif daftar putih untuk variabel lingkungan.

Namun, jika opsi env_reset dinonaktifkan di sudoers, variabel apa pun yang tidak secara eksplisit ditolak oleh opsi env_check dan env_delete diwarisi dari proses pemanggilan. Dalam hal ini, env_check dan env_delete berperilaku seperti daftar hitam. Karena tidak mungkin memasukkan semua variabel lingkungan yang berpotensi berbahaya ke daftar hitam, dianjurkan untuk menggunakan perilaku env_reset default.

Dalam semua kasus, variabel lingkungan dengan nilai yang dimulai dengan () dihapus karena mereka dapat diartikan sebagai fungsi bash. Daftar variabel lingkungan yang diizinkan atau ditolak oleh Sudo terkandung dalam output Sudo -V saat dijalankan sebagai root.

Jadi jika env_reset diaktifkan (default), penyerang tidak dapat menimpa PATH Anda atau variabel lingkungan lainnya (kecuali jika Anda secara khusus menambahkannya ke daftar putih variabel yang harus dipertahankan).

4
Cedric

Pendekatan paling aman adalah ssh login menggunakan (setidaknya) kunci panjang 2048 (dengan login password dinonaktifkan) menggunakan perangkat fisik untuk menyimpan kunci.

4
Šimon Tóth

Saya hanya ingin menambahkan sesuatu yang agak off topic. (untuk topik, periksa '/ bin/su -' di sini setelah)

Saya pikir "keamanan" di atas juga harus dikaitkan dengan data aktual yang ingin kita amankan.

Akan dan harus berbeda jika kita ingin mengamankan: my_data, my_company_data, my_company_network.

Biasanya, jika saya berbicara tentang keamanan saya juga berbicara tentang "keamanan data" dan cadangan. Kami juga dapat menambahkan sistem toleran kesalahan dan sejenisnya.

Mengingat hal ini, saya pikir keamanan secara keseluruhan adalah keseimbangan antara kegunaan, "keamanan data" dan upaya yang diperlukan untuk menerapkan sistem yang aman.

Target Ubuntu adalah, dan sebagian besar masih, pengguna akhir: Sudo adalah default.

Fedora adalah versi gratis RedHat yang pada gilirannya lebih berorientasi pada server: Sudo dulu dinonaktifkan.

Untuk distribusi lain saya tidak punya informasi langsung.

Saya menggunakan sekarang, sebagian besar, Fedora. Dan sebagai pengguna gaya lama saya tidak pernah mengetik 'su'. Tapi saya bisa mengetik "/ bin/su -" dalam waktu yang sangat singkat walaupun saya bukan pengetik. Variabel PATH .. seharusnya tidak menjadi masalah (saya ketik path). Juga "-" (minus) pada prinsipnya harus menghapus variabel lingkungan pengguna saya dan hanya memuat yang root. yaitu menghindari beberapa masalah tambahan yang mungkin terjadi. Mungkin juga LS_PRELOAD.

Untuk sisanya saya kira @mattdm cukup tepat.

Tapi mari kita taruh di kotak yang benar. Asumsikan bahwa kit cerdas skrip mendapatkan akses ke data saya. Menurutmu apa yang akan dia lakukan dengan itu? - Publikasikan gambar saya? saya? - Mencoba mencari tahu nama pacar saya dan mengatakan kepadanya bahwa saya mengunjungi situs porno?

Dalam gambar pengguna tunggal dua situasi terburuk adalah: - Anak itu menghapus semua data saya: untuk bersenang-senang atau tidak sengaja - Anak itu menggunakan mesin saya untuk membuat serangan lebih lanjut ke beberapa entitas lain. Atau target serupa.

Untuk kasus pertama, saya sebutkan di atas, lebih baik melakukan upaya cadangan daripada keamanan jaringan. Yap, kamu selamat. Maksud saya crash hardware tidak jauh berbeda.

Kasus kedua lebih halus. Tetapi ada sinyal tentang kegiatan ini. Bagaimanapun, Anda dapat melakukan yang mungkin, tetapi saya tidak akan mengkonfigurasi PC rumah saya untuk dilindungi dari serangan teroris!

Saya akan melewatkan skenario lainnya.

tepuk tangan F

3
user5520

Jika masalahnya adalah akun pengguna yang dikompromikan dapat digunakan untuk mengendus kata sandi yang digunakan untuk Sudo atau su, maka gunakan kode sandi satu kali untuk Sudo dan su.

Anda dapat memaksa penggunaan kunci untuk pengguna jarak jauh, tetapi itu mungkin tidak berlaku untuk tujuan kepatuhan. Mungkin lebih efektif untuk mensetup kotak gateway SSH yang memerlukan autof dua faktor, kemudian mengizinkan penggunaan kunci dari sana. Berikut ini dok pada pengaturan seperti itu: Amankan penyebaran SSH Anda dengan otentikasi dua faktor WiKID .

2
nowen

Anda juga dapat melihat privacyIDEA , yang tidak hanya memberi Anda kemungkinan untuk menggunakan OTP untuk login ke mesin (atau untuk melakukan su/Sudo) tetapi juga dapat melakukan OTP offline.

Selain itu ia mampu mengelola kunci SSH Anda. Yaitu. jika Anda memiliki banyak mesin dan beberapa pengguna root, semua kunci SSH disimpan secara terpusat. Dengan demikian mudah untuk "mencabut"/menghapus kunci SSH, jika kunci tersebut tidak dapat dipercaya lagi.

Tentu saja ada tugas dan alur kerja organisasi, untuk mengamankan sistem.

0
cornelinux