GNU/Linux >> Belajar Linux >  >> Linux

Sysadmin asli tidak sudo

Beberapa bulan yang lalu, saya membaca artikel yang sangat menarik yang berisi beberapa informasi bagus tentang fitur Linux yang ingin saya pelajari lebih lanjut. Saya tidak akan memberi tahu Anda nama artikelnya, tentang apa, atau bahkan situs web tempat saya membacanya, tetapi artikel itu membuat saya bergidik.

Alasan saya menemukan artikel ini sangat ngeri adalah karena artikel ini mengawali setiap perintah dengan sudo memerintah. Masalah yang saya miliki dengan ini adalah bahwa artikel tersebut diduga untuk sysadmin, dan sysadmin asli tidak menggunakan sudo di depan setiap perintah yang mereka keluarkan. Melakukannya merupakan penyalahgunaan berat sudo memerintah. Saya telah menulis tentang jenis penyalahgunaan ini dalam buku saya, "Filosofi Linux untuk SysAdmins." Berikut kutipan dari Bab 19 buku tersebut.

Dalam artikel ini, kami mengeksplorasi mengapa dan bagaimana sudo alat disalahgunakan dan cara melewati konfigurasi yang memaksa seseorang untuk menggunakan sudo alih-alih bekerja secara langsung sebagai root.

sudo atau tidak sudo

Bagian dari menjadi administrator sistem dan menggunakan alat favorit Anda adalah menggunakan alat yang kami miliki dengan benar dan menyediakannya tanpa batasan apa pun. Dalam hal ini, saya menemukan bahwa sudo perintah digunakan dengan cara yang tidak pernah dimaksudkan. Saya sangat tidak suka dengan cara sudo fasilitas sedang digunakan di beberapa distribusi, terutama karena digunakan untuk membatasi dan membatasi akses oleh orang yang melakukan pekerjaan administrasi sistem ke alat yang mereka butuhkan untuk melakukan tugas mereka.

“[SysAdmins] jangan gunakan sudo.”
– Paul Venezia

Venezia menjelaskan dalam artikelnya di InfoWorld bahwa sudo digunakan sebagai penopang untuk sysadmin. Dia tidak menghabiskan banyak waktu untuk mempertahankan posisi ini atau menjelaskannya. Dia hanya menyatakan ini sebagai fakta. Dan saya setuju dengannya – untuk sysadmin. Kami tidak membutuhkan roda pelatihan untuk melakukan pekerjaan kami. Bahkan, mereka menghalangi.

Beberapa distro, seperti Ubuntu, menggunakan sudo perintah dengan cara yang dimaksudkan untuk membuat penggunaan perintah yang memerlukan hak akses (root) yang ditinggikan sedikit lebih sulit. Di distro ini, tidak mungkin untuk login secara langsung sebagai pengguna root sehingga sudo perintah digunakan untuk mengizinkan pengguna non-root akses sementara ke hak akses root. Ini seharusnya membuat pengguna sedikit lebih berhati-hati dalam mengeluarkan perintah yang membutuhkan hak istimewa yang lebih tinggi seperti menambah dan menghapus pengguna, menghapus file yang bukan milik mereka, menginstal perangkat lunak baru, dan umumnya semua tugas yang diperlukan untuk mengelola host Linux modern. Memaksa sysadmin untuk menggunakan sudo perintah sebagai pengantar untuk perintah lain seharusnya membuat bekerja dengan Linux lebih aman.

Menggunakan sudo cara yang dilakukan oleh distro-distro ini, menurut pendapat saya, merupakan upaya yang mengerikan dan tidak efektif untuk memberikan rasa aman yang salah kepada sysadmin pemula. Ini sama sekali tidak efektif dalam memberikan tingkat perlindungan apa pun. Saya dapat mengeluarkan perintah yang sama salah atau merusaknya menggunakan sudo yang saya bisa saat tidak menggunakannya. Distro yang menggunakan sudo untuk membius rasa takut bahwa kita mungkin mengeluarkan perintah yang salah melakukan sysadmin merugikan besar. Tidak ada batasan atau batasan yang dikenakan oleh distro ini pada perintah yang mungkin digunakan dengan sudo fasilitas. Tidak ada upaya untuk benar-benar membatasi kerusakan yang mungkin terjadi dengan benar-benar melindungi sistem dari pengguna dan kemungkinan bahwa mereka mungkin melakukan sesuatu yang berbahaya – juga seharusnya tidak.

