What is bin false in linux

В чем разница между / sbin / nologin и / bin / false

Технически, если только pam вы не настроили проверку вашей оболочки, pam_shells ни один из них не может фактически предотвратить ваш вход в систему, если вы не в оболочке. В моей системе они даже разных размеров, поэтому я подозреваю, что они действительно что-то делают. Так в чем же разница? почему они оба существуют? Зачем мне использовать один над другим?

Когда /sbin/nologin установлена ​​оболочка, если пользователь с этой оболочкой войдет в систему, он получит вежливое сообщение «Эта учетная запись в данный момент недоступна». Это сообщение можно изменить с помощью файла /etc/nologin.txt .

/bin/false это просто двоичный файл, который сразу же завершает работу, возвращая false, когда он вызывается, поэтому, когда кто-то, имеющий false учетную запись, входит в систему, он сразу же выходит из системы при false выходе. Установка оболочки на /bin/true тот же эффект не позволяет кому-либо войти в систему, но false , вероятно, используется в качестве соглашения, true поскольку гораздо лучше передать концепцию, что у человека нет оболочки.

Глядя на nologin справочную страницу, он говорит, что он был создан в 4.4 BSD (начало 1990-х), так что он появился намного позже false . Использование false в качестве оболочки, вероятно, просто соглашение, перенесенное с первых дней UNIX.

nologin это более удобный для пользователя вариант с настраиваемым сообщением, которое выдается пользователю, пытающемуся войти в систему, поэтому теоретически вы захотите его использовать; но оба nologin и false будут иметь один и тот же конечный результат, если кто-то не имеет оболочки и не может войти в ssh.

Некоторые FTP-серверы разрешают вам FTP-доступ, только если у вас есть действующая оболочка. /sbin/nologin считается допустимой оболочкой, тогда /bin/false как нет.

(Я думаю, что «действительный» означает, что его статус выхода равен 0, но /etc/shells может также войти в него, это, вероятно, зависит от системы, программного обеспечения FTP и вашей конфигурации.)

/bin/false это системная команда, которая используется каждый раз, когда вам нужно передать команду программе, которая не должна делать ничего, кроме выхода с ошибкой. Это компаньон для /bin/true . Обе они являются очень старыми и стандартными утилитами POSIX и не выдают никаких выходных данных по определению. Значение true иногда используется для сценария оболочки, который должен выполняться бесконечно, например:

/usr/sbin/nologin специально разработан для замены оболочки и выдаёт жалобы на невозможность входа в систему. До того, как он существовал, его обычно использовали /bin/false для фиктивных пользователей, но это могло сбивать с толку, поскольку пользователь не знает, почему его выкинули.

На моей машине nologin всегда отображается одно и то же сообщение на английском языке без учета аргументов. /bin/false отвечает —version и —help на языке, указанном $LC_CTYPE . Помимо этих косметических различий, они имеют тот же эффект.

С точки зрения удобства использования, nologin лучше, если он используется за счет реального человека, который говорит по-английски. С точки зрения безопасности, нет никакой разницы.

Источник

В чем разница между /sbin /nologin и /bin /false?

Я часто слышал, что рекомендуется отключить учетную запись пользователя, установив ее оболочку в /bin/false . Но, по моим существующим системам Linux, я вижу, что у большого количества существующих учетных записей (все из них учетные записи служб) вместо этого есть оболочка /sbin/nologin .

Я вижу на странице man, что /sbin/nologin печатает сообщение пользователю, говоря, что учетная запись отключена, а затем завершает работу. Предположительно /bin/false ничего не печатает.

Я также вижу, что /sbin/nologin указан в /etc/shells , а /bin/false — нет.

На странице руководства говорится, что FTP отключит доступ для пользователей с оболочкой not , указанной в /etc/shells , и подразумевает, что другие программы могут сделать то же самое. Означает ли это, что кто-то может подключаться к FTP с учетной записью с /sbin/nologin в качестве оболочки?

Читайте также:  Указанный порт не существует при установке принтера windows 10

В чем тут разница? Какой из них я должен использовать для отключения учетной записи пользователя и при каких обстоятельствах? Какие еще эффекты имеет листинг в /etc/shells ?

3 ответа

/bin/false — это служебная программа, сопутствующая /bin/true , которая полезна в каком-то абстрактном смысле, чтобы убедиться, что unix полностью дополнен. Однако были найдены новые цели для этих программ; рассмотрим инструкцию BASH /some/program || /bin/true , который всегда будет иметь значение boolean для true ( $? = 0 ) независимо от возврата /some/program .

Внезапное использование /bin/false , как вы определили, является пустой оболочкой для пользователей, которым не разрешено входить в систему. Система в этом случае будет вести себя точно так же, как если бы оболочка не удалась работать.

POSIX (хотя я могу ошибаться, и это может быть SUS) ограничивает обе эти команды только тем, что возвращает только соответствующее логическое значение.

