Mengapa saya tidak memiliki kata sandi untuk “su”? Masalah dengan "sudo"

34

Saya telah menginstal Ubuntu menggunakan GUI, memberi saya kata sandi dan segalanya. Saya tidak begitu ingat prosesnya. Namun, yang membuat saya khawatir adalah saya tidak tahu kata sandi berikut:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Aku hanya tidak tahu harus berbuat apa. Saya tidak dalam kesulitan, tetapi saya hanya ingin tahu apa yang terjadi di sini. Saya juga dapat mengunci diri dari direktori:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Saya hanya sedikit bingung. Bagaimana saya bisa mengunci diri seperti ini? Saya pikir sudoadalah perintah utama di sini. Tapi saya membuat foobsfile seterbuka mungkin melalui chmod, jadi mengapa itu mengunci saya?

Starkers
sumber
6
Anda seharusnya hampir tidak pernah melakukannya chmod -R 777 whatever, kecuali jika Anda ingin menimbulkan risiko keamanan yang sangat besar.
1
@ BroSlow Terima kasih atas yang terbaik. Di luar pertanyaan ini, tetapi bagaimana satu set hak baca tulis ke direktori dengan aman? 666?
Starkers
1
Jelas lebih baik, tetapi tergantung pada apa yang Anda coba lakukan. mis. apakah Anda benar-benar membutuhkan semua pengguna untuk memiliki akses r / w ke semuanya. Jika tidak, Anda dapat melakukan sesuatu seperti 644 (hanya baca untuk semua orang kecuali Anda). Dan secara umum, saya akan sangat berhati-hati ketika melakukan rekursif chmodbahwa itu hanya mengubah file yang Anda maksudkan.
1
@ Broslow Apakah Anda tinggi? 666 adalah 1) masih dapat ditulis oleh dunia dan karenanya memiliki tingkat risiko keamanan yang sama, dan 2) menghilangkan bit yang dapat dieksekusi, yang berarti dia tidak akan dapat chdir ke direktori itu lagi.
Shadur
@Starkers Masalah keamanan nyata yang saya lihat di sini adalah karena alasan gila /var/lib/sudodiatur ke dunia yang dapat ditulisi. Ini seharusnya tidak terjadi dan Anda harus mencoba mencari tahu mengapa itu terjadi.
Shadur

Jawaban:

49

Secara default, rootakun superuser ( ) dinonaktifkan dan tidak memiliki kata sandi. Anda dapat membuatnya dengan menjalankan:

$ sudo passwd root

Anda kemudian dapat masuk sebagai root dengan menjalankan sumenggunakan kata sandi ini.

Adapun chmod, perintah yang benar adalah:

$ chmod 777 -R foobs

Anda juga bisa menggunakan:

$ sudo -i

untuk login sebagai root menggunakan kata sandi Anda (tanpa membuat kata sandi root seperti dijelaskan di atas).

Oli
sumber
4
@Oli Mungkin Anda bisa mengedit pertanyaan Anda untuk ditambahkan sudo su. Ini juga memberikan hak su permanen di terminal.
bangun
13
jangan gunakan sudo su, karena akan merusak lingkungan dan hal-hal akan pecah. alih-alih gunakan sudo -i.
strugee
20
Jangan atur kata sandi root. Jangan tidak menetapkan password root.
wchargin
4
chmod 777 hampir selalu buruk (bit sticky dikecualikan; seperti yang digunakan dengan / tmp). Jawaban ini adalah risiko keamanan. Ditambah pengaturan kata sandi root bukan cara Ubuntu harus digunakan; lagi mengundang risiko keamanan. Harap ikuti jawaban neon_overload.
Rinzwind
4
@WChargin mengapa Anda menyarankan tidak memiliki akun root / kata sandi? Saya benar-benar ingin tahu sebagai pengguna archlinux.
Rob
67

1. Mengapa Anda tidak memiliki kata sandi root

