Mengapa pengguna dengan hak akses root tidak lagi ~?

20

Hanya ingin tahu, saya ingin tahu mengapa, ketika saya login sebagai root, saya tidak di / home / pengguna lagi. Apa alasannya dan apa yang dilakukan direktori root ?

Saya bukan pengguna tingkat lanjut. Harap jawab dengan kata-kata sederhana atau berikan tautan yang memberikan penjelasan sederhana dan jelas. Saya menggunakan Ubuntu 16.04 dan saya login sebagai root oleh sudo -i. Seperti yang dijelaskan di sini , sudo -itelah / root sebagai rumah. Saya ingin tahu alasannya; apakah ada untungnya berada di sana? Dan tidak di ~ seperti pengguna sudo -s.

Codito ergo sum
sumber
11
root juga pengguna, jadi dia memiliki homedirektori pribadinya , tetapi yang ini dinamairoot
damadam
3
Anda dapat menggunakan sudo -suntuk berada di direktori pengguna yang sama.
Pilot6
3
@ Pilot6 maaf saya menambahkan bahwa pada saat yang sama ketika saya melihat komentar Anda: D Harap Anda tidak keberatan :)
Rinzwind
2
@Unbesiegbarkeit man sudoakan menjawab pertanyaan itu. Sederhananya user -iadalah menggunakan pengaturan pengguna root, tetapi sudo -spengaturan pengguna saat ini.
Pilot6

Jawaban:

28

Anda tidak masuk sebagai root dengan menjalankan a sudo perintah. Anda memulai sebuah shell dengan hak akses root.

Jika Anda ingin tetap berada di direktori home user saat ini, Anda dapat menggunakannya sudo -ssebagai gantinyasudo -i perintah.

cd ~akan membawa Anda ke direktori yang sama seolah-olah Anda tidak berada dalam shell dengan hak akses root. Secara harfiah/home/$USER .

Saat Anda menggunakan sudo -i, sistem bertindak seolah-olah Anda masuk sebagai rootpengguna. Karena ini

cd ~ 

membawa Anda ke direktori home pengguna root /root.

/rootdirektori adalah direktori home untuk rootpengguna.

Perbedaan utama adalah bahwa file pengaturan shell seperti .bashrcdigunakan dari /rootdalam kasus sudo -i, dan dari pengguna normal dalam kasus sudo -s.

Pilot6
sumber
3
Apa keuntungan memiliki / root sebagai rumah?
Codito ergo sum
2
File seperti .bashrcdigunakan dari sana dalam shell tertentu. Dalam kebanyakan kasus tidak ada banyak perbedaan.
Pilot6
11
@Unbesiegbarkeit / home mungkin tidak dapat di-mount dalam keadaan tertentu, misalnya mode pengguna tunggal, tidak ada akses jaringan, dll., Dan root masih harus dapat masuk dalam keadaan tersebut.
selesai24
2
@ DougO'Neal Jika /hometidak tersedia, masalahnya tidak ada. Maka Anda benar-benar masuk sebagai root.
Pilot6
4
@ Pilot6: Ada perbedaan, atau seharusnya. Sebagai contoh, pada mesin saya, saya mengatur file. * Shrc root untuk membuatnya secara visual jelas bahwa saya sedang menjalankan sebagai root - misalnya prompt dalam format yang berbeda dan berwarna merah. Juga alias diatur untuk tidak melakukan hal-hal tertentu yang mungkin berbahaya jika dilakukan sebagai root, & c.
jamesqf
29

Alasan mengapa rumah rootpengguna adalah /rootdan bukan /home/rootkarena biasanya/home adalah titik mount ke partisi / volume / disk yang terpisah ... (karena berbagai alasan, seperti ruang disk, atau jarak jauh, ...)

Jika karena suatu alasan pemasangan /homeakan gagal, Anda masih dapat terhubung rootdan berada di /rootdirektori home Anda untuk menyelidiki dan memperbaiki hal-hal

Selain itu, untuk pemeliharaan, pengaturan awal, pengubahan ukuran, ... Anda akan terhubung sebagaimana rootdan harus dapat meng-unmount / mengirim kembali/home

alexf
sumber
7
+1, Ini harus menjadi jawaban yang diterima. Anda dapat mengubah home root menjadi di mana saja, tetapi kami membiarkan / root untuk berada di / dan bukan di / home untuk alasan pemulihan.
ntg
16

