Bagaimana cara menjalankan perintah sebagai pengguna yang loginnya dinonaktifkan?


21

Saya mencoba menggunakan perintah su untuk menjalankan aplikasi sebagai pengguna lain

Dalam hal ini saya mencoba menjalankan irssi

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

Saya menjalankan gksu dan mengatur parameter yang sama dan berfungsi, dan tidak meminta saya untuk kata sandi pengguna. Apa masalahnya? Dan bagaimana cara mengatasinya?

Saya harus perhatikan pengguna dibuat seperti ini

adduser --system --disabled-login [username]

jika ada bedanya .... huh.


Anda tidak lupa flag -c untuk meluncurkan irssi? (su -c irssi)
eephyne

mencobanya juga ... mencoba ribuan hal ... mengapa sangat sulit untuk dijalankan sebagai WTF itu persis seperti halaman manual menginginkannya ... tetapi tidak ada yang terjadi grrrr
user123361

mungkinkah yang irssimemiliki masalah dan bahwa perintah su bekerja?
Nanne

Apakah ´ [nama pengguna] ´ memiliki hak untuk menjalankan irssi?
Doka

Jawaban:


28

Jawaban ini seharusnya tetap membantu Anda, bahkan dengan menyunting pertanyaan itu. Secara khusus, akun yang dibuat dengan --disabled-logintidak memiliki kata sandi dan tidak ada cara lain untuk masuk , tetapi masih mungkin untuk menggunakan sudo(dijelaskan di bawah) untuk menjalankan perintah atau shell sebagai pengguna. Ini sebenarnya adalah bagaimana rootakun diatur di Ubuntu.

Ada beberapa masalah dengan perintah tersebut su - irssi.

Perintah ini mencoba memulai sebuah shell yang dimiliki oleh pengguna yang bernamairssi .

Ini akan gagal jika:

  • Tidak ada irssipengguna.
  • The irssiakun pengguna dinonaktifkan.
  • The irssiakun pengguna dinonaktifkan untuk login interaktif. Terkadang akun diizinkan untuk menggunakan layanan seperti FTP tetapi dilarang masuk secara normal dengan menyetel shell mereka ke sesuatu yang segera dihentikan /bin/false. Kemudian login segera berakhir, tanpa pesan.
  • Kata sandi yang Anda masukkan tidak benar untuk irssipengguna.

The -bendera membuatnya begitu shell mensimulasikan shell login awal - yaitu, sehingga benar-benar sangat banyak seperti penebangan sebagai irssi. Tanpa -tanda, jika superintah berhasil, Anda masih akan mendapatkan shell yang dimiliki oleh irssi, tetapi variabel lingkungan seperti HOMEtidak akan berubah.

Jika Anda ingin menjalankan program yang disebut irssi , Anda harus memohon suberbeda:

su username - -c irssi

Jika Anda keluar , itu sama dengan - itu mencoba menjalankan perintah sebagai root.-c username-c root

Atau Anda dapat memulai shell dan kemudian jalankan perintah :

  1. Mulai shell dengan .su username -
  2. Dalam shell, jalankan perintah ( irssi).
  3. Jika sudah selesai, biarkan shell berjalan exit.

Menjalankan Perintah sebagai root

Jika Anda ingin menjalankan irssisebagai root, subukan cara untuk melakukannya. Login root dinonaktifkan secara default di Ubuntu, dan jarang ada alasan untuk mengaktifkannya kembali . Jika Anda telah mengaktifkan rootlogin, maka Anda seharusnya bisa sumenjadi root. Alasan itu tidak perlu untuk mengaktifkan rootakun adalah bahwa, apakah Anda melakukannya, Anda masih dapat menjalankan perintah sebagai rootdengan sudo.