Meskipun Anda dapat membuat kata sandi untuk akun pengguna super yang memungkinkan Anda untuk masuk sebagai root su, perlu disebutkan bahwa ini bukan cara biasa dalam melakukan sesuatu dengan Ubuntu (atau semakin, distribusi lain juga). Ubuntu memilih untuk tidak memberikan login root dan kata sandi secara default karena suatu alasan. Sebagai gantinya, instalasi Ubuntu default akan digunakan sudountuk memberikan hak superuser. Secara default Ubuntu menginstal orang yang menginstal OS diberi izin "sudo" secara default.

Siapa saja yang memiliki izin "sudo" penuh dapat melakukan sesuatu "sebagai superuser" dengan menunggu sudoperintah mereka. Misalnya, untuk menjalankan apt-get dist-upgradesebagai pengguna super, Anda dapat menggunakan:

sudo apt-get dist-upgrade

Anda akan melihat penggunaan sudo ini cukup banyak di mana saja Anda membaca tutorial tentang Ubuntu di web. Ini merupakan alternatif untuk melakukan ini.

su
apt-get dist-upgrade
exit

Dengan sudo, Anda memilih di muka mana pengguna memiliki akses sudo. Tidak perlu bagi mereka untuk mengingat kata sandi root, karena mereka menggunakan kata sandi mereka sendiri. Jika Anda memiliki banyak pengguna, Anda dapat mencabut akses pengguna super seseorang hanya dengan menghapus izin sudo mereka, tanpa perlu mengubah kata sandi root dan memberi tahu semua orang kata sandi baru. Anda bahkan dapat memilih perintah mana yang diizinkan dilakukan pengguna dengan menggunakan sudo dan perintah mana yang dilarang untuk pengguna itu. Dan terakhir, jika ada pelanggaran keamanan, dalam beberapa kasus dapat meninggalkan jejak audit yang lebih baik yang menunjukkan akun pengguna mana yang dikompromikan.

Sudo membuatnya lebih mudah untuk melakukan perintah tunggal dengan hak superuser. Dengan su, Anda secara permanen jatuh ke shell pengguna super yang harus keluar menggunakan exitataulogout . Hal ini dapat menyebabkan orang yang tinggal di shell pengguna super lebih lama dari yang diperlukan hanya karena lebih nyaman daripada keluar dan masuk lagi nanti.

Dengan sudo, Anda masih memiliki opsi untuk membuka shell superuser permanen (interaktif) dengan perintah:

sudo su

... dan ini masih dapat dilakukan tanpa kata sandi root, karena sudomemberikan hak superuser pada superintah.

Dan demikian pula, alih-alih su -untuk shell login Anda dapat menggunakan sudo su -atau pintasannya sudo -i.

Namun ketika melakukannya Anda hanya perlu menyadari bahwa Anda bertindak sebagai superuser untuk setiap perintah. Ini adalah prinsip keamanan yang baik untuk tidak bertahan sebagai pengguna super lebih lama dari yang diperlukan, hanya untuk mengurangi kemungkinan secara tidak sengaja menyebabkan kerusakan pada sistem (tanpanya, Anda hanya dapat merusak file yang dimiliki pengguna Anda).

Hanya untuk memperjelas, Anda dapat , jika Anda memilih, memberikan pengguna root kata sandi yang memungkinkan login sebagai root seperti yang dijelaskan dalam jawaban @ Oli, jika Anda secara khusus ingin melakukan hal-hal dengan cara ini. Saya hanya ingin memberi tahu Anda tentang konvensi Ubuntu lebih suka sudodan memberi tahu Anda bahwa ada alternatif.


2. Masalah dengan perintah chmod 777 -R Anda

Pertanyaan Anda juga memiliki bagian kedua: masalah Anda dengan perintah sudo chmod 777 -R foobs.

Pertama, peringatan berikut menunjukkan masalah keamanan yang berpotensi serius pada mesin Anda:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

