Saya sering mendengarnya merekomendasikan bahwa akun pengguna harus dinonaktifkan dengan mengatur cangkangnya /bin/false
. Tetapi, pada sistem Linux saya yang ada, saya melihat bahwa sejumlah besar akun yang ada (semuanya akun layanan) memiliki cangkang /sbin/nologin
sebagai gantinya.
Saya melihat dari halaman manual yang /sbin/nologin
mencetak pesan ke pengguna yang mengatakan akun dinonaktifkan, dan kemudian keluar. Agaknya /bin/false
tidak mau mencetak apa pun.
Saya juga melihat yang /sbin/nologin
terdaftar /etc/shells
, sementara /bin/false
tidak.
Halaman manual mengatakan bahwa FTP akan menonaktifkan akses untuk pengguna dengan shell yang tidak terdaftar /etc/shells
dan menyiratkan bahwa program lain dapat melakukan hal yang sama. Apakah itu berarti seseorang dapat masuk dengan akun yang memiliki /sbin/nologin
shell?
Apa bedanya di sini? Yang mana dari ini yang harus saya gunakan untuk menonaktifkan akun pengguna, dan dalam keadaan apa? Apa efek lain yang /etc/shells
dimiliki listing ?
Jawaban:
/bin/false
adalah program utilitas, pendamping/bin/true
, yang berguna dalam arti abstrak untuk memastikan bahwa unix adalah fitur-lengkap. Namun, tujuan yang muncul untuk program-program ini telah ditemukan; pertimbangkan pernyataan BASH/some/program || /bin/true
, yang akan selalu mengevaluasi boolean menjadi true ($? = 0
) tidak peduli kembalinya/some/program
.Penggunaan yang muncul dari
/bin/false
, seperti yang Anda identifikasi, adalah sebagai shell nol untuk pengguna yang tidak diizinkan untuk masuk. Sistem dalam kasus ini akan berperilaku persis seolah-olah shell gagal dijalankan.POSIX (walaupun saya mungkin salah dan mungkin SUS) membatasi kedua perintah ini untuk melakukan apa pun selain mengembalikan nilai boolean yang sesuai.
/sbin/nologin
adalah utilitas BSD yang memiliki perilaku yang mirip dengan/bin/false
(mengembalikan boolean false), tetapi mencetak output juga, seperti/bin/false
yang dilarang dilakukan. Ini dimaksudkan untuk membantu pengguna memahami apa yang terjadi, meskipun dalam praktiknya banyak emulator terminal akan menutup begitu saja ketika shell berakhir, membuat pesan tetap tidak dapat dibaca dalam beberapa kasus.Ada sedikit tujuan untuk listing
/sbin/nologin
di/etc/shells
. Efek standar dari/etc/shells
adalah untuk mendaftar program yang diizinkan untuk digunakan denganchsh
ketika pengguna mengubah shell mereka sendiri (dan tidak ada alasan yang kredibel untuk mengubah shell Anda sendiri/sbin/nologin
). Pengguna super dapat mengubah shell siapa pun menjadi apa pun. Namun, Anda mungkin ingin membuat daftar keduanya/sbin/nologin
dan/bin/false
dalam/etc/rsh
, yang akan melarang pengguna dengan shell ini dari mengubah shell mereka menggunakanchsh
dalam acara yang disayangkan bahwa mereka mendapatkan shell.Daemon FTP dapat melarang akses ke pengguna dengan shell yang tidak ada di / etc / shells, atau mereka dapat menggunakan logika apa pun yang mereka inginkan. Menjalankan FTP harus dihindari karena
sftp
(yang menyediakan fungsi serupa) serupa tetapi aman. Beberapa situs menggunakan/sbin/nologin
untuk menonaktifkan akses shell sambil memungkinkan akses sftp dengan memasukkannya/etc/shells
. Ini dapat membuka backdoor jika pengguna diizinkan untuk membuat cronjobs.Dalam kedua kasus,
scp
tidak akan beroperasi dengan shell yang tidak valid.scponly
dapat digunakan sebagai shell dalam hal ini.Selain itu, pilihan shell mempengaruhi operasi
su -
(AKAsu -l
). Khususnya, output dari/sbin/nologin
akan dicetak ke stdout jika itu adalah shell; tidak demikian halnya dengan/bin/false
. Dalam kedua kasus, perintah yang dijalankan dengansu -cl
akan gagal.Akhirnya, jawabannya:
Untuk menonaktifkan akun, bergantung pada keduanya, tetapi atur shell
/sbin/nologin
untuk tujuan informasi (kecuali/sbin/nologin
ada di/etc/shells
, pada titik mana Anda harus menggunakan/bin/false
, yang seharusnya tidak). Alih-alih, setel bidang kata sandi/etc/passwd
ke!
, yang dijamin dengancrypt
valid tanpa kata sandi. Pertimbangkan pengaturan hash/etc/shadow
dengan cara yang sama untuk menghindari bug.passwd -l
akan melakukan ini untukmu.Cara ketiga untuk menonaktifkan akun adalah dengan menyetel bidang tanggal kedaluwarsa akun ke tanggal kuno (mis.
usermod --expiredate 1
). Ini akan mencegah login jika pengaturan Anda memungkinkan pengguna untuk mengotentikasi terhadap akun unix mereka tanpa kata sandi dan layanan yang mereka gunakan tidak memerlukan shell.sumber
titantools
paket:noshell
. Pseudo-shell ini menyediakan kemampuan audit, masuk ke syslog mencoba menggunakan akun dengannoshell
sebagai shell-nya, sementara masih melarang akses./bin/false
sebagai shell login untuk orang-orang yang tidak boleh login.Setelah melakukan riset tentang ini, metode yang Anda gunakan tergantung pada apa yang harus Anda kunci. Jika pengguna masuk dengan set ini ke shell maka mereka akan mendapatkan pesan yang ditampilkan untuk efek
This account is currently unavailable.
Note bahwa Anda dapat mengubahnya dengan membuat file/etc/nologin.txt
setidaknya pada turunan RHEL.Seperti yang Anda tahu
/bin/false
bukan shell. Cara kerjanya adalah mengembalikan false yang keluar segera setelah biner keluar. Catatan yang/bin/true
akan mencapai efek yang sama.Mengenai pertanyaan FTP Anda: Ya, Anda benar karena memiliki shell diatur untuk
/sbin/nologin
akan memungkinkan pengguna untuk login ke FTP sementara/bin/false
atau/bin/true
sepenuhnya akan mencegah pengguna masuk ke layanan apa pun .Oleh karena itu,
/bin/false
atau/bin/true
yang terbaik untuk mencegah pengguna masuk ke layanan apa pun, sementara/sbin/nologin
masih akan memungkinkan pengguna untuk masuk ke layanan selain SSH atau konsol lokal sambil memberikan umpan balik kepada pengguna bahwa akun tidak aktif dan paling baik digunakan ketika hanya SSH / lokal konsol harus dikunci.sumber
Um, apakah ada yang mencoba membuktikan bahwa / bin / false akan melarang akses FTP?
Saya baru saja mengganti shell pengguna saya ke / bin / false, dan bisa melakukan FTP dengan baik.
Saya menggunakan / dev / null untuk sepenuhnya mengunci pengguna (well, kecuali email, mereka masih bisa POP3).
sumber
/etc/shells
? Bagaimana server FTP Anda dikonfigurasi?