Jadi mari kita perjelas tentang ini—distribusi ini mengharapkan pengguna untuk melakukan semua tugas administrasi sistem. Mereka membuai pengguna—yang sebenarnya adalah Administrator Sistem—dengan berpikir bahwa mereka entah bagaimana terlindungi dari efek melakukan sesuatu yang buruk karena mereka harus mengambil langkah ekstra yang membatasi ini untuk memasukkan kata sandi mereka sendiri untuk menjalankan perintah.

Lewati sudo

Distribusi yang bekerja seperti ini biasanya mengunci kata sandi untuk pengguna root (Ubuntu adalah salah satu distro ini). Dengan cara ini tidak ada yang bisa login sebagai root dan mulai bekerja tanpa beban. Mari kita lihat bagaimana ini bekerja dan kemudian bagaimana melewatinya.

Biarkan saya menetapkan pengaturan di sini sehingga Anda dapat mereproduksinya jika Anda mau. Sebagai contoh, saya menginstal Ubuntu 16.04 LTS1 di VM menggunakan VirtualBox. Selama instalasi, saya membuat pengguna non-root, pelajar, dengan kata sandi sederhana untuk eksperimen ini.

Masuk sebagai siswa pengguna dan buka sesi terminal. Mari kita lihat entri untuk root di /etc/shadow file, di mana kata sandi terenkripsi disimpan.

student@machine1:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied

Izin ditolak sehingga kami tidak dapat melihat /etc/shadow file . Ini umum untuk semua distribusi sehingga pengguna yang tidak memiliki hak istimewa tidak dapat melihat dan mengakses kata sandi terenkripsi. Akses tersebut akan memungkinkan penggunaan alat peretasan umum untuk memecahkan sandi tersebut sehingga tidak aman untuk mengizinkannya.

Sekarang mari kita coba su – untuk melakukan root.

student@machine1:~$ su -
Password:
su: Authentication failure

Upaya ini untuk menggunakan su perintah untuk mengangkat pengguna kami ke hak istimewa root gagal karena akun root tidak memiliki kata sandi dan terkunci. Mari kita gunakan sudo untuk melihat /etc/shadow berkas.

student@machine1:~$ sudo cat /etc/shadow
[sudo] password for student: <enter the user password>
root:!:17595:0:99999:7:::
<snip>
student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::
<snip>

Saya telah memotong hasil untuk hanya menampilkan entri untuk pengguna root dan siswa. Saya juga telah mempersingkat kata sandi terenkripsi sehingga entri akan muat dalam satu baris. Kolom dipisahkan oleh titik dua (: ) dan kolom kedua adalah kata sandi. Perhatikan bahwa bidang kata sandi untuk root adalah "bang", yang dikenal di seluruh dunia sebagai tanda seru (! ). Ini menunjukkan bahwa akun terkunci dan tidak dapat digunakan.

Sekarang, yang perlu kita lakukan untuk menggunakan akun root sebagai sysadmin yang tepat adalah menyiapkan kata sandi untuk akun root.

student@machine1:~$ sudo su -
[sudo] password for student: <Enter password for student>
root@machine1:~# passwd root
Enter new UNIX password: <Enter new root password>
Retype new UNIX password: <Re-enter new root password>
passwd: password updated successfully
root@machine1:~#

Sekarang kita bisa login langsung di konsol sebagai root atau su – langsung ke root daripada harus menggunakan sudo untuk setiap perintah. Tentu saja, kita bisa menggunakan sudo su – setiap kali kita ingin login sebagai root – tapi kenapa repot?

