Apa perbedaan antara / sbin / nologin dan / bin / false

170

Secara teknis, kecuali jika pamsudah diatur untuk memeriksa shell Anda, pam_shellskeduanya tidak dapat mencegah login Anda, jika Anda tidak di shell. Di sistem saya ukurannya bahkan berbeda, jadi saya curiga mereka benar-benar melakukan sesuatu. Jadi apa bedanya? mengapa mereka berdua ada? Mengapa saya harus menggunakan yang satu?

-rwxr-xr-x 1 root root  21K Feb  4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar  2 14:59 /sbin/nologin
xenoterracide
sumber
Path /bin/falseharus ada di mana-mana tetapi tidak /sbin/nologin: '/ sbin / nologin': Tidak ada file atau direktori tersebut. Adakah yang tahu mengapa ini /usr/sbin/nologinbukan /sbin/nologindi Debian dan Ubuntu?
baptx
4
Saya ingin tahu mengapa / bin / false membutuhkan 21k kode untuk mengembalikan kode pengembalian "1"! (dan / sbin / nologin hanya membutuhkan 4,7rb)
Mark Stewart
1
@MarkStewart Agak terlambat, tetapi Anda mungkin ingin membaca Mengapa benar dan salah begitu besar? dan Tutorial Whirlwind tentang Membuat Executables ELF yang Sangat Kecil untuk Linux .
nxnev
1
@ nxnev Ya tidak berpikir tentang overhead ELF. Dan dari masa IBM lama saya ada program IEFBR14 yang merupakan instruksi perakitan sederhana satu kode op: BR 14 - Cabang untuk mendaftar 14, yang akan menghentikan program dengan kode pengembalian diatur ke apa pun yang ada di register 14!
Mark Stewart

Jawaban:

198

Ketika /sbin/nologinditetapkan sebagai shell, jika pengguna dengan shell itu login, mereka akan mendapatkan pesan sopan yang mengatakan 'Akun ini saat ini tidak tersedia.' Pesan ini dapat diubah dengan file /etc/nologin.txt.

/bin/falsehanyalah sebuah biner yang segera keluar, menghasilkan false, ketika dipanggil, jadi ketika seseorang yang memiliki falseshell login, mereka segera keluar ketika falsekeluar. Menyetel shell /bin/truememiliki efek yang sama dengan tidak mengizinkan seseorang untuk masuk tetapi falsemungkin digunakan sebagai konvensi truekarena itu jauh lebih baik dalam menyampaikan konsep bahwa orang tidak memiliki shell.

Melihat nologinhalaman manual, katanya dibuat pada 4.4 BSD (awal 1990-an) sehingga muncul lama setelah falsedibuat. Penggunaan falsesebagai shell mungkin hanya sebuah konvensi yang dibawa sejak awal UNIX.

nologinadalah opsi yang lebih ramah pengguna, dengan pesan yang dapat disesuaikan yang diberikan kepada pengguna yang mencoba masuk, jadi Anda secara teoritis ingin menggunakannya; tetapi keduanya nologindan falseakan memiliki hasil akhir yang sama dari seseorang yang tidak memiliki shell dan tidak bisa ssh in

Mark McKinstry
sumber
10
/usr/sbin/nologinuntuk distribusi berbasis Debian.
Diemo
3
Setidaknya implementasi BSD juga mencatat upaya login ke syslog seperti yang terlihat di opensource.apple.com/source/system_cmds/system_cmds-735/… , sedangkan / bin / false tidak akan mencatat apa pun
Sergiy Kolodyazhnyy
28

Beberapa server FTP akan memungkinkan Anda mengakses FTP hanya jika Anda memiliki shell yang valid. /sbin/nologindianggap sebagai shell yang valid, sedangkan /bin/falsetidak.

(Saya pikir "valid" berarti status keluarnya adalah 0, tetapi /etc/shellsmungkin juga masuk ke dalamnya, mungkin tergantung pada sistem, perangkat lunak FTP, dan konfigurasi Anda.)

Mikel
sumber
1
ya, itu mungkin bagian dari program ftp menggunakan pam, dan pam menggunakan pam_shells yang seperti yang Anda katakan, periksa /etc/shells. Tebakan saja ... Aku bisa salah.
xenoterracide
4
Saya baru saja memeriksa Ubuntu 8.04 dan 14.04. Perintah nologin keluar dengan status 1 mirip dengan false, dan tidak ada yang benar, salah, atau nologin termasuk dalam / etc / shells. Jika ya, pengguna dapat menggunakan chsh untuk memilih shell seperti itu dan mengunci diri dari akunnya.
penguin359
12