Ketika Anda menjalankan perintah sudo, Anda memasukkan kata sandi Anda , bukan kata sandi pengguna yang identitasnya ingin Anda jalankan. Hanya administrator dapat menjalankan perintah sewenang-wenang sebagai rootdengan sudo(kecuali jika Anda mengkonfigurasi ulang sudountuk memungkinkan orang lain untuk melakukannya, tentu saja). Jadi pengguna yang tidak diizinkan untuk mengelola sistem tidak diizinkan untuk menjalankan perintah seperti rootdengan kata sandi mereka sendiri.

Untuk menjalankan irssisebagai rootdengan sudo:

sudo irssi

Dan Anda akan memasukkan Anda password ketika diminta, tidak root's.

Kecuali kata sandi apa yang Anda masukkan, ini melakukan hal yang sama seperti:

su -c irssi

Kecuali sudoversi dapat berhasil karena tidak memerlukan rootakun untuk diaktifkan.

Seperti halnya dengan su, Anda dapat menggunakan sudountuk menjalankan perintah sebagai yang lain, bukan rootpengguna . Untuk menjalankan irssisebagai usernamedengan sudo:

sudo -u username irssi

Jika Anda ingin sudo berperilaku seperti su -sehubungan denganHOME --yaitu, Anda ingin menggunakan HOMEvariabel lingkungan pengguna target , Anda dapat menjalankan sudodengan -Hflag:

sudo -H irssi
sudo -H -u username irssi

Anda dapat memulai seluruh shell sudo, seperti yang Anda bisa lakukan dengan su. Kecuali untuk kata sandi yang Anda masukkan, perintah ini memiliki efek yang sama dengan su:

sudo -s

Dan perintah ini memiliki efek yang sama dengan su -:

sudo -i

( iSingkatan dari shell login awal .)

Anda juga dapat memulai shell sebagai pengguna lain:

sudo -u username -s
sudo -u username -i

Bacaan Lebih Lanjut sudo

Untuk mempelajari lebih lanjutsudo , lihat:

Mengapa gksubekerja padahal sutidak?

gksumungkin bekerja dengan berlarisudo .

gksuadalah sebuah frontend untuk keduanya su dan sudo. Di Ubuntu, itu default untuk menggunakan sudo(karena di Ubuntu, subiasanya tidak digunakan untuk menjadi root, dan hanya cara sekunder untuk menjadi yang lain, bukan rootpengguna).

Anda dapat gksumenggunakan susebagai frontend dengan menjalankan gksu --su-mode.

Anda dapat mengetahui apakah gksudalam sumode atau sudomode, dan (jika Anda mau) mengubah pengaturan ini, dengan menjalankan gksu-properties. Ini adalah pengaturan per pengguna.

Ketika gksudalam sudomode, ia berperilaku sama dengan gksudo.

Bacaan Lebih Lanjut gksu


Analisis Pasca-Solusi

Anda akhirnya menemukan bahwa Anda dapat menjalankan perintah yang diperlukan dengan:

sudo -u username irssi

(Yang merupakan teknik yang tercantum di atas.)