Tolong jangan salah paham. Distribusi seperti Ubuntu dan kerabat up- dan down-stream mereka baik-baik saja dan saya telah menggunakan beberapa dari mereka selama bertahun-tahun. Saat menggunakan Ubuntu dan distro terkait, salah satu hal pertama yang saya lakukan adalah mengatur kata sandi root sehingga saya bisa login langsung sebagai root.

Penggunaan yang valid untuk sudo

sudo fasilitas memang memiliki kegunaannya. Maksud sebenarnya dari sudo adalah untuk memungkinkan pengguna root untuk mendelegasikan ke satu atau dua pengguna non-root, akses ke satu atau dua perintah istimewa khusus yang mereka butuhkan secara teratur. Alasan di balik ini adalah sysadmin yang malas; memungkinkan pengguna mengakses satu atau dua perintah yang memerlukan hak istimewa yang lebih tinggi dan yang mereka gunakan terus-menerus, berkali-kali per hari, menghemat banyak permintaan dari pengguna SysAdmin dan menghilangkan waktu tunggu yang akan dialami pengguna. Tetapi sebagian besar pengguna non-root tidak boleh memiliki akses root penuh, hanya ke beberapa perintah yang mereka butuhkan.

Saya terkadang membutuhkan pengguna non-root untuk menjalankan program yang memerlukan hak akses root. Dalam kasus seperti ini, saya menyiapkan satu atau dua pengguna non-root dan mengizinkan mereka untuk menjalankan perintah tunggal itu. sudo fasilitas juga menyimpan log ID pengguna dari setiap pengguna yang menggunakannya. Ini mungkin memungkinkan saya untuk melacak siapa yang membuat kesalahan. Hanya itu yang dilakukannya; itu bukan pelindung magis.

sudo fasilitas tidak pernah dimaksudkan untuk digunakan sebagai pintu gerbang untuk perintah yang dikeluarkan oleh sysadmin. Itu tidak dapat memeriksa validitas perintah. Itu tidak memeriksa untuk melihat apakah pengguna melakukan sesuatu yang bodoh. Itu tidak membuat sistem aman dari pengguna yang memiliki akses ke semua perintah pada sistem meskipun melalui gateway yang memaksa mereka untuk mengatakan "tolong" – Itu tidak pernah menjadi tujuan yang dimaksudkan.

“Unix tidak pernah mengatakan tolong.”
– Rob Pike

Kutipan tentang Unix ini sama benarnya tentang Linux seperti halnya tentang Unix. Kami sysadmin login sebagai root ketika kami perlu melakukan pekerjaan sebagai root dan kami keluar dari sesi root kami ketika kami selesai. Beberapa hari kami tetap masuk sebagai root sepanjang hari tetapi kami selalu bekerja sebagai root saat kami membutuhkannya. Kami tidak pernah menggunakan sudo karena memaksa kita untuk mengetik lebih dari yang diperlukan untuk menjalankan perintah yang kita perlukan untuk melakukan pekerjaan kita. Baik Unix maupun Linux tidak menanyakan apakah kami benar-benar ingin melakukan sesuatu, yaitu, ia tidak mengatakan "Harap verifikasi bahwa Anda ingin melakukan ini."

Ya, saya tidak suka cara beberapa distro menggunakan sudo memerintah. Lain kali saya akan menjelajahi beberapa kasus penggunaan yang valid untuk sudo dan cara mengonfigurasinya untuk kasus ini.

[ Ingin menguji kemampuan sysadmin Anda? Ikuti penilaian keterampilan hari ini. ]


Linux
  1. Perintah Untuk Mengaktifkan Jaringan?

  2. sudo:npm:perintah tidak ditemukan

  3. perintah tidak ditemukan saat menggunakan sudo

  1. Sudo:Perintah Tidak Ditemukan?

  2. Lembar Cheat Perintah Yum

  3. Contoh Perintah sudo di Linux

  1. visudo:perintah tidak ditemukan

  2. sudoedit:perintah tidak ditemukan

  3. sudo:perintah tidak ditemukan