Apa alasannya dan apa yang dilakukan direktori root?

root memiliki / root sebagai rumahnya dan ketika Anda beralih ke root itu akan membuat Anda berakhir di rumahnya. Itulah sifat dari sudo -i. sudo -smelakukan hal yang sama tetapi tidak mengganti direktori. Manual untuk sudo :

-s [command]

Opsi -s (shell) menjalankan shell yang ditentukan oleh variabel lingkungan SHELL jika diatur atau shell seperti yang ditentukan dalam basis data kata sandi. Jika suatu perintah ditentukan, perintah tersebut diteruskan ke shell untuk dieksekusi melalui opsi -c shell. Jika tidak ada perintah yang ditentukan, shell interaktif dijalankan.

-i [command]

Opsi -i (mensimulasikan login awal) menjalankan shell yang ditentukan oleh entri basis data kata sandi pengguna target sebagai shell login . Ini berarti bahwa file sumber daya khusus masuk seperti .profile atau .login akan dibaca oleh shell. Jika suatu perintah ditentukan, perintah itu diteruskan ke shell untuk dieksekusi melalui opsi -c shell. Jika tidak ada perintah yang ditentukan, shell interaktif dijalankan. sudo mencoba mengubah ke direktori home pengguna tersebut sebelum menjalankan shell. Kebijakan keamanan harus menginisialisasi lingkungan ke set minimal variabel, mirip dengan apa yang ada ketika pengguna login. Bagian Lingkungan Perintah pada sudoers (5) manual mendokumentasikan bagaimana opsi -i mempengaruhi lingkungan di mana perintah berada berjalan ketika kebijakan sudoers digunakan.

Pengguna root harus menjadi bagian dari sistem. Ketika Anda meletakkan / home pada partisi yang berbeda dan root adalah bagian dari / home Anda akan mengalami masalah serius jika partisi tersebut tidak me-mount. Untuk alasan yang sama kami juga punya

/bin
/sbin 

dan

/usr/bin
/usr/sbin

Ketika Anda meletakkan / usr di partisi dan / usr tidak me-mount Anda masih memiliki sistem yang berfungsi.

Rinzwind
sumber
2
Bagaimana ini menjawab pertanyaan? Apakah ini komentar?
Pilot6
2
Sudo-i bukan bagian dari pertanyaan ketika saya menjawab ;-)
Rinzwind
2
Apakah kita memiliki T&J tentang sudo -ivs sudo -s?
Pilot6
2
Hmm kita mungkin. Saya akan mencari. sunting Saya tidak menemukan satu, tetapi saya ingat pernah melihatnya tetapi itu ada di forum ubuntu Belanda kami: D
Rinzwind
2
Sepertinya saya melihat satu di sini, tetapi tidak dapat menemukan keduanya.
Pilot6
15

Sistem file Linux disusun dengan cara tertentu. Biner penting ada /bin/, file boot loader ada /boot/, sebagian besar file perangkat ada /dev/, mount point untuk media yang bisa dilepas ada /media/, dll ...

Lihat https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard .

Beberapa detail kecil mungkin berbeda dari distro ke distro (misalnya /usr/bin/vs. /usr/local/bin/), tetapi secara umum hampir semua distro Linux mengikuti struktur direktori yang sama.

Untuk menjawab pertanyaan Anda:

Direktori rumah pengguna berada di /home/. Pada prinsipnya, Linux adalah sistem operasi multi-pengguna. Anda mungkin hanya memiliki satu akun pengguna di laptop Anda dengan direktori home-nya /home/<username>/, tetapi jika Anda melihat /home/pada server Linux bersama, Anda akan melihat banyak direktori rumah: satu untuk setiap akun pengguna. Idenya adalah bahwa setiap pengguna sistem memiliki izin menulis hanya di direktori home mereka sendiri. Jika nama pengguna bobAnda, Anda dapat membaca dan menulis dan menghapus file /home/bob/tetapi Anda tidak dapat menyentuh apa pun di /home/alice/atau di /var/log/.