Pada akhirnya, Anda melaporkan dua potong informasi, yang cukup untuk menjelaskan mengapa teknik lain gagal, tetapi itu berhasil:

  1. The usernameakun dibuat dengan --disabled-loginbendera, yang membuatnya memiliki tanpa password (dan tidak ada cara lain penebangan di). Tanpa kata sandi tidak berarti Anda dapat masuk dengan kata sandi kosong . Ini berarti tidak ada kata sandi yang cukup untuk otentikasi. Dalam kombinasi dengan penghapusan cara otentikasi lainnya, ini berarti usernametidak dapat mengautentikasi sama sekali.

    Jadi semua susolusi berbasis keluar. sudodapat bekerja, karena dengan sudoAnda tidak mengautentikasi sebagai pengguna yang akan Anda tiru. Sebagai gantinya, Anda harus diberi wewenang untuk menyamar sebagai mereka, dan Anda mengautentikasi diri Anda sendiri (yaitu, masukkan kata sandi Anda sendiri, bukan milik mereka).

    Dimungkinkan untuk menetapkan kata sandi pada akun, yang menghilangkan penghalang ini untuk masuk:

    sudo passwd username

    Namun, mungkin ada alasan bagus mengapa pengguna tidak diizinkan masuk. Misalnya, jika pengguna ini diizinkan masuk, dan masuk secara grafis, apakah masalah buruk akan muncul dari lingkungan pengguna atau hak istimewa yang kurang cocok untuk menjalankan aplikasi X11. ? Jika pengguna ini bisa masuk, apakah itu memungkinkan untuk masuk dari jarak jauh sebagai pengguna itu (untuk mesin-mesin di mana Anda telah membuka layanan jaringan)?

    Jika Anda ingin menonaktifkannya kembali:

    sudo passwd -dl username

    Terkait: Menonaktifkan kembali rootakun setelah mengaktifkannya untuk sementara.

  2. The usernameaccount memiliki /bin/falsesebagai shell login-nya.

    Ketika shell like bashdijalankan sebagai shell login Anda, shell akan mengatur lingkungan Anda dan memberi Anda prompt interaktif yang dapat digunakan untuk mengontrol mesin.

    /bin/falseSebaliknya, ketika dijalankan, ia tidak melakukan apa-apa , dan melaporkan kegagalan . (Tidak /bin/truemelakukan apa-apa dan melaporkan keberhasilan.)

    The falsedan trueperintah yang berguna dalam scripting dan untuk berbagai tujuan pengujian, tetapi juga untuk menonaktifkan account sehingga ketika seseorang log in, sesi login mereka segera berakhir. Dengan begitu, kata sandi (atau cara otentikasi lainnya) dapat diaktifkan, dan orang-orang dapat masuk, hanya saja tidak untuk akses shell . Misalnya, jika ada server FTP, mereka masih dapat mengakses akun mereka melalui FTP. Jika ada server SSH, mereka tidak akan bisa mendapatkan shell melalui SSH, tetapi mereka masih bisa menggunakan sftpdan scpmentransfer file.

    Sejak username's shell login adalah nonfungsional, perintah seperti , , , dan tidak bisa bekerja.su usernamesu - usernamesudo -u username -ssudo -u username -i

    Tetapi perintah yang tidak memberikan shell, suka atau masih bisa bekerja.sudo -u username commandsu username -c 'command'

    Karena perintah dapat dijalankan, Anda dapat mengubah shell login pengguna menjadi sesuatu yang fungsional:

    sudo chsh -s /bin/bash username

    Namun, ini juga harus dilakukan dengan hati-hati, karena mungkin ada alasan bagus untuk menonaktifkan login interaktif untuk pengguna.

Di sini, usernamekeduanya telah menonaktifkan kata sandi dan shell "dinonaktifkan". Tidak adanya kata sandi yang berfungsi mencegah semua susolusi berbasis dari bekerja, sementara tidak adanya shell login interaktif yang berfungsi mencegah semua solusi pemijahan shell bekerja (kecuali secara manual menggunakan shell, seperti ).sudo -u username bash

sudo -u username command adalah apa yang tersisa.


Maaf atas banyak pengeditan saat Anda mengerjakan jawaban Anda. Wow. Terima kasih. Ketika saya melakukan cat / etc / passwd, pengguna yang saya konfigurasikan memiliki / bin / false pada akhirnya - jadi apakah ini yang menyebabkannya gagal? ada ide bagaimana cara memperbaikinya?
user123361

Untuk alasan apa pun, menggunakan sudo -u nama pengguna irssi berfungsi dengan baik. Terima kasih atas jawaban Anda yang panjang dan jelas!
user123361

@db Saya senang itu berhasil! (Btw, tidak perlu meminta maaf untuk mengedit, mengedit sangat, sangat bagus, dan pertanyaan Anda kemungkinan akan berguna bagi lebih banyak orang juga sebagai konsekuensi dari pengeditan.) Adapun pertanyaan Anda yang lain, saya sudah mengedit jawaban saya untuk termasuk bagian analisis di bagian akhir.
Eliah Kagan
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.