Nonaktifkan shell pengguna untuk alasan keamanan

58

Kami memiliki beberapa akun pengguna yang kami buat untuk tugas otomatis yang memerlukan izin berbutir halus, seperti transfer file lintas sistem, pemantauan, dll.

Bagaimana kami mengunci akun pengguna ini sehingga "pengguna" ini tidak memiliki shell dan tidak dapat masuk? Kami ingin mencegah kemungkinan seseorang dapat menggunakan SSH sebagai salah satu akun pengguna ini.

Suman
sumber

Jawaban:

63

Anda dapat menggunakan usermodperintah untuk mengubah shell login pengguna.

usermod -s /sbin/nologin myuser

atau

usermod -s /usr/sbin/nologin myuser

Jika OS Anda tidak menyediakan / sbin / nologin, Anda dapat mengatur shell ke perintah NOOP seperti / bin / false:

usermod -s /bin/false myuser
jordanm
sumber
1
/bin/falsetampaknya lebih umum daripada /bin/true.
jw013
@ jw013 Saya memperbarui jawaban saya, tetapi keduanya harus berfungsi dengan baik.
jordanm
1
Perhatikan bahwa pada Debian, nologinsebenarnya dapat ditemukan di/usr/sbin/nologin
xebeche
ini adalah ide pertama saya, sayangnya penggunaan beberapa akun pengguna 'valid' dinonaktifkan saat pengaturannologin
Javier
2
@ jw013 Sebenarnya saya punya /usr/local/bin/maybeyang /dev/urandommemilih antara keduanya. Mungkin saya harus menggunakannya: D
hegez
21

Mengubah shell login tidak selalu mencegah pengguna melakukan otentikasi (kecuali di beberapa layanan yang memeriksa apakah shell pengguna disebutkan dalam /etc/shells).

Orang mungkin masih dapat mengautentikasi ke berbagai layanan yang disediakan sistem Anda untuk pengguna unix, dan mungkin masih diizinkan untuk melakukan beberapa tindakan meskipun mungkin tidak menjalankan perintah sewenang-wenang secara langsung.

Mengubah shell ke /bin/falseatau /usr/sbin/nologinhanya akan mencegah mereka menjalankan perintah pada layanan-layanan yang dapat digunakan untuk menjalankan perintah (login konsol, ssh, telnet, rlogin, rexec ...), sehingga memengaruhi otorisasi untuk beberapa layanan saja.

Untuk sshmisalnya, yang masih memungkinkan mereka untuk melakukan port forwarding.

passwd -lakan menonaktifkan otentikasi kata sandi, tetapi pengguna mungkin masih diizinkan untuk menggunakan metode otentikasi lainnya (seperti authorized_keysdengan ssh).

Dengan pamdi Linux setidaknya, Anda dapat menggunakan pam_shellsmodul untuk membatasi otentikasi atau otorisasi kepada pengguna dengan shell yang diizinkan (yang disebutkan dalam /etc/shells). Untuk ssh, Anda ingin melakukannya di accounttingkat otorisasi ( ) seperti untuk sshdpenggunaan otentikasi pam selain metode otentikasi lainnya (seperti authorized_keys), atau Anda dapat melakukannya dengan sshd_configarahan dalam /etc/ssh/sshd_config(suka AllowUsersdan teman).

Namun berhati-hatilah bahwa menambahkan beberapa batasan dalam otorisasi pam global akan berpotensi mencegah cronpekerjaan yang berjalan sebagai pengguna tersebut.

Stéphane Chazelas
sumber
Terima kasih. Lalu apa yang akan Anda rekomendasikan dengan skema berikut: Saya perlu membuat pengguna yang membutuhkan akses ke folder rumahnya melalui sftp atau sshfs, tetapi ia tidak boleh bisa login dengan shell. Apakah itu mungkin? Saya jatuh seperti modul PAM mungkin menjadi solusi goto tapi saya tidak mengerti semuanya:|
Stphane
@Stphane Anda dapat melihat rssh - manpages.ubuntu.com/manpages/trusty/man1/rssh.1.html
Hart Simha
4

Anda mengedit /etc/passwdfile dan mengubah shell pengguna dari /bin/bash, atau /bin/shke/sbin/nologin

Mark Cohen
sumber
8
Jawabannya benar, tetapi mengedit tangan / etc / passwd tidak boleh direkomendasikan.
jordanm
3
Mengapa? Ini adalah sesuatu yang telah kami lakukan selama saya menjadi admin sys profesional. (sekitar 20 tahun sekarang) Sebenarnya, tidak semua distro linux / unix memiliki alat untuk memodifikasi / etc / passwd atau / etc / group .. Kecuali Anda menggunakan sesuatu seperti Yast atau Smit, yang merupakan alat yang men-cache pengaturan dan over-write mereka tidak ada salahnya mengedit tangan.
Mark Cohen
6
Jauh lebih mudah untuk membuat kesalahan "istirahat login semua orang" dengan mengedit tangan, daripada satu pengguna.
jordanm
2
@jordanm: ada vipwyang mencegah kesalahan semacam itu.
eudoxos
4

Pertama, nonaktifkan kata sandi, gunakan passwd -l username.

Perhatikan juga di manhalaman passwduntuk opsi -l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.
mdpc
sumber
1
Ini mungkin tidak diinginkan. Mereka mungkin memerlukan kata sandi pada akun sistem mereka untuk mengakses email misalnya.
jordanm
1
Beberapa sistem email memungkinkan penggunaan mekanisme kata sandi mereka sendiri. Saya menggunakan Dovecot dan Exim dengan kata sandi hanya email. Ini memungkinkan penggunaan webmail di server saya tidak akan menggunakan kata sandi sistem saya. Domain email virtual memerlukan kata sandi sendiri karena tidak digabungkan ke sistem kata sandi server.
BillThor
2

Anda dapat menggunakan perintah chsh:

~# chsh myuser

Masukkan detail shell baru saat diminta:

Login Shell [/bin/sh]: /bin/nologin

Atau versi lebih pendek:

~# chsh myuser -s /bin/nologin
Ayo Bicara
sumber
0

Untuk mencegah pengguna masuk dan bahkan otentikasi lebih dari ssh yang memungkinkan penerusan port (seperti dijelaskan di sini Stephane), saya memodifikasi pengguna agar mirip dengan nobodypengguna sistem :

  • otentikasi kata sandi diblokir dalam /etc/shadow(dengan *atau !!pada bidang yang tepat)
  • shell yang dinonaktifkan di /etc/passwd(mis. /sbin/nologinpada bidang yang tepat)
  • dir home baca-saja /etc/passwd(mis. /pada bidang yang tepat)
penekanan tombol
sumber