/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 dengan chsh
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 menggunakan chsh
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 -
(AKA su -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 dengan su -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 dengan crypt
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.