Bagaimana sudo lebih aman daripada langsung menggunakan su jika pengguna diberikan akses ke semua perintah?

40

Jadi saya telah membaca perbedaan antara menggunakan sudan sudo, dan semua orang tampaknya sepakat bahwa sudopendekatan ini lebih aman daripada memungkinkan akses ke akun root itu sendiri. Mereka mengatakan bahwa dengan akun root Anda dapat menghancurkan seluruh sistem Anda hanya dengan satu perintah. Ini saya mengerti. TETAPI pengguna awal yang dibuat pada sistem juga memiliki akses ke semua perintah menggunakan sudo. Ini saya bisa mengetahuinya dengan menjalankan su -l. Jika ini masalahnya, maka saya bisa menjalankannya sudo <game-ending command>untuk merusak sistem saya. Jadi, bagaimana pendekatan ini lebih baik atau lebih aman daripada memungkinkan saya akses langsung ke akun pengguna super? Saya dapat menjalankan semua perintah yang sama ...

Apakah karena menggunakan sudopada baris perintah saya secara eksplisit memberitahu komputer saya pikir saya tahu apa yang saya lakukan? Apakah mereka pikir orang akan lupa bahwa mereka berada di bawah akun pengguna super kecuali mereka secara eksplisit mengatakannya?

Orang-orang juga menyatakan bahwa jika sistem dikompromikan dan dimasukkan oleh seseorang asing, berada di bawah akun root akan memungkinkan mereka untuk melakukan hal-hal buruk pada sistem saya. Tapi menurut saya jika mereka sudah memiliki akses ke akun saya, dan tahu kata sandi saya, mereka dapat melakukan hal-hal buruk yang sama dengan menggunakan sudo dan memasukkan kata sandi saya karena mereka bahkan tidak perlu mengetahui kata sandi pengguna super. Apa yang tidak saya dapatkan di sini?

bmcentee148
sumber
2
Terima kasih telah membuat pertanyaan ini, jadi sekarang ada sesuatu untuk ditunjukkan kepada orang-orang yang terus mengatakan sudo lebih aman tetapi tidak dapat membenarkannya.
user253751

Jawaban:

40

Secara pribadi saya tidak menganggapnya lebih aman dan sebagian besar manfaat (dari sudo) ada pada sistem multi-pengguna. Pada sistem pengguna tunggal mungkin adalah pencucian.

Manfaatnya adalah (tanpa urutan tertentu):

  • sudo memiliki logging unggul. sudo mencatat setiap perintah.
  • sudo memungkinkan kontrol butir yang lebih baik. Seseorang dapat mengkonfigurasi sudo untuk memberikan akses root ke beberapa tetapi tidak semua perintah.
  • sudo menggunakan kata sandi masuk. Ini melindungi harus memberikan kata sandi root (seperti yang Anda lakukan dengan su) dan terkait dengan poin di atas mengenai kontrol berbutir halus / akses ke root.
  • Di Ubuntu, secara default, akun root dikunci. Ini mencegah cracker untuk login (remote via say ssh) mereka harus menebak nama pengguna dan kata sandi. Jika akun root tidak dikunci, seperti halnya su, maka mereka hanya perlu memecahkan kata sandi root.
  • sudo -imungkin merupakan metode terbaik untuk mengisolasi variabel lingkungan root dari pengguna Anda. Ini muncul dari waktu ke waktu tetapi cukup esoteris. Lihat https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • beberapa orang merasa bahwa harus mengetikkan sudo sebelum setiap perintah yang ingin mereka jalankan sebagai root atau memiliki sudo time out memungkinkan mereka untuk berhenti dan berpikir lebih jernih dan mengurangi kesalahan mereka atau menjalankan perintah yang salah. Jika melakukan hal itu membantu Anda, itu akan bermanfaat juga.

Mungkin ada lebih banyak manfaat, tetapi itu adalah yang utama, IMHO.

Lihat juga - https://help.ubuntu.com/community/RootSudo

