Dalam /etc/passwd
file saya , saya dapat melihat bahwa www-data
pengguna yang digunakan oleh Apache, serta semua jenis pengguna sistem, memiliki salah satu /usr/sbin/nologin
atau /bin/false
sebagai shell login mereka. Sebagai contoh, berikut adalah pilihan garis:
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin games:x:5:60:games:/usr/games:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin syslog:x:101:104::/home/syslog:/bin/false whoopsie:x:109:116::/nonexistent:/bin/false mark:x:1000:1000:mark,,,:/home/mark:/bin/bash
Akibatnya, jika saya mencoba untuk menukar dengan salah satu pengguna ini (yang kadang-kadang saya ingin lakukan untuk memeriksa pemahaman saya tentang izin mereka, dan yang mungkin ada setidaknya alasan masuk akal setengah jalan untuk), saya gagal:
mark@lunchbox:~$ sudo su www-data
This account is currently not available.
mark@lunchbox:~$ sudo su syslog
mark@lunchbox:~$
Tentu saja, ini bukan masalah, karena saya masih bisa meluncurkan shell untuk mereka melalui metode seperti ini:
mark@lunchbox:~$ sudo -u www-data /bin/bash
www-data@lunchbox:~$
Tapi itu hanya membuat saya bertanya-tanya apa tujuan dilayani dengan menolak pengguna ini sebuah shell login. Melihat-lihat penjelasan di internet, banyak orang mengklaim bahwa ini ada hubungannya dengan keamanan, dan semua orang tampaknya setuju bahwa itu adalah ide yang buruk untuk mengubah kulit login dari para pengguna ini. Berikut kumpulan kutipan:
Mengatur shell pengguna Apache ke sesuatu yang non-interaktif umumnya merupakan praktik keamanan yang baik (benar-benar semua pengguna layanan yang tidak harus login secara interaktif harus mengatur shell mereka ke sesuatu yang non-interaktif).
- https://serverfault.com/a/559315/147556
shell untuk pengguna www-data diatur ke / usr / sbin / nologin, dan itu diatur untuk alasan yang sangat bagus.
- https://askubuntu.com/a/486661/119754
[akun sistem] dapat menjadi lubang keamanan , terutama jika shell diaktifkan:
Buruk
bin:x:1:1:bin:/bin:/bin/sh
Baik
bin:x:1:1:bin:/bin:/sbin/nologin
- https://unix.stackexchange.com/a/78996/29001
Demi keamanan, saya membuat akun pengguna tanpa shell login untuk menjalankan server Tomcat:
# groupadd tomcat # useradd -g tomcat -s /usr/sbin/nologin -m -d /home/tomcat tomcat
- http://www.puschitz.com/InstallingTomcat.html
Sementara posting ini berada dalam perjanjian dengan suara bulat bahwa tidak memberikan pengguna sistem shell login yang sebenarnya baik untuk keamanan, tidak satu pun dari mereka membenarkan klaim ini, dan saya tidak dapat menemukan penjelasannya di mana pun.
Serangan apa yang kami coba lindungi dengan tidak memberikan shell login nyata kepada pengguna ini?
Jawaban:
Jika Anda melihat
nologin
halaman manual Anda akan melihat deskripsi berikut.kutipan
Jadi maksud sebenarnya
nologin
adalah agar ketika pengguna mencoba masuk dengan akun yang memanfaatkannya/etc/passwd
adalah agar mereka disajikan dengan pesan yang ramah pengguna, dan bahwa setiap skrip / perintah yang berupaya memanfaatkan login ini menerima kode keluar 1.Keamanan
Sehubungan dengan keamanan, Anda biasanya akan melihat salah satu
/sbin/nologin
atau kadang-kadang/bin/false
, di antara hal-hal lain di bidang itu. Keduanya melayani tujuan yang sama, tetapi/sbin/nologin
mungkin metode yang disukai. Bagaimanapun mereka membatasi akses langsung ke shell sebagai akun pengguna khusus ini.Mengapa ini dianggap berharga sehubungan dengan keamanan?
"Mengapa" sulit untuk sepenuhnya dijelaskan, tetapi nilai dalam membatasi akun pengguna dengan cara ini, adalah bahwa itu menggagalkan akses langsung melalui
login
aplikasi ketika Anda mencoba untuk mendapatkan akses menggunakan akun pengguna tersebut.Menggunakan salah satu
nologin
atau/bin/false
menyelesaikan ini. Membatasi permukaan serangan sistem Anda adalah teknik umum di dunia keamanan, baik menonaktifkan layanan pada port tertentu, atau membatasi sifat login pada sistem seseorang.Masih ada rasionalisasi lain untuk digunakan
nologin
. Sebagai contoh,scp
tidak akan lagi bekerja dengan akun pengguna yang tidak menunjuk shell yang sebenarnya, seperti yang dijelaskan dalam Q & A ServerFault ini berjudul: Apa perbedaan antara / sbin / nologin dan / bin / false? .sumber
They both serve the same purpose, but /sbin/nologin is probably the preferred method.
Dari sudut pandang keamanan, `/ sbin / nologin`` bukan metode yang disukai; itu membuang-buang waktu dan siklus memberikan respons. Meskipun tidak ada yang memberikan keamanan yang sangat baik; itu adalah langkah-langkah pertahanan mendalam, tetapi mereka tidak benar-benar menghentikan seseorang untuk menjalankan perintah sebagai pengguna tertentu.nologin
adalah metode yang dipilih untuk alasan UX, bukan yang keamanan - lakukansudo su someuser
dan tidak mengalami apa - apa karena shell login merekafalse
membingungkan. Juga, kedua jangan mencegah seseorang dari menjalankan perintah sebagai user yang diberikan dalam beberapa keadaan, dijelaskan dalam jawabannya di sini.Jelas itu melayani tujuan keamanan. Misalnya, lihat bug di bawah ini yang diajukan untuk pengguna sistem yang memiliki shell.
Saya akan merekomendasikan Anda untuk membaca jawaban yang luar biasa ini oleh Gilles di mana dia juga menyediakan tautan ke beberapa bug.
sumber
ssh user@site
, dan itu berhasil, mereka tidak akan terus mencobassh user@site /bin/bash
, tapi saya cukup yakin itu akan tetap bekerja terlepas dari shell yang dinyatakan.ssh user@site /bin/bash
mengembalikanThis account is currently not available.
pesan sederhana . Juga, jawaban ini mengatakan nologin melindungi akses SSHUntuk menambahkan jawaban @slm dan @ramesh yang luar biasa:
Ya, seperti yang telah Anda tunjukkan, Anda masih dapat beralih ke pengguna dengan nologin sebagai shell default mereka dengan menjalankan
sudo
dengan shell yang ditentukan, tetapi dalam kasus ini, Anda harus:su
perintah, danPara pengguna yang memiliki nologin didefinisikan sebagai shell default mereka sering memiliki hak istimewa yang lebih tinggi / mampu melakukan lebih banyak kerusakan pada sistem daripada pengguna biasa, sehingga membuat mereka tidak dapat login secara langsung mencoba membatasi kerusakan yang dapat diderita oleh pelanggaran sistem Anda. .
sumber
Selain jawaban luar biasa yang telah diberikan, itu melayani tujuan lain.
Jika Anda menjalankan daemon FTP di server Anda, ia memeriksa shell login pengguna yang mencoba masuk. Jika shell tidak terdaftar
/etc/shells
, itu tidak memungkinkan mereka untuk masuk. Jadi memberikan akun daemon shell khusus mencegah seseorang dari memodifikasi akun melalui FTP.sumber
Di samping jawaban-jawaban hebat yang sudah diberikan, saya bisa memikirkan skenario berikut.
Bug keamanan dalam layanan yang berjalan sebagai pengguna terbatas memungkinkan untuk menulis file sebagai pengguna itu. File ini bisa ~ / .ssh / authorized_keys.
Ini memungkinkan penyerang untuk login langsung di shell yang akan membuatnya lebih mudah untuk mengeksekusi eskalasi hak istimewa.
Menolak shell login akan membuat opsi ini jauh lebih sulit.
sumber
Secara umum saya akan mengatakan / bin / false dan / sbin / nologin adalah sama - tapi saya kira itu tergantung pada server SSH yang Anda gunakan.
Akan lebih bijaksana bagi saya untuk menunjukkan eksploitasi baru-baru ini pada OpenSSH tampaknya mempengaruhi / bin / login palsu tetapi BUKAN / sbin / nologin. Namun ia menyatakan bahwa Dropbear berbeda dalam cara ini (juga exploit yang secara khusus berlaku untuk OpenSSH).
Eksploitasi memengaruhi sebagian besar versi:
7.2p1 dan lebih rendah (semua versi; kembali ~ 20 tahun) Dengan penerusan X11 diaktifkan
https://www.exploit-db.com/exploits/39569/
Jadi berdasarkan ini - saya pribadi akan melakukan / sbin / nologin namun saya tidak yakin apakah ini dapat mempengaruhi layanan yang membuat / bin / entri salah di / etc / passwd. Anda dapat melakukan percobaan dan melihat hasil Anda, tetapi silakan lakukan dengan risiko Anda sendiri! Saya kira kasus terburuk Anda bisa mengubahnya kembali dan memulai kembali layanan yang mempengaruhi. Saya pribadi memiliki beberapa entri menggunakan / bin / false - Tidak yakin apakah saya ingin repot dengan ini karena penerusan X11 bukan sesuatu yang telah saya aktifkan;)
Jika Anda menggunakan OpenSSH (menurut saya banyak orang ...) DAN mengaktifkan penerusan X11 - Anda mungkin ingin mempertimbangkan / sbin / nologin (atau mungkin beralih ke Dropbear).
sumber
Biasanya merupakan praktik keamanan yang baik untuk mengatur akun layanan dan aplikasi ke login non-interaktif. Pengguna yang berwenang mungkin masih memiliki akses ke akun tersebut menggunakan SU atau SUDO tetapi semua tindakan mereka dilacak dalam file log Sudoers dan dapat ditelusuri kembali ke pengguna yang menjalankan perintah di bawah hak istimewa akun layanan. Inilah sebabnya mengapa penting untuk menyimpan file log dalam sistem manajemen log terpusat sehingga administrator sistem tidak memiliki akses untuk mengubah file log. Pengguna yang menjalankan perintah di bawah SU atau SUDO sudah diizinkan untuk mengakses sistem.
Di sisi lain pengguna eksternal atau tidak sah ke sistem akan benar-benar tidak memiliki akses untuk masuk menggunakan akun tersebut dan itu adalah langkah pengamanan.
sumber
Ya, itu melayani tujuan keamanan. Ini ukuran pertahanan yang mendalam.
Alasan intinya melayani tujuan adalah bahwa ada berbagai bit perangkat lunak yang akan memvalidasi beberapa bentuk kredensial login untuk pengguna tertentu dan kemudian menggunakan shell login pengguna tersebut untuk menjalankan perintah. Mungkin contoh yang paling terkenal adalah SSH. Jika Anda berhasil mengotentikasi sebagai pengguna melalui SSH, SSH kemudian meluncurkan shell login pengguna (atau menggunakannya untuk menjalankan perintah yang Anda berikan, jika Anda menggunakan
ssh [email protected] 'command to run'
sintaks).Tentu saja, idealnya penyerang tidak akan dapat mengotentikasi sebagai pengguna sama sekali. Tetapi anggaplah situasi berikut terjadi:
Sekarang penyerang Anda dapat menulis kunci publik SSH
~/.ssh/authorized_keys
, lalu SSH masuk, dan - boom! - mereka punya akses shell ke server Anda.Jika pengguna memiliki
/usr/sbin/nologin
shell login mereka, maka bahkan setelah penyerang berhasil menulis kunci publikauthorized_keys
, itu tidak berguna bagi mereka. Semua itu memungkinkan mereka lakukan adalah lari jarak jauhnologin
, yang tidak terlalu berguna. Mereka tidak bisa mendapatkan peluru, dan serangan mereka telah dimitigasi.Dalam skenario ini tampaknya sangat hipotetis, saya ingin untuk dicatat bahwa saya menjadi sasaran tepatnya serangan ini di beberapa titik pada tahun 2015, sekitar setahun setelah saya mengajukan pertanyaan ini. Seperti orang tolol, saya meninggalkan contoh Redis tanpa kata sandi terbuka untuk dunia. Itu ditargetkan oleh serangan Redis crackit , di mana penyerang memasukkan kunci publik SSH ke dalam database Redis Anda, kemudian mengirimkan perintah yang memberitahu Redis untuk menulis konten database
.ssh/authorized_keys
, kemudian mencoba masuk ke SSH. Saya diselamatkan dari konsekuensi ketidakmampuan saya sendiri hanya oleh fakta bahwa pengelolaredis-server
paket Apt (yang saya gunakan untuk menginstal Redis) memiliki kebijaksanaan untuk membuatnya menjalankan Redis sebagairedis
pengguna yang tidak memiliki direktori home atau shell login; kalau bukan karena mereka, server saya kemungkinan akan ditebus atau berakhir sebagai bagian dari botnet beberapa peretas.Pengalaman itu memberi saya tingkat kerendahan hati dan membuat saya menghargai pentingnya pertahanan secara mendalam , dan, khususnya, tidak memberikan shell login ke akun yang menjalankan server web, database, dan layanan latar belakang lainnya.
sumber