/bin/falseadalah perintah sistem yang digunakan kapan saja Anda perlu meneruskan perintah ke program yang seharusnya tidak lebih dari keluar dengan kesalahan. Ini adalah pendamping /bin/true. Keduanya adalah utilitas POSIX yang sangat tua dan standar dan tidak menghasilkan output apa pun menurut definisi. true kadang-kadang digunakan untuk skrip shell yang harus diulang tanpa batas, seperti:

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologinsecara khusus dirancang untuk mengganti shell dan menghasilkan keluaran yang mengeluh Anda tidak bisa masuk. Sebelum ada, itu biasa digunakan /bin/falseuntuk pengguna dummy, tetapi bisa membingungkan karena pengguna tidak tahu mengapa mereka ditendang.

penguin359
sumber
4
Perlu dicatat itu /bin/truedan /bin/falsetidak selalu apa yang akan Anda dapatkan dalam skrip shell. Dalam zsh truedan falsebuilt-in, di mana bashmenggunakan /bin/*versi
xenoterracide
4

Di komputer saya, nologinselalu menampilkan pesan yang sama, dalam bahasa Inggris, mengabaikan argumen. /bin/falsemenanggapi --versiondan --helpdalam bahasa yang ditunjukkan oleh $LC_CTYPE. Selain perbedaan kosmetik ini, mereka memiliki efek yang sama.

Kegunaan-bijaksana, nologinlebih baik jika digunakan pada akun orang sungguhan yang berbicara bahasa Inggris. Dari segi keamanan, tidak ada perbedaan.

Gilles
sumber
4
Sepertinya mungkin falselebih untuk akun sistem yang tidak memiliki pengguna nyata, dan nologinuntuk akun yang dinonaktifkan.
xenoterracide
1
Apa OS kamu? nologinVersi Centos tidak membutuhkan argumen, tetapi dapat membaca pesan dari /etc/nologin.txt.
Alexander Gonchiy
3

/ bin / false only job adalah keluar dengan kode keluar bukan nol.

Cobalah di baris perintah:

$:> /bin/false
$:> echo $?
1
$:>

Beberapa institusi menggunakan / bin / false di bidang shell pada file kata sandi. Jika pengguna mencoba masuk, shellnya adalah / bin / false, sehingga mereka segera keluar

kerang
sumber
2

Di linux, /sbin/nologinberasal dari proyek util-linux , sementara itu /bin/falseadalah bagian dari GNU Coreutils . Mereka melayani peran yang berbeda, dan nologin memiliki opsi untuk mencetak pesan untuk orang-orang yang memilikinya sebagai shell mereka yang masuk. Perintah linux berasal dari BSD, di mana mereka tampaknya memiliki sejarah panjang yang berbeda. FreeBSD falsehanya mengembalikan 1 , sedangkan nologincek untuk memastikan itu berjalan pada TTY dan mengirim pesan ke syslog selama upaya login. Versi linux sedikit lebih rumit ( falsemelakukan segala macam hal yang menyenangkan dengan internasionalisasi untuk keluaran --help, saya berasumsi) tetapi pada dasarnya melakukan hal yang sama.

jsbillings
sumber
1

Mereka bisa saja program yang sama, tetapi mereka memiliki arti yang berbeda. Nama program memberitahukan semuanya.

  • / bin / false dimaksudkan untuk mengembalikan nilai yang salah. Dijalankan sebagai program.
  • / bin / nologin dimaksudkan untuk menunjukkan kepada pengguna bahwa tidak ada login yang diizinkan untuk sebuah akun. (Ini digunakan shell login.)
BillThor
sumber
-4

Keduanya melakukan pekerjaan yang kurang lebih sama tetapi /bin/falsebermanfaat untuk pengguna yang tidak memiliki hak istimewa. Di sisi lain, /sbin/nologinadalah untuk pengguna istimewa.

pythondetective
sumber
4
Oh, bagaimana Anda sampai pada kesimpulan itu?
fpmurphy
Mungkin dia telah melihat ke dalam /etc/passwd. Saya baru saja melihat /etc/passwdperegangan Debian yang baru diinstal. Pada kotak ini, hampir semua akun sistem (id pengguna <1000) memiliki /usr/sbin/nologinshell, dengan beberapa pengecualian. Harap dicatat bahwa saya tidak setuju dengan jawaban @ pythondetective. Saya hanya berspekulasi apa yang mungkin membawanya ke kesimpulan ini. Tapi komentar saya agak terlambat.
Binarus
tidak! shell login default tidak sama dengan privilege.
MUY Belgium
bukan "detektif" yang hebat
Emobe