Bagaimana mencegah pengguna masuk, tetapi mengizinkan "pengguna su" di Linux?

93

Bagaimana Anda mengizinkan pengguna untuk masuk menggunakan " su - pengguna " tetapi mencegah pengguna dari masuk menggunakan SSH?

Saya mencoba mengatur shell /bin/falsetetapi ketika saya mencoba sutidak berhasil.

Apakah ada beberapa cara untuk hanya mengizinkan login su?

Apakah SSH adalah AllowUsercara untuk pergi? (Bagaimana saya melakukan ini jika itu cara untuk pergi)

NoozNooz42
sumber

Jawaban:

113

Anda dapat menggunakan AllowUsers / AllowGroups jika Anda hanya memiliki beberapa pengguna / grup yang diizinkan untuk masuk melalui ssh atau DenyUsers / DenyGroups jika Anda hanya memiliki beberapa pengguna / grup yang tidak diizinkan masuk. Perhatikan bahwa ini hanya membatasi login melalui ssh, cara masuk lainnya (konsol, ftp, ...) masih dimungkinkan. Anda perlu menambahkan opsi ini ke file / etc / ssh / sshd_config Anda untuk sebagian besar instalasi ssh.

Jika Anda telah mengatur shell login ke / bin / false Anda dapat menggunakan su -s /bin/bash user(ganti / bin / bash dengan shell pilihan Anda)

Florian Diesch
sumber
terima kasih banyak untuk semuanya. Saya tidak berharap mendapatkan 2+ upvotes pada pertanyaan saya :) Saya suka konstruksi "su -s ..." dan konsol / ftp adalah poin yang bagus. Saya benar-benar mengejar sesuatu seperti "su-s".
NoozNooz42
3
Trik su-s adalah emas. Saya menggunakannya sepanjang waktu untuk akun sistem yang saya perlukan untuk menguji izin, misalnya, apache, tidak ada, dll. Saya biasanya melakukan su - user -s / bin / bash. Argumen opsional - dapat digunakan untuk menyediakan lingkungan yang mirip dengan apa yang diharapkan pengguna seandainya pengguna masuk secara langsung.
dmourati
2
Jika Anda memerlukan variabel lingkungan (mis. Dari / etc / profile) untuk dimuat, melewati tanda hubung ekstra akan melakukannya:su - -s /bin/bash user
Leons
13

Jika Anda masih ingin su bekerja, Anda dapat menggunakan sudo -u [username]atau meneruskan -s /bin/bashsu sebagai shell sementara. Mereka berdua melakukan hal yang sama tanpa adanya shell /etc/passwd.

Loke
sumber
7

Jika sebuah akun tidak memiliki kata sandi ( passwd -d nama pengguna ), mereka tidak dapat masuk secara interaktif (konsol, SSH, dll.). Jika mereka memiliki shell yang valid, su masih akan berfungsi. Perhatikan "secara interaktif,"; jika seseorang memutuskan untuk mengatur keypair SSH untuk akun tersebut, itu akan berhasil!

astrostl
sumber
apakah pengguna perlu memiliki shell yang valid untuk su? Saya cukup yakin Anda masih di shell asli yang sama setelah Anda su ke pengguna lain ... Anda tidak benar-benar MASUK sebagai pengguna lain ... Jadi, hanya pengaturan shell ke / dev / null mungkin bekerja demikian juga.
Brian Postow
Ya, masih membutuhkan shell yang valid: [root @ localhost ~] # su daemon Akun ini saat ini tidak tersedia. [root @ localhost ~] # su - daemon Akun ini saat ini tidak tersedia. (Sistem RHEL, shell daemon adalah / sbin / nologin)
astrostl
3

Dalam sshd_config tambahkan baris DenyUser [username]

Perhatikan bahwa ini tidak akan mencegah pengguna untuk masuk melalui konsol.

Chris S
sumber
1
Itu harus DenyUsers, dengan 's'.
David G
2

Selain apa yang telah disebutkan di atas (menonaktifkan dan / atau tidak mengatur kata sandi pengguna), modul pam_access (mencari halaman manual pada pam_access dan access.conf) dapat digunakan untuk mengontrol akses login.

abz
sumber
1

seperti yang orang lain katakan;

DenyUser usernameatau DenyGroup groupnamedi sshd_configakan mencegah login keypair / kata sandi melalui ssh.

meskipun saya biasanya melakukan sesuatu seperti AllowGroup sshatau sesuatu di sepanjang garis itu, dan secara eksplisit menambahkan orang yang membutuhkan akses ssh ke grup itu.

kemudian, Anda dapat melakukan apa yang dikatakan orang lain: passwd -d usernameuntuk mengosongkan kata sandi pengguna, sehingga mereka tidak dapat masuk di konsol, atau dengan cara lain. atau lebih baik lagi passwd -l usernameuntuk 'mengunci' akun. mungkin ssh akan menolak akses ke akun yang terkunci, bahkan dengan kunci, tapi saya tidak positif.

cpbills
sumber
1
Sebenarnya ssh akan memungkinkan Anda untuk masuk menggunakan otentikasi kunci bahkan ketika kata sandi akun terkunci.
Richard Holloway
1

Seperti yang saya sebutkan dalam komentar, saya pikir Anda masih dapat masuk ke akun dengan shell yang tidak valid. Jadi jika Anda mengatur shell pengguna ke / dev / null atau apa pun shell bin itu, Anda harus tetap su ke pengguna itu ... tetapi setiap upaya untuk masuk dengan cara apa pun akan menghentikan Anda kembali ...

Brian Postow
sumber
1

edit / etc / shadow dengan menambahkan! ke awal kata sandi.

username:!<hash>:#####:#:#####:#:::

Ketika mengamankan instalasi baru, ini adalah hal pertama yang saya lakukan setelah menginstal sudo, jadi tidak ada yang dapat menggunakan pengguna root untuk login atau ssh ke dalam sistem, pengguna sudo masih dapat mengeksekusi sebagai pengguna root.

snic.io
sumber
0

Jangan tentukan kata sandi untuk pengguna yang tidak diizinkan masuk atau menghapusnya.

# passwd -d myuser
François Feugeas
sumber
0

Dengan asumsi Anda hanya ingin su pengguna dari akun root, dan nonaktifkan semua akses lainnya:

Gunakan ini (jalankan sebagai root):

usermod -e 1 -L user

Ini menonaktifkan login kata sandi (seperti yang disarankan oleh banyak jawaban lain), tetapi akun ini juga kedaluwarsa . Anda tidak dapat masuk ke akun yang kadaluarsa, misalnya dengan kunci SSH. Anda masih bisa su user, meskipun itu akan menampilkan pemberitahuan bahwa akun telah kedaluwarsa.

artfulrobot
sumber
0

Mengetahui mekanisme mana yang terbaik tergantung pada persyaratan. Jika Anda mengetahui persyaratannya, Anda dapat memilih mekanisme yang sesuai. Semua jawaban di atas valid untuk beberapa set persyaratan.

Apakah Anda hanya ingin membatasi akses SSH? Apakah Anda memerlukan akses untuk metode surat atau ssh? Apakah akses hanya dari root?

su - userakan membutuhkan kata sandi untuk pengguna jika dijalankan menjadi pengguna selain root. Namun, sudo -u user -itidak memerlukan kata sandi untuk pengguna.

BillThor
sumber