rootberbeda. rootadalah pengguna administratif dan memiliki hak istimewa menulis di mana saja pada sistem (dan dapat bertindak sebagai pengguna sistem apa pun). Jadi masuk akal bahwa rootmemiliki direktori home khusus /root/karena rootbukan pengguna biasa. Selain itu, /root/hanya direktori biasa tanpa sihir khusus, meskipun sangat mungkin (bahkan mungkin) bahwa utilitas sistem bergantung pada /root/rumah pengguna root.

Ketika Anda menjalankan sudo -idi terminal, Anda beralih dari menjadi misalnya user biasa bobuntuk menjadi root. Perhatikan bahwa sakelar ini hanya memengaruhi jendela terminal tempat Anda mengetik sudo -i. Untuk manajer file Anda, Anda masih bobdan jika Anda membuka jendela terminal lain Anda masih bobdi sana. Dalam konteks ini simbol ~adalah singkatan untuk direktori home pengguna saat ini. Untuk bob ~cara /home/bob/tetapi untuk root ~cara /root/.

Saya harap ini menjelaskan hal-hal untuk Anda.

maria s
sumber
3
Ini jawaban yang sempurna!
Pilot6
5
Mungkin perlu dicatat bahwa direktori home Root awalnya /. Lokasi standar dapat diubah karena alasan keamanan (setiap orang harus dapat membuat daftar file /, sehingga siapa pun dapat melihat dotfile apa yang dimiliki oleh pengguna root.
Austin Hemmelgarn
14

Saya melihat semua orang menjawab apa yang terjadi ketika Anda masuk sebagai root (Anda mendapatkan ~ direktori yang tidak ada di / home) tetapi tidak ada yang mengatakan mengapa. Inilah alasannya:

Jika seluruh struktur / rumah menjadi tidak dapat digunakan dan Anda harus memperbaikinya, atau jika Anda perlu merealokasi / rumah karena kehabisan ruang, Anda harus melakukannya entah bagaimana. Anda tidak dapat masuk sebagai pengguna mana pun yang memiliki ~ in / home, karena Anda akan macet segera setelah Anda mencoba melakukan apa pun. Jadi pengguna root memiliki hir ~ di tempat lain.

Jennifer
sumber
3
Cobalah, dan tergantung pada pengaturan distro dan keamanan sebagai pengguna normal Anda tidak akan login, atau berakhir dengan / sebagai cwd dan $ HOME tidak dapat diakses. Intinya adalah bahwa root kemungkinan besar ingin memiliki akses ke direktori home itu ketika orang lain tidak, misalnya karena file kebutuhan khusus di sana. Mirip dengan kebanyakan fss, Anda telah memesan ruang untuk root, dan akun sistem memiliki direktori home di luar / home
PlasmaHH
2
Jawaban dari alexf dan arp, diposting kemudian, pada dasarnya mengatakan hal yang sama. Apakah tidak ada yang membaca posting yang ada sebelum menambahkan jawaban mereka sendiri?
Jennifer
@Dan - Saya telah memutar kembali perubahan Anda. Intinya:
Jennifer
(1) Saya kira ini adalah peningkatan untuk menempatkan / rumah dan ~ dalam kotak centang, tetapi tidak semua yang penting untuk melakukannya, karena semua orang tahu apa yang saya maksud. Anda tahu apa yang saya maksud. (2) "kamu akan crash begitu kamu mencoba" tidak konsisten dalam tegang. "Anda akan" adalah "Anda akan" dan "akan" sudah lampau, jadi itu harus pergi dengan "mencoba" yang lampau daripada "mencoba" yang sekarang tegang. (3) "hir" adalah kata ganti baru yang ditemukan oleh Kate Bornstein; itu mencakup "dia" dan "dia" dan berguna ketika Anda tidak tahu jenis kelaminnya. ("Ze" mencakup "dia" dan "dia".)
Jennifer
@ Jennifer Jangan khawatir. Anda belajar sesuatu yang baru setiap hari. Saya pikir hiritu salah ketik. Terima kasih atas semua informasinya! Saya merekomendasikan tetap mempertahankan pemformatan kode, tapi itu terserah Anda.
Dan
8

Anda bilang Anda bukan pengguna tingkat lanjut, jadi saya akan mencoba menulis jawaban langkah demi langkah.

Ketika Anda menggunakan Linux, Anda harus mengingat beberapa hal penting:

  • Linux adalah sistem multi-pengguna. Itu dipahami seperti itu dari awal, mengikuti filosofi Unix (perhatikan pendekatan berbeda yang diambil oleh Windows, yang dipahami sebagai sistem pengguna tunggal)

  • Sebagai sistem multi-pengguna, Linux memiliki kemampuan untuk memisahkan file-file milik masing-masing pengguna dalam sistem. Cara Linux melakukannya adalah dengan memberikan subfolder di dalam /home/direktori kepada setiap pengguna . Setiap file pengguna dimiliki olehnya, dan hanya dia yang dapat membukanya, memodifikasinya, atau mengizinkan pengguna lain untuk menggunakannya. Sebaliknya, setiap file dalam sistem file milik pengguna, dan pengguna tersebut memiliki kekuasaan atas siapa yang dapat melihat atau menggunakan file itu. Seperti disebutkan dalam jawaban lain, pada awalnya pengguna dapat menempatkan file mereka di mana saja dalam sistem, tetapi pada beberapa titik menjadi jelas bahwa hal-hal harus diatur dengan lebih baik, dan /home/("rumah slash") menjadi tempat di mana file pengguna seharusnya.

  • Namun, ada file-file yang dibutuhkan oleh sistem itu sendiri dan / atau setiap pengguna tunggal dalam sistem: binari, file perangkat, file sistem, dan sebagainya (ingat: di Linux, dan dalam sistem mirip-unix lainnya, semuanya adalah file) . Ini secara global diperlukan file disimpan di berbagai tempat di sepanjang filesystem, yang diselenggarakan di berbagai folder dalam root filesystem : /. Juga, file-file yang dibutuhkan secara global ini bukan milik pengguna sistem tertentu, tetapi milik sistem itu sendiri ... tetapi itu bisa membingungkan: siapa yang memiliki binari? Siapa yang memberi izin pada file yang dibutuhkan secara global ini?

  • Karena setiap file dalam sistem "membutuhkan pemilik", harus ada "pengguna khusus" yang dapat mengelola file yang dibutuhkan secara global. Selain itu, "pengguna khusus" ini dapat melakukan hal-hal yang tidak dapat dilakukan oleh pengguna lain dalam sistem: ia dapat membuat pengguna lain untuk sistem. Pengguna ini disebut "pengguna super" (untuk kita manusia) atau "root" (untuk sistem).

  • Sekarang, pengguna super ini adalah pengguna lain dari sistem, tetapi memiliki kekuatan (dan tanggung jawab) jauh di atas yang dimiliki pengguna lain: pemeliharaan, misalnya. Jadi wajar untuk berpikir bahwa "root" membutuhkan tempat untuk meletakkan barang-barangnya, tetapi itu tidak harus bingung dengan barang-barang milik pengguna lain. Jadi, alih-alih memiliki subfolder di bawah ini /home/, "root" memiliki ruang khusus di sistem file: /root/(disebut "slash-root"). Ingat: "root" adalah pengguna yang sangat istimewa, jadi perlu tempat khusus dan istimewa untuk meletakkan barang-barangnya.

  • Sekarang, Ubuntu tidak memiliki akun root yang diaktifkan secara default, sehingga pengguna "normal" harus memiliki otoritas atas sistem secara keseluruhan. Di situlah sudo("beralih pengguna dan lakukan") perintah masuk: itu memungkinkan pengguna normal (sebelumnya termasuk dalam daftar "sudoers") untuk melakukan perintah seolah-olah dia adalah pengguna lain, misalnya "root".

  • Akhirnya, -iopsi itu berarti "mensimulasikan login awal". Itu berarti sudoakan membaca data "profil pengguna target" sebelum menjalankan perintah yang diberikan. Jika Anda tidak memberikan perintah, maka sudoakan memulai instance shell dengan profil (root) pengguna target ... dan itu dimulai dengan pindah ke folder "home" dari "target user". Jadi sudo -iakan memindahkan Anda ke folder home root ( /root/).

Saya harap ini membantu Anda memahami apa yang terjadi sudo -i.


EDIT

Saya pikir saya meninggalkan sesuatu yang tidak diklarifikasi, jadi saya akan menambahkannya di sini:

  • Saya katakan di atas: "di Linux, semuanya adalah file". Dan saya sungguh-sungguh! Dokumen dan gambar Anda adalah file, tetapi juga terminal (yang dapat Anda akses dengan menekan [CTRL] + [ALT] + [Fn]), dan drive fisik, dan keyboard Anda, misalnya. Sistem seperti unix bekerja dengan membaca atau menulis data dari / ke file, dan mengarahkan aliran data ke / dari file yang sesuai dalam sistem, yang mewakili file yang sedang Anda kerjakan, dan input kunci yang Anda ketikkan, dan output yang Anda lihat di layar. Beberapa file ini dapat digunakan secara langsung oleh pengguna, tetapi beberapa yang lain tidak bisa; misalnya, Anda tidak dapat membaca atau menulis langsung ke hard drive, tetapi Anda harus membiarkan Linux menautkan folder yang normal dan dapat dijelajahi, ke file perangkat (di bawah /dev/) yang mewakili hard drive Anda.

  • Sistem file Linux dapat menjangkau beberapa drive fisik . Contoh sederhana adalah ketika Anda mencolokkan pen drive USB: Linux dapat memasang drive itu (pemasangan adalah proses dimana sistem menghubungkan folder standar, di mana Anda dapat melihat file di shell atau navigator file, ke file perangkat di /dev/) dan Anda dapat bekerja dengannya, dan setelah selesai, Anda meminta Linux untuk menurunkan drive dan kemudian menghapusnya dari port USB. Yang penting di sini adalah siklus "mount - unmount" ini memengaruhi * sistem file yang sama "yang Anda gunakan sehari-hari: Anda tidak membuat sistem file baru setiap kali Anda menambah atau menghapus drive fisik, tetapi Anda menambahkan drive fisik itu ke sistem file ( lagi, bandingkan filosofi ini dengan pendekatan Wndows).

  • Karena sistem file dapat menjangkau beberapa drive fisik, menjadi jelas bahwa file sistem yang berbeda dapat ditulis ke dalam drive fisik yang berbeda. Satu drive dapat menyimpan binari sistem ( /bin/) dan yang lain dapat menyimpan file pengguna ( /home/dan turunannya). Dalam pengaturan multi-drive, sudah biasa /home/menulis dalam drive fisik yang berbeda daripada /root/, jadi, jika sistem rusak dan pengguna tidak dapat masuk karena drive tempat /home/berhenti bekerja, root dapat. (Ini sederhana ... banyak hal perlu disalin ke setiap drive fisik untuk memungkinkan root untuk login jika tidak ada pengguna lain yang bisa, tetapi ini dapat memberi Anda ide umum).

  • Dan ~karakter tilde ( ) itu menunjukkan direktori home dari pengguna saat ini . Jika Anda masuk sebagai "bob", maka Anda cd ~akan dibawa ke sana /home/bob/, tetapi jika Anda masuk sebagai "root", maka Anda cd ~akan dibawa ke/root/

tl; dr Jadi sekarang saya pikir semuanya dikatakan:

  • "root" adalah pengguna khusus, dengan kekuatan dan tanggung jawab jauh di atas pengguna lain

  • "/ root /" adalah tempat "root" dapat menyimpan barang-barangnya, tanpa risiko dikacaukan dengan barang-barang lain milik pengguna normal. Folder ini dapat ditulis ke drive fisik yang berbeda dari /home/.

  • sudo -imemulai shell yang mensimulasikan login root, dan itu menyiratkan pindah ke folder home root. Seperti halnya pengguna lain, cd ~akan membawa Anda ke direktori home Anda, tetapi, jika Anda root, itu akan menjadi/root/

  • Jika sistem diinstal di drive fisik yang berbeda, root dapat login dan mencoba untuk memperbaiki hal-hal bahkan jika drive lain dalam sistem gagal.

Barranka
sumber
1
Jawaban sempurna!
Arch
7

Alasan utama direktori home root diperlakukan berbeda:

Ketika ada masalah, Anda harus dapat melakukan tugas-tugas pemulihan sistem segera setelah Anda berhasil me-mount sistem file /.

Tergantung pada pengaturan Anda, direktori home pengguna mungkin berada pada sistem file yang berbeda atau bahkan mungkin dipasang di jaringan.

Untuk masuk sebagai root (mis. Masukkan nama root dan kata sandi root pada prompt login) dari konsol Anda hanya perlu satu sistem file terpasang.

(Ini juga mengapa utilitas inti berada di / bin dan / sbin bukan / usr / bin atau / usr / sbin - semua yang ada di / usr dapat dibuang.)

arp
sumber