Linux - gunakan "su -" tetapi simpan direktori saat ini


14

Ketika saya lakukan su -untuk mendapatkan root, direktori saya saat ini diatur ke rumah root. Apakah ada pula untuk menyimpan direktori saat ini saya berada, seperti sudo -s. Atau apakah jawabannya menggunakan sudo?


5
Harap dicatat bahwa saya tidak ingin terdengar kasar, tetapi mengapa masalah ini tidak diselesaikan melalui "man su"?
Myrrdyn

1
@Rory tolong baca komentar
Myrrdyn

Saya suka menggunakan sudo su -c "zsh", dalam kasus saya, membuat saya tetap di dir saat ini dan memuat zsh sebagai shell dengan pengguna root. ctrl+dsetelah dan Anda kembali ke pengguna saat ini. Untuk direktori, bekerja langsung pada centos untuk saya, tetapi mungkin menambahkan `&& cd $ (pwd)` perintah yang lewat di dalam bisa melakukan trik.
GabLeRoux

@Myrrdyn Documentations sangat bagus ketika Anda tahu apa yang Anda cari. Ketika Anda tidak, meminta beberapa saran ahli lebih cepat, dan lebih didaktik.
Romain Vincent

Jawaban:


18

Selalu lebih baik menggunakan sudo, jika mungkin, karena Anda tidak perlu tahu (atau memberi seseorang) kata sandi root. Atur kata sandi root untuk sesuatu yang panjang dan mengerikan dan kemudian menguncinya di brankas.

Jika Anda ingin menolak akses seseorang nanti, Anda cukup menghapus aksesnya ke sudo, daripada harus mengajari orang lain kata sandi root baru.

Namun - Anda tidak perlu menggunakan parameter '-' jika tidak mau. Anda akan mendapatkan shell sebagai root, itu tidak akan menjadi shell login (jadi itu tidak akan menjalankan .profile root.)


1
Dalam kasus saya, saya perlu alias untuk melakukan sesuatu seperti asuser git reset --hard. Tetapi su - <user> -m -c "git reset --hard"dan sudo -u <user> git reset --hardakan menyelamatkan lingkungan saya dan git akan mencoba membaca konfigurasi git pengguna saat ini. Jadi saya hanya ingin menyatakan bahwa kadang-kadang solusi user205705 menggunakan su - <user> -c "cd pwd; bash" lebih baik.
ReFruity

16

Saya setuju bahwa sudo hampir selalu merupakan jawaban yang lebih baik tetapi untuk menjawab bagian lain dari pertanyaan ...

Tanda '-' di 'su -' menunjukkan bahwa Anda ingin meniru login pengguna super, daripada hanya menjalankan hak istimewa pengguna super.

Jika Anda menggunakan 'su' daripada 'su -', Anda akan tetap di direktori yang sama; namun Anda juga akan berjalan di lingkungan yang sama sehingga mungkin perlu memodifikasi jalur Anda untuk mengakses beberapa perintah admin.


9

Jika Anda menggunakan sutanpa -, itu akan membuat Anda tetap di direktori Anda saat ini. -, -latau --login beri tahu su untuk:

Berikan lingkungan yang mirip dengan apa yang diharapkan pengguna seandainya pengguna masuk secara langsung.

Atau cukup gunakan sudo, punya banyak keunggulan lain. Atau kunci ssh.


6

Anda harus menggunakan sudo.

su -m
-m (-p): jangan setel ulang variabel lingkungan (umumnya tidak disarankan)

Itu akan membuat Anda tetap di folder saat Anda mengubah ke root.

Manfaat menggunakan sudo


1
Saya tidak dapat melihat bagaimana ini berbeda dari hanya "su" pada itu sendiri, selain mungkin tidak mengatur ulang lingkungan PATH, yang merupakan masalah keamanan yang mungkin terjadi.
David Pashley

@ Davidvidpashley misalnya, mengeksekusi .bashrcdari pengguna luar, bukan yang root.
phil294

4

Jika Anda benar-benar ingin menggunakan su, ada cara untuk tetap berada di direktori yang sama.

su - <user> -c "cd `pwd`; bash"

Apa yang terjadi di sini:

  • su - <user> = masuk sebagai
  • -c yang berarti "jalankan perintah di shell baru
  • -c "cd `pwd`" perintah yang kita berikan adalah untuk beralih ke direcotory saat ini ( pwd) - tetapi karena kita menggunakan backticks, pwdperintah dievaluasi sebelum kita menjalankan superintah sehingga kita benar-benar beralih ke direktori kita berada di SEKARANG sebagai pengguna lama. Satu-satunya masalah di sini adalah bahwa shell baru keluar setelah menjalankan perintah, jadi kami menambahkan:
  • -c "cd `pwd`; bash" yang berarti "jalankan bash(shell baru) setelah menjalankan cdperintah dan bash shell tidak keluar sampai kita keluar.

1
Ini sebenarnya satu-satunya jawaban untuk pertanyaan itu. Kerja bagus!
Cacahuete Frito

Sebenarnya, su - [user] -c "cd $(pwd); bash"mungkin sedikit lebih baik (ubah backticks ke $()).
Cacahuete Frito

3

Gunakan sudo :). Serius, kamu tidak perlu su. 'sudo' lebih baik karena Anda hanya menggunakannya untuk perintah istimewa dan dapat membantu menghindari kesalahan. Anda juga mendapatkan akuntabilitas.


2

Jika Anda menggunakan "su" maka shell interaktif. Ini sama dengan "sudo -s". "su -" membuat shell login, yang akan menimpa lingkungan. "sudo -i" adalah setara dengan sudo. Jika Anda mencoba untuk mendapatkan shell interaktif, Anda harus selalu menggunakan formulir sudo -i (atau su -), atau mungkin berakhir dengan izin file aneh di direktori home pengguna.


0

Anda harus memodifikasi sumber su untuk menyelesaikan pekerjaan ini. ada panggilan chdir dalam prosedur inisialisasi variabel envoironment. berkomentar negara-negara termasuk panggilan itu. dan sekarang, Anda dapat melakukan "su -" tetapi menyimpan direktori saat ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.