/sbin/nologin — это утилита BSD, которая имеет аналогичное поведение с /bin/false (возвращает boolean false), но также выводит вывод, как /bin/false запрещается делать. Это должно помочь пользователю понять, что произошло, хотя на практике многие терминальные эмуляторы просто закрываются, когда оболочка завершается, и в некоторых случаях сообщение все равно нечитаемо.

Существует мало возможностей для перечисления /sbin/nologin в /etc/shells . Стандартный эффект /etc/shells заключается в том, чтобы отображать программы, допустимые для использования с chsh , когда пользователи меняют свою собственную оболочку (и нет убедительной причины для изменения вашей собственной shell для /sbin/nologin ). Суперпользователь может изменить чью-либо оболочку на что угодно. Однако вы можете указать как /sbin/nologin , так и /bin/false в /etc/rsh , что запретит пользователям с этими оболочки из-за изменения оболочки с помощью chsh в неудачном случае, что они получают оболочку.

FTP-демоны могут запретить доступ к пользователям с оболочкой, не находящейся в /etc /shells, или они могут использовать любую другую логику, которую они хотят. Запускать FTP следует избегать в любом случае, потому что sftp (который обеспечивает аналогичную функциональность) аналогичен, но безопасен. Некоторые сайты используют /sbin/nologin , чтобы отключить доступ к оболочке, разрешая доступ sftp, помещая его в /etc/shells . Это может открыть бэкдор, если пользователю разрешено создавать cronjobs.

В любом случае scp не будет работать с недопустимой оболочкой. scponly может использоваться как оболочка в этом экземпляре.

Кроме того, выбор оболочки влияет на работу su — (AKA su -l ). В частности, вывод /sbin/nologin будет напечатан на stdout, если это оболочка; это не может быть в случае с кодом /bin/false . В любом случае команды, выполняемые с помощью su -cl , не будут выполнены.

Чтобы отключить учетную запись, не зависеть ни от одного из них, но установите оболочку в /sbin/nologin для информационных целей (если только /sbin/nologin не находится в /etc/shells , в этот момент вы должны использовать /bin/false , чего не должно быть). Вместо этого установите поле пароля в /etc/passwd в ! , что гарантируется crypt , чтобы оно не было действительным для каких-либо паролей. Рассмотрите возможность установки хэша в /etc/shadow таким же образом, чтобы избежать ошибок. passwd -l сделает это за вас.

Третий способ отключить учетную запись — установить поле даты истечения срока действия учетной записи на древнюю дату (например, usermod —expiredate 1 ). Это предотвратит вход в систему, если ваша настройка позволяет пользователям аутентифицироваться против их учетной записи unix без пароля, а служба, которую они используют, не требует оболочки.

После некоторых исследований по этому методу используемый вами метод зависит от того, что вам нужно заблокировать. Если пользователь входит в систему с этим набором в оболочку, тогда они получат сообщение, отображаемое с эффектом This account is currently unavailable. Обратите внимание, что вы можете изменить это, создав файл /etc/nologin.txt по крайней мере на производных RHEL.

Как вы знаете, /bin/false не является оболочкой. Как он работает, так это то, что он возвращает false, который выходит из системы сразу после двоичных выходов. Обратите внимание, что /bin/true достигнет того же эффекта.

Относительно вашего FTP-вопроса: Да, вы правы в том, что наличие оболочки, установленной в /sbin/nologin , позволит пользователям подключаться к FTP, а /bin/false или /bin/true полностью запретит пользователю входить в службу any .

Поэтому /bin/false или /bin/true лучше всего запретить пользователю входить в любую службу, а /sbin/nologin будет по-прежнему позволять пользователям входить в сервисы, отличные от SSH или локальной консоли, обеспечивая при этом обратную связь с пользователем, что учетная запись неактивна, и ее лучше всего использовать, когда нужно заблокировать только SSH /локальную консоль.

Читайте также:  Linux для проверки сети

Um, попросил ли кто-нибудь попробовать доказать, что /bin /false запретит доступ к FTP?

Я только что изменил оболочку моего пользователя на /bin /false и смог полностью FTP.

Я использую /dev /null для полностью блокирует пользователя (ну, кроме электронной почты, они могут по-прежнему POP3).

Источник

What is /bin/true?

On a Linux system, what is /bin/true ? What is it used for?

6 Answers 6

/bin/true is a command that returns 0 (a truth value in the shell).

Its purpose is to use in places in a shell script where you would normally use a literal such as «true» in a programming language, but where the shell will only take a command to run.

/bin/false is the opposite that returns non-zero (a false value in the shell).

From the man page:

Note, it’s not just silly or visually nice. It helps for example to exit a program without activating the end handlers which might mess up when doing multi threading or forked programs. Like in perl:

I’ve seen it used to fool a system operation into thinking a command has run when it hasn’t. If a command is faulty eg looping, you can replace it with a symlink to ‘true’ to get the master job to run. Only a good idea if the job replaced isn’t essential.

Simply saying its a program returning 0. Sometimes we need to get this value to let the script more readable. It is usually used when you need to use a command for a true value.