Ini berarti bahwa pada tahap tertentu, Anda telah ditetapkan /var/lib/sudountuk dapat ditulis oleh dunia. Saya membayangkan Anda telah melakukan ini pada tahap tertentu menggunakan perintah seperti sudo chmod 777 -R /. Sayangnya, dengan melakukan ini, Anda mungkin telah merusak hampir semua izin file di seluruh sistem Anda. Tidak mungkin bahwa ini akan menjadi satu-satunya file sistem penting yang izinnya telah diubah agar dapat ditulis oleh dunia. Pada dasarnya Anda memiliki sistem yang mudah diretas sekarang, dan satu-satunya cara mudah untuk mendapatkannya kembali adalah menginstal ulang.

Kedua, perintah yang Anda gunakan:

sudo chmod 777 -R foobs

Saat memanipulasi file dalam direktori home Anda, dalam hal ini dalam ~/Desktop, Anda seharusnya tidak perlu menggunakannyasudo . Semua file yang Anda buat di direktori home Anda harus dapat dimodifikasi oleh Anda (dan jika tidak, sesuatu yang lucu sedang terjadi).

Juga, Anda harus sepenuhnya menyadari konsekuensi dari mengubah izin file secara massal, seperti melakukannya secara rekursif atau pada sejumlah besar file. Dalam hal ini, Anda mengubah dengan hati-hati mengatur izin file agar dapat ditulis oleh dunia. Setiap pengguna lain, atau perangkat lunak server kereta pada mesin, mungkin memiliki akses mudah untuk menimpa semua file dan direktori ini.

Ini hampir pasti bahwa chmod 777 -R [dir]itu tidak solusi yang tepat untuk masalah apa pun yang Anda coba selesaikan (dan seperti yang saya sebutkan di atas, ada bukti bahwa Anda telah melakukannya untuk sistem file di / var / lib juga, dan saya berasumsi banyak lainnya tempat).

Beberapa aturan dasar praktis:

  • Jika Anda hanya mengacaukan file Anda sendiri di direktori home Anda, desktop dll, Anda seharusnya tidak perlu menggunakan sudoatau hak pengguna super. Jika Anda melakukannya, itu adalah tanda peringatan bahwa Anda melakukan sesuatu yang salah.

  • Anda tidak boleh secara manual memodifikasi file sistem yang dimiliki oleh paket. Pengecualian: kecuali jika Anda melakukannya secara khusus dengan cara didokumentasikan oleh paket-paket itu, seperti dengan memodifikasi konfigurasi mereka di /etc. Ini berlaku juga untuk mengubah izin file. Jika tutorial atau upaya untuk memperbaiki masalah memerlukan sudoatau hak pengguna super, dan itu bukan hanya perubahan ke konfigurasi di / etc /, itu adalah tanda peringatan bahwa Anda melakukan sesuatu yang salah.

thomasrutter
sumber
Penjelasan luar biasa .. Jempol ke atas .. :)
Saurav Kumar
7
Saya pikir "sudo -i" adalah cara "resmi" untuk mendapatkan shell root, daripada "sudo su"
Max
3
Ya, Anda harus menggunakan sudo -ilebih sudo su.
Seth
sudo -i(atau sudo su -) tidak secara universal lebih baik tetapi hanya berbeda - ini meluncurkan shell login yang mensimulasikan lingkungan login pengguna root, yang mengeksekusi, misalnya, .profilefile atau .loginfile pengguna root. Ini lebih baik jika Anda ingin lingkungan di shell lebih seperti shell login root daripada shell interaktif yang terjadi pada hak pengguna super. Mungkin lebih baik menggunakan shell berbasis login jika menggunakan shell, tapi itu bisa diperdebatkan: intinya adalah bahwa Ubuntu terutama dirancang untuk digunakan sudountuk menjalankan perintah dengan hak superuser.
thomasrutter