Untuk mencoba menjawab beberapa pemikiran Anda yang lain:

  • Tidak ada apa pun tentang su atau sudo yang mencegah Anda menjalankan kode jahat selama Anda tahu kata sandinya. Tidak ada yang lebih aman atau lebih baik.
  • Cracker dapat memperoleh akses shell melalui sejumlah metode. Ketika Anda melihat "jalankan kode arbitrer" di pemberitahuan keamanan - https://usn.ubuntu.com/usn/ - itu artinya seorang cracker dapat menjalankan / bin / bash atau kode lainnya. Dengan demikian cracker, melalui berbagai eksploitasi, dapat memperoleh akses shell tanpa mengetahui nama login atau kata sandi Anda. Baik sudo atau su tidak membantu.
  • Jika cracker memiliki akses shell, mereka dapat melakukan banyak kerusakan tanpa akses root. Misalnya ransomware yang mengenkripsi semua data pribadi Anda.
  • Jika cracker memiliki akses shell ke akun dengan akses root, melalui su atau sudo, cracker dapat memperoleh akses root melalui sejumlah metode di luar ruang lingkup diskusi ini. Baik sudo atau su tidak unggul dalam hal ini.

Jadi, meskipun Anda telah mengamati masalah atau kekurangan pada sudo, su memiliki kerentanan yang sama persis dan su tidak lebih unggul daripada sudo dalam aspek-aspek tersebut, IMHO

Harimau kumbang
sumber
Akan lebih baik jika memilih untuk mengizinkan semua kekuatan pengguna (poweroff dan reboot) mengontrol pada destop inatallation, daripada entri sudoers atau memiliki nama grup.
mckenzm
8
Saya percaya keuntungan terbesar adalah harus membenarkan setiap perintah karena memerlukan izin pengguna super. Saya menemukan dalam pengalaman awal saya dengan Linux bahwa saya cenderung selalu berakhir berjalan sebagai root di setidaknya satu terminal saat saya mengutak-atik sistem. Sayangnya, sangat mudah untuk mengeluarkan perintah destruktif di terminal dengan kesalahpahaman atau salah ketik. Jika itu ada di 'terminal root' itu bisa menghasilkan pemulihan dari cadangan atau instal ulang. sudo telah melindungi saya dari itu berkali-kali!
rolinger
14
Tidak mengompromikan kata sandi root mungkin merupakan keuntungan tunggal terbesar dari sudo. Anda dapat memberikan izin root tanpa mengungkapkan rahasia apa pun.
Thorbjørn Ravn Andersen
Anda tidak hanya dapat membatasi perintah tetapi Anda bahkan dapat membatasi argumen yang ditentukan. Tetapi saya tidak setuju bahwa root yang dikunci ada hubungannya dengan itu; karena Anda dapat mengkonfigurasi ssh untuk tidak mengizinkan login root. Ada sesuatu yang lain dengan su versus sudo: sudo Anda menggunakan kata sandi pengguna Anda yang satu kata sandi lebih sedikit untuk dikompromikan dan itu biasanya bukan hal yang baik. Seperti segala sesuatu di dunia ini ada berbagai cara untuk melakukan sesuatu dan itu tidak berarti satu cara lebih benar daripada yang lain 100% dari waktu jika pernah. Lalu ada preferensi.
Pryftan
Tapi otoh jika lebih dari satu pengguna yang membutuhkan akses root (yang bukan sesuatu yang akan saya bahas karena itu hanya - yah itu diskusi yang panas di terbaik) maka sudo memiliki keuntungan di sana.
Pryftan
10

Bayangkan Anda memiliki 20 menit untuk melakukan sesuatu yang kompleks. Anda sedikit mabuk dan Anda harus buru-buru. "Ayo gunakan su," katamu. “Ini akan menghemat waktu” adalah alasan Anda.

Secara tidak sengaja Anda mengetik