In the UNIX shells, it’s used for the same purposes as boolean constants true and false in any other language.

Not the answer you’re looking for? Browse other questions tagged linux command or ask your own question.

Linked

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.10.8.40416

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Linux /bin/false VS /sbin/nologin: Politely Refuse a Login

H ow do I deny access to user account? Do I need to use /bin/false or /sbin/nologin to refuse a login?

The /sbin/nologin command politely refuse a login. It displays a message that an account is not available and exits non-zero. This is prefreed method these days to deny login access to account. You can use it as follows:
# usermod -s /sbin/nologin userName

The /bin/false is old method which does nothing and always return unsuccessful code. You can use it as follows to deny login access to existing user:
# usermod -s /bin/false userName

More About /etc/nologin File

If the file /etc/nologin exists, login will allow access only to root user. ther users will be shown the contents of this file and their logins will be refused. This is used when you need to deny login access to all users except root account. Just create /etc/nologin file and you are done:
cat > /etc/nologin
Sample ouputs:

  • No ads and tracking
  • In-depth guides for developers and sysadmins at Opensourceflare✨
  • Join my Patreon to support independent content creators and start reading latest guides:
    • How to set up Redis sentinel cluster on Ubuntu or Debian Linux
    • How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
    • How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
    • A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
    • How to protect Linux against rogue USB devices using USBGuard

Join Patreon

A Better Solution

Lock and unlock user accounts using the following commands:
# passwd -l userName
To unlock it again:
# passwd -u userName

🐧 Get the latest tutorials on Linux, Open Source & DevOps via

Источник

What is the difference between /sbin/nologin and /bin/false?

I have often heard it recommended that a user account should be disabled by setting its shell to /bin/false . But, on my existing Linux systems, I see that a great number of existing accounts (all of them service accounts) have a shell of /sbin/nologin instead.

Читайте также:  Scorched earth для windows

I see from the man page that /sbin/nologin prints a message to the user saying the account is disabled, and then exits. Presumably /bin/false would not print anything.

I also see that /sbin/nologin is listed in /etc/shells , while /bin/false is not.

The man page says that FTP will disable access for users with a shell not listed in /etc/shells and implies that other programs may do the same. Does that mean that somebody could FTP in with an account that has /sbin/nologin as its shell?

What is the difference here? Which one of these should I use to disable a user account, and in what circumstances? What other effects does a listing in /etc/shells have?

3 Answers 3

/bin/false is a utility program, companion to /bin/true , which is useful in some abstract sense to ensure that unix is feature-complete. However, emergent purposes for these programs have been found; consider the BASH statement /some/program || /bin/true , which will always boolean-evaluate to true ( $? = 0 ) no matter the return of /some/program .

An emergent use of /bin/false , as you identified, is as a null shell for users not allowed to log in. The system in this case will behave exactly as though the shell failed to run.

POSIX (though I may be wrong and it may the the SUS) constrains both these commands to do exactly nothing other than return the appropriate boolean value.

/sbin/nologin is a BSD utility which has similar behaviour to /bin/false (returns boolean false), but prints output as well, as /bin/false is prohibited from doing. This is supposed to help the user understand what happened, though in practice many terminal emulators will simply close when the shell terminates, rendering the message all but unreadable anyway in some cases.

There is little purpose to listing /sbin/nologin in /etc/shells . The standard effect of /etc/shells is to list the programs permissible for use with chsh when users are changing their own shell (and there is no credible reason to change your own shell to /sbin/nologin ). The superuser can change anyone’s shell to anything. However, you may want to list both /sbin/nologin and /bin/false in /etc/rsh , which will prohibit users with these shells from changing their shell using chsh in the unfortunate event that they get a shell.

FTP daemons may disallow access to users with a shell not in /etc/shells, or they may use any other logic they wish. Running FTP is to be avoided in any case because sftp (which provides similar functionality) is similar but secure. Some sites use /sbin/nologin to disable shell access while allowing sftp access by putting it in /etc/shells . This may open a backdoor if the user is allowed to create cronjobs.

In either case, scp will not operate with an invalid shell. scponly can be used as a shell in this instance.

Additionally, the choice of shell affects the operation of su — (AKA su -l ). Particularly, the output of /sbin/nologin will be printed to stdout if it is the shell; this cannot be the case with /bin/false . In either case commands run with su -cl will fail.

Finally, the answer:

To disable an account, depend on neither of these, but set the shell to /sbin/nologin for informational purposes (unless /sbin/nologin is in /etc/shells , at which point you should use /bin/false , which shouldn’t be). Instead, set the password field in /etc/passwd to ! , which is guaranteed by crypt to be valid for no passwords. Consider setting the hash in /etc/shadow the same way to avoid bugs. passwd -l will do this for you.

A third way to disable an account is to set the account expiration date field to an ancient date (eg. usermod —expiredate 1 ). This will prevent logins in case your setup allows users to authenticate against their unix account without a password and the service they are using requires no shell.

Источник

Оцените статью