rm -rf /*

dari pada

rm -rf ./*

Sistem Anda sekarang gagal sendiri dan Anda memiliki 10 menit hingga batas waktu Anda.

Jika Anda secara eksplisit memilih kapan Anda perlu root, Anda dapat meminimalkan kemungkinan ini terjadi. Root mungkin tidak diperlukan untuk itu, rm -r ./*jadi mengapa menggunakannya? Mengapa mengambil risiko?

Itulah arti "keselamatan" di sini. Meminimalkan risiko pengguna (semua pengguna, bukan hanya pemula) membuat kesalahan fatal.

Tentu saja, ini adalah contoh ekstrem yang seharusnya tidak boleh terjadi di lingkungan produksi (saya jamin itu terjadi di lingkungan prod).

Dari segi keamanan ada beberapa hal yang sudo lebih baik juga. Seperti yang dikatakan @Panther - logging, pembatasan, kata sandi root adalah SPOF, dll.)

dijksterhuis
sumber
4
Sial, Anda tidak perlu menunggu selama itu hanya jika Anda lakukan ... chown -R nobody:nobody /atau bahkan chown -R nobody ../sebagai root. chmodtentu saja memiliki masalah yang sama juga dalam mode rekursif. Tetapi poin terbaik yang Anda buat adalah bahwa Anda seharusnya hanya menjadi root saat Anda membutuhkannya; semakin sedikit hak istimewa login Anda semakin baik untuk penggunaan normal.
Pryftan
2
+1 untuk pemrograman saat Anda mabuk.
abhicantdraw
4
Jadi, bagaimana bedanya dengan ini sudo? Anda menulis sudo rm -rf /*alih-alih sudo rm -rf ./*dan boom lagi.
ilkkachu
2
@ilkkachu dalam hal perintah aktual, itu membuat perbedaan minimal dengan apa yang terjadi. Tetapi Anda harus secara eksplisit menyatakan bahwa Anda ingin melakukan ini sebagai root. Itulah intinya. Keselamatan adalah tentang manajemen risiko. Tentu saja Anda masih dapat merusak sistem. Tetapi semakin sedikit waktu Anda memiliki hak root, semakin sedikit kesempatan untuk melakukan kesalahan fatal. Keselamatan adalah tentang meminimalkan probabilitas.
dijksterhuis
2
@ilkkachu Karena Anda tidak akan mengetik sudo rm -rf ./*. Anda mungkin memiliki akses tulis ke hal-hal di direktori saat ini, jadi Anda tidak perlu sudo untuk perintah itu. Jadi perintah ujung typoed sampai menjadi rm -rf /*, yang menghasilkan serangkaian panjang "Izin ditolak" pesan, membiarkan Anda tahu bahwa Anda perlu ctrl-csebelum sampai ke hal-hal yang Anda benar-benar dapat menghapus, bukan hanya menghapus segala sesuatu dalam /bin, /boot, /dev, dan setengah dari /etcsebelumnya Anda bahkan menyadari ada sesuatu yang salah.
Ray
9

Saya ingin menambahkan sedikit perspektif historis ke jawaban lain. Sayangnya, saya tidak memiliki sumber yang siap kecuali ingatan saya sendiri tentang diskusi Usenet dan artikel majalah.

Beberapa waktu yang lalu, pada tahun 1990-an, distribusi membuatnya lebih mudah untuk menginstal Linux pada perangkat keras Anda sendiri, bahkan dengan tidak banyak pengetahuan komputer. ¹ Dengan demikian, Linux mulai menarik lebih banyak orang yang secara mengejutkan belum pernah dibor sebelumnya sebagai administrator sistem pada beberapa dialek UN * X. Sebaliknya, banyak yang digunakan untuk sistem (pengguna tunggal) seperti Windows 95/98. Dan mereka belajar bahwa sebagian besar tugas administrasi sistem Linux membuatnya perlu untuk bekerja di bawah akun "root" yang aneh itu.

Jadi, beberapa pengguna baru saja login sebagai root dan menggunakan akun itu untuk semua pekerjaan sehari-hari mereka. Mengapa mereka harus mengetik sudan mem - root password berulang kali atau login ke tty baru hanya untuk beberapa perintah admin? Tetapi menggunakan root untuk semuanya tentu saja bukan ide yang baik, karena Anda bisa melakukan lebih banyak kerusakan pada sistem Anda dengan beberapa perintah lalai di tempat yang salah. Ini bahkan menyebabkan beberapa distro (apakah itu SuSE?) Untuk memodifikasi latar belakang desktop untuk pengguna root untuk menampilkan peringatan besar bahwa Anda harus menggunakan akun itu hanya untuk tugas admin.

Jadi, cara Ubuntu dengan sudomemiliki beberapa kelebihan (selain yang sudah terdaftar oleh Panther ).

  • Anda tidak dapat langsung login ke akar account.² :-)
  • Proses instalasi tidak akan meminta kata sandi root (tambahan), Anda hanya perlu satu kata sandi (pengguna).
  • sudocache kredensial Anda, jadi untuk beberapa perintah admin secara berurutan, Anda hanya perlu memasukkan kata sandi satu kali (berbeda dengan su). Ini mengurangi keinginan untuk hanya membuka shell atau terminal baru dengan hak akses root .
  • Dan membuatnya lebih mudah untuk memberi tahu pengguna secara online dan dalam dokumentasi mana perintah yang harus mereka masukkan sebagai admin dan yang tidak .³

¹ Dan bagi mereka yang tidak berani melakukannya sendiri, ada pihak yang memasang.
² Tetapi Anda dapat menggunakan perintah seperti sudo -iatau sudo su - rootuntuk mendapatkan shell root setelah Anda masuk sebagai pengguna normal.
³ Tapi Anda tentu saja tahu bahwa Anda seharusnya tidak hanya menyalin & menempelkan perintah dari Internet , bukan?

Dubu
sumber
Apakah Anda mengatakan di Ubuntu bahwa Anda tidak dapat melakukan: sudo su -atau sudo su - root? Karena saya telah melihat klaim serupa misalnya bahwa MacOS X tidak memiliki root tetapi itu benar-benar salah ketika seseorang hanya perlu melakukan perintah pertama ...
Pryftan
2
Tentu saja ada akun root . Saya bilang Anda tidak bisa "login secara langsung", artinya Anda tidak dapat memasukkan pengguna rootdan kata sandi pada prompt login atau dialog login X dan memulai sesi Anda sebagai root. Tetapi Anda dapat menggunakan salah satu dari perintah Anda (saya lebih suka sudo -ikarena lebih pendek dan saya malas) untuk mendapatkan shell root.
Dubu
1
Tolong baca komentar saya lagi :) Saya mengatakan bahwa beberapa mengatakan MacOS X tidak memiliki akun root tetapi sebenarnya itu dan mengingatkan saya pada ini (saya tidak menyamakannya dengan tidak ada akun root di Ubuntu). Tapi untuk semua yang saya tahu devs di Ubuntu cukup gila untuk menambal sudo untuk tidak membiarkan itu maka pertanyaan saya.
Pryftan
1
@Pryftan Seperti yang saya katakan di komentar saya di atas, kedua perintah Anda berfungsi dan akan memberi Anda shell root. Saya akan menambahkan itu ke jawaban saya.
Dubu
Iya nih. Saya tahu itu :) Saya tidak mengatakan itu salah atau tidak demikian. Saya mengatakan bahwa itu mengingatkan saya pada sesuatu yang dikatakan beberapa orang tetapi tidak benar dalam mengatakannya. Oleh karena itu berani membuat bagian itu.
Pryftan
2

Dimungkinkan untuk menonaktifkan login root melalui ssh selama beberapa dekade. Cara Ubuntu menonaktifkan akun root dan membuat orang sudo semuanya tidak lebih dari sebuah trik. Hanya "sudo -s" dan Anda memiliki shell root. Nonaktifkan login root melalui ssh dan biarkan di sana.

P. Goetterup
sumber
8
... pada catatan itu, hanya akan menjadi kunci untuk SETIAP ssh login, bukan hanya akun root, adalah praktik yang bagus.
rackandboneman
Iya nih. Saya mencatat ini dalam komentar hanya beberapa menit yang lalu. Otoh menjadi yang paling istimewa adalah yang terbaik dari semuanya jadi hanya meningkat ketika Anda perlu dan ini berlaku untuk apakah Anda login oleh ssh atau secara lokal. Dan apa yang dikatakan @rackandboneman tentu saja benar juga bagi saya, saya menonaktifkan remote stop penuh bahkan dengan kunci ssh terlepas dari sistem.
Pryftan
0

Tergantung pada konfigurasi, sudo <game ending command>belum tentu bekerja. Tentu saja, jika sudoerskonfigurasi berbunyi "user ALL = (ALL) ALL", tidak sudoakan menawarkan perlindungan tambahan. Namun Anda dapat menentukan daftar perintah istimewa yang harus sering Anda jalankan, seperti menginstal paket baru, dan meninggalkan perintah berbahaya seperti rm.

Dengan cara ini Anda dapat menjalankan semua perintah jika Anda masuk sebagai root, tetapi karena Anda hanya membutuhkan ini sesekali, risiko menjalankan <game ending command>akan berkurang secara substansial.

Dmitry Grigoryev
sumber
1
Dan argumen spesifik untuk perintah juga.
Pryftan
1
Dan per grup, bukan per pengguna. menggunakan grup sangat berharga dalam lingkungan multi-pengguna jika staf dapat datang dan pergi dan di mana Anda mungkin memerlukan peran tertentu.
Panther
0

Sudo itu memungkinkan Anda untuk hanya mengizinkan perintah tertentu bukan satu-satunya manfaat sudo daripada su.

Di sebagian besar toko, itu bahkan bukan manfaat yang paling penting.

Dengan sudo, Anda tahu siapa yang melakukan perintah tertentu.

Sekarang mungkin ini tidak masalah bagimu. Misalnya, Anda mungkin satu-satunya pengguna komputer Anda. Jika demikian, maka sudo mungkin tidak lebih baik dari su.

Tetapi banyak host memiliki lebih dari satu admin.

sudo kemudian menjadi sangat berguna karena jika seseorang melakukan kesalahan, sudo memberi tahu Anda siapa yang melakukannya.

Itu memungkinkan Anda untuk memahami mengapa kesalahan terjadi, dan mendidik orang untuk mencegah kesalahan berulang, atau jika perlu, untuk menghapus alat dari seseorang.

Sebagai bonus, ketika orang tahu bahwa tindakan mereka dicatat, mereka seringkali sedikit lebih berhati-hati.

Sudo tidak sempurna.

Jika dua orang melakukan "sudo sh" pada saat yang sama, maka akan sulit untuk mengaitkan perintah ke satu atau yang lain.

Dan admin jahat selalu dapat menghapus atau mengedit log - meskipun melakukan itu dengan bersih tidak selalu semudah yang dipikirkan orang, terutama jika Anda memiliki logging terpusat.

sudo tidak serta merta menghentikan tindakan bodoh atau jahat, untuk semua alasan yang diidentifikasi dalam pertanyaan awal.

Tetapi itu memberi Anda kesempatan yang jauh lebih baik untuk mencegah terulangnya.

Ben Aveling
sumber
1. Hanya jika Anda meluangkan waktu untuk mengkonfigurasinya dengan benar. Yang tidak dilakukan sistem Ubuntu default (dan tidak bisa dilakukan). 2. Hanya jika pengguna tidak memiliki cara untuk mengedit log post-fact, yang dapat mereka lakukan kecuali perintah yang dapat mereka jalankan terbatas. (Yang tidak dalam use case default Ubuntu)
ilkkachu
@ilkkachu, meskipun Anda memiliki beberapa poin bagus, argumen Anda di sini tidak masuk akal di sini. Intinya bukan pengaturan default, intinya adalah mungkin untuk mengkonfigurasi dan fine tune sudo. Anda tidak dapat mengkonfigurasi su untuk bertindak dengan cara ini sama sekali. su adalah semua atau tidak sama sekali, tidak ada cara untuk membatasi perintah dan itu adalah fakta bahwa sudo menyediakan logging unggul. Baik su atau sudo tidak menawarkan keamanan apa pun terhadap apa yang cracker dapat lakukan atau tidak lakukan pada sistem yang dikompromikan, dan tidak ada yang memberikan sudo dengan cara ini. Log sudo memiliki nilai besar dalam operasi normal sehari-hari.
Panther
@Panther, well, judul pertanyaan mengatakan "... jika pengguna diberikan akses ke semua perintah?" jadi saya menganggap mereka berarti konfigurasi default Ubuntu yang biasa di mana sudomemungkinkan semuanya. Tentu, Anda dapat mengkonfigurasinya untuk membatasi perintah yang diizinkan dijalankan oleh pengguna, tetapi saya kira itu tidak terjadi dalam pertanyaan seperti yang ditanyakan.
ilkkachu
Jawaban diperluas.
Ben Aveling
@ilkkachu - baca kembali jawaban saya "Secara pribadi saya belum tentu menganggapnya lebih aman dan sebagian besar manfaat (dari sudo) ada pada sistem multi-pengguna. Pada sistem satu pengguna mungkin ini adalah pencucian." Saya kemudian menjelaskan kelebihan lain dari sudo, salah satunya adalah dapat dikonfigurasi.
Panther