Можно ли обойти /sbin/nologin?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

HorekRediskovich
Сообщения: 125

Можно ли обойти /sbin/nologin?

Сообщение HorekRediskovich »

Всем привет! :rolleyes:
Собственно вопрос в шапке. Когда-то один гуру мне сказал что вместо /sbin/nologin лучше использовать /bin/cat, ибо если админ или тот кто ломится на сервак по ssh умный то он сможет обойти /sbin/nologin, но тогда у меня ума не хватило поподробней расспросить у него что да как.
В общем кто что думает по этому поводу? :huh:
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21231
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Можно ли обойти /sbin/nologin?

Сообщение Bizdelnick »

Если кто-то ломится по ssh, то не имеет никакого значения, какой у юзера прописан шелл, потому что вместо него ssh умеет запускать любую команду. См. man ssh. Вот только как этот кто-то намерен авторизоваться, если юзер залочен?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Можно ли обойти /sbin/nologin?

Сообщение SLEDopit »

Bizdelnick писал(а):
06.05.2016 14:24
Если кто-то ломится по ssh, то не имеет никакого значения, какой у юзера прописан шелл, потому что вместо него ssh умеет запускать любую команду. См. man ssh.
Ты хочешь сказать, что даже если прописать rssh, то можно запустить так любую команду и отсылаешь к строчке "If command is specified, it is executed on the remote host instead of a login shell." ?
Если так, то не всё так просто. Иначе какой смысл пилить все эти секурные шеллы, если тут такая дырища?

Насколько я понимаю, ssh daemon при попытке подключения по ssh запускает шелл, прописанный в качестве login shell'a, а тот уже дальше решает что делать: либо запускать ещё одну копию самого себя и передавать туда управление, либо запускать указанную команду.
Поэтому, если в качестве логин шелла что-то типа nologin или /bin/false, то до выполнения команды / другого шелла тупо не доходит.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21231
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Можно ли обойти /sbin/nologin?

Сообщение Bizdelnick »

Да, видимо ты прав. В таком случае я не знаю способа обойти nologin и уж подавно не представляю, чем cat может быть лучше.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
HorekRediskovich
Сообщения: 125

Re: Можно ли обойти /sbin/nologin?

Сообщение HorekRediskovich »

Bizdelnick писал(а):
07.05.2016 01:09
Да, видимо ты прав. В таком случае я не знаю способа обойти nologin и уж подавно не представляю, чем cat может быть лучше.

Про cat, в порядке бреда предпологаю, что когда оператор передает какую то команду на stdin то cat её тупо выдает на stdout :crazy:
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21231
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Можно ли обойти /sbin/nologin?

Сообщение Bizdelnick »

Это понятно, но не думаю, что это лучше, чем вообще ничго не читать с stdin, как делают nologin и false.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
HorekRediskovich
Сообщения: 125

Re: Можно ли обойти /sbin/nologin?

Сообщение HorekRediskovich »

Bizdelnick писал(а):
07.05.2016 12:03
Это понятно, но не думаю, что это лучше, чем вообще ничго не читать с stdin, как делают nologin и false.

Согласен :yes3: мдамс глупый вопрос я задал :unsure:
Спасибо сказали:
MiK13
Сообщения: 1243
ОС: Linux Debian

Re: Можно ли обойти /sbin/nologin?

Сообщение MiK13 »

Случайно увидел это обсуждение и решил поверить nologin.
Подключился к серверу как root, создал файл /etc/nolon, в который записал фразу: Доступ временно запрещён!.
После это попробовал и вот что вышло:

Код: Выделить всё

$ ssh server
\320\224\320\276\321\201\321\202\321\203\320\277 \320\262\321\200\320\265\320\274\320\265\320\275\320\275\320\276 \320\267\320\260\320\277\321\200\320\265\321\211\321\221\320\275!

Connection closed by 10.177.11.1

Правда,

Код: Выделить всё

$ ssh root@server
root@server's password:
Доступ временно запрещён!

Linux itm-server 2.6.26-2-686 #1 SMP Wed Aug 19 06:06:52 UTC 2009 i686


Получается, что в этом файле вообще нельзя использовать русские буквы?
Спасибо сказали:
HorekRediskovich
Сообщения: 125

Re: Можно ли обойти /sbin/nologin?

Сообщение HorekRediskovich »

MiK13 писал(а):
20.05.2016 13:23
Случайно увидел это обсуждение и решил поверить nologin.
Подключился к серверу как root, создал файл /etc/nolon, в который записал фразу: Доступ временно запрещён!.
После это попробовал и вот что вышло:

Код: Выделить всё

$ ssh server
\320\224\320\276\321\201\321\202\321\203\320\277 \320\262\321\200\320\265\320\274\320\265\320\275\320\275\320\276 \320\267\320\260\320\277\321\200\320\265\321\211\321\221\320\275!

Connection closed by 10.177.11.1

Правда,

Код: Выделить всё

$ ssh root@server
root@server's password:
Доступ временно запрещён!

Linux itm-server 2.6.26-2-686 #1 SMP Wed Aug 19 06:06:52 UTC 2009 i686


Получается, что в этом файле вообще нельзя использовать русские буквы?


эм я похоже просто не понимаю всю затею вашу, но /sbin/nologin прописывается при создании пользователя как его shell либо в файле /etc/passwd в поле где прописывается shell пользователя.
Спасибо сказали:
MiK13
Сообщения: 1243
ОС: Linux Debian

Re: Можно ли обойти /sbin/nologin?

Сообщение MiK13 »

HorekRediskovich писал(а):
20.05.2016 16:55
эм я похоже просто не понимаю всю затею вашу, но /sbin/nologin прописывается при создании пользователя как его shell либо в файле /etc/passwd в поле где прописывается shell пользователя.

Это не затея, это проверка.
Просто я о nologin не знал, так как не было нужды. А тут прочитал и решил узнать что это такое.
man nologin выдал

Код: Выделить всё

ОПИСАНИЕ
       Программа nologin выдаёт сообщение, что учётная запись недоступна и
       завершает работу с ненулевым кодом возврата. Она предназначена для
       замены оболочки командной строки в поле оболочки у заблокированных
       учётных записей.

       Чтобы заблокировать все учётные записи посмотрите справочную страницу
       nologin(5).

Я посмотрел и прочитал:

Код: Выделить всё

DESCRIPTION
       If  the  file  /etc/nologin exists and is readable, login(1) will allow
       access only to root.  Other users will be shown the  contents  of  this
       file and their logins will be refused.

и решил попробовать.
Оказалось, что если входить как root, то действительно показывается содержимое этого файла, причём нормально. А вот обычному пользователю не-ASCII знаки выдаётся в виде 8-ричного представления.
Это меня и удивило.

P.S. Странно, что nologin(8) перевели на русский язык, а nologin(5) нет.
И ещё: для чего нужна программа nologin, если можно заблокировать пользователя через passwd?
(Кстати, я не нашёл у себя в Jessie этой программы)
Спасибо сказали:
MrClon
Сообщения: 838
ОС: Ubuntu 10.04, Debian 7 и 6

Re: Можно ли обойти /sbin/nologin?

Сообщение MrClon »

MiK13 писал(а):
20.05.2016 22:02
Оказалось, что если входить как root, то действительно показывается содержимое этого файла, причём нормально. А вот обычному пользователю не-ASCII знаки выдаётся в виде 8-ричного представления.
Это меня и удивило.

Сравни вывод locale от рута и не от рута.
Спасибо сказали:
MiK13
Сообщения: 1243
ОС: Linux Debian

Re: Можно ли обойти /sbin/nologin?

Сообщение MiK13 »

MrClon писал(а):
21.05.2016 02:36
Сравни вывод locale от рута и не от рута.

Код:

mik13@MD:~/Загрузки$ su -c locale Пароль: LANG=ru_RU.UTF-8 LANGUAGE=ru_RU:ru LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL= mik13@MD:~/Загрузки$ locale LANG=ru_RU.UTF-8 LANGUAGE=ru_RU:ru LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL=

Вроде одно и то же
Спасибо сказали:
MrClon
Сообщения: 838
ОС: Ubuntu 10.04, Debian 7 и 6

Re: Можно ли обойти /sbin/nologin?

Сообщение MrClon »

А читаешь файл от рута и не от рута как?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21231
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Можно ли обойти /sbin/nologin?

Сообщение Bizdelnick »

Видимо при попытке логина не от рута окружение вообще не инициализируется и локаль не устанавливается.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
stannum
Сообщения: 322
Статус: Свободолюбитель
ОС: Debian GNU/Linux unstable

Re: Можно ли обойти /sbin/nologin?

Сообщение stannum »

Ограничить доступ можно сразу несколькими способами:
1. Использовать nologin в качестве шелла
2. Запретить использование пароля при логине
3. Запретить логин вообще, путём установки срока истечения пароля

Первый метод уже рассмотрели выше, но он обходится при наличии сети и рабочего ssh-сервера
Второй способ заключается в том, что в файле /etc/shadow меняется хеш пароля путём добавления символа "!" в начале

root@host

# grep user1 /etc/shadow user1:$6$r6AWfJMr$9v5Fm2bqv3ETgisXAKDJT5bj8xdGyY5qVJst7qtsp3YpurmMCdU9FA1L4Pw9AX7hXL3iZdEz4sXLDgqrzAEpf1:16016:0:99999:7::: # passwd -l user1 passwd: информация об истечении срока действия пароля изменена. # grep user1 /etc/shadow user1:!$6$r6AWfJMr$9v5Fm2bqv3ETgisXAKDJT5bj8xdGyY5qVJst7qtsp3YpurmMCdU9FA1L4Pw9AX7hXL3iZdEz4sXLDgqrzAEpf1:16016:0:99999:7:::

Но он тоже обходится при наличии сети и рабочего ssh-сервера и настроенной public-key аутентификации (т.е. без использования ввода пароля из /etc/shadow)
Третий способ самый правильный, который нельзя обойти, заключается в том, что в предпоследнее поле строки пользователя в /etc/shadow вписывается "0":

root@host

# grep user1 /etc/shadow user1:$6$r6AWfJMr$9v5Fm2bqv3ETgisXAKDJT5bj8xdGyY5qVJst7qtsp3YpurmMCdU9FA1L4Pw9AX7hXL3iZdEz4sXLDgqrzAEpf1:16016:0:99999:7::: # chage -l user1 Последний раз пароль был изменён : ноя 07, 2013 Срок действия пароля истекает : никогда Пароль будет деактивирован через : никогда Срок действия учётной записи истекает : никогда Минимальное количество дней между сменой пароля : 0 Максимальное количество дней между сменой пароля : 99999 Количество дней с предупреждением перед деактивацией пароля : 7 # chage -E 0 user1 # grep user1 /etc/shadow user1:$6$r6AWfJMr$9v5Fm2bqv3ETgisXAKDJT5bj8xdGyY5qVJst7qtsp3YpurmMCdU9FA1L4Pw9AX7hXL3iZdEz4sXLDgqrzAEpf1:16016:0:99999:7::0: # chage -l user1 Последний раз пароль был изменён : ноя 07, 2013 Срок действия пароля истекает : никогда Пароль будет деактивирован через : никогда Срок действия учётной записи истекает : янв 01, 1970 Минимальное количество дней между сменой пароля : 0 Максимальное количество дней между сменой пароля : 99999 Количество дней с предупреждением перед деактивацией пароля : 7


Вернуть назад:

root@host

#chage -E -1 user1

Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21231
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Можно ли обойти /sbin/nologin?

Сообщение Bizdelnick »

stannum писал(а):
23.05.2016 10:32
самый правильный

Вы правда знаете самый правильный способ? А Вам не приходило в голову, что эти способы предназначены для разных случаев?

stannum писал(а):
23.05.2016 10:32
Первый метод уже рассмотрели выше, но он обходится при наличии сети и рабочего ssh-сервера

Выше вроде бы уже разобрались, что это не так.

stannum писал(а):
23.05.2016 10:32
Второй способ заключается в том, что в файле /etc/shadow меняется хеш пароля путём добавления символа "!" в начале

Это не способ ограничения доступа, а всего лишь способ запретить использование установленного пароля.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
stannum
Сообщения: 322
Статус: Свободолюбитель
ОС: Debian GNU/Linux unstable

Re: Можно ли обойти /sbin/nologin?

Сообщение stannum »

Bizdelnick писал(а):
23.05.2016 12:12
stannum писал(а):
23.05.2016 10:32
самый правильный

Вы правда знаете самый правильный способ? А Вам не приходило в голову, что эти способы предназначены для разных случаев?

stannum писал(а):
23.05.2016 10:32
Первый метод уже рассмотрели выше, но он обходится при наличии сети и рабочего ssh-сервера

Выше вроде бы уже разобрались, что это не так.

stannum писал(а):
23.05.2016 10:32
Второй способ заключается в том, что в файле /etc/shadow меняется хеш пароля путём добавления символа "!" в начале

Это не способ ограничения доступа, а всего лишь способ запретить использование установленного пароля.


Вопрос темы "Можно ли обойти /sbin/nologin?", я постарался дать развёрнутый ответ, а вы затеваете неконструктивный спор и все ваши придирки абсолюно беспочвенны и без аргументов.
1. Самый правильный способ запретить пользователю залогиниться в системе при этом не удаляя пользователя совсем именно 3й способ приведенный мной.
2. Ваш довод "Это не способ ограничить..." - абсолютно противоречив, поскольку запретить использовать аутентификацию по паролю - это и есть ограничение.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21231
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Можно ли обойти /sbin/nologin?

Сообщение Bizdelnick »

stannum писал(а):
23.05.2016 12:31
Вопрос темы "Можно ли обойти /sbin/nologin?", я постарался дать развёрнутый ответ, а вы затеваете неконструктивный спор и все ваши придирки абсолюно беспочвенны и без аргументов.

Давайте конструктивно. Как обойти nologin? Вы написали, что это возможно, но примера не привели. Вариант, когда Вы root, не рассматриваем, с ним всё ясно.

stannum писал(а):
23.05.2016 12:31
Самый правильный способ запретить пользователю залогиниться в системе при этом не удаляя пользователя совсем именно 3й способ приведенный мной.

Почему в таком случае он не применяется для системных пользователей? Вместо этого для них во всех виденных мной дистрибутивах используется прописывание nologin, false или чего-то аналогичного в качестве шелла. То ли все дистростроители дураки, то ли этот вариант не хуже.

stannum писал(а):
23.05.2016 12:31
запретить использовать аутентификацию по паролю - это и есть ограничение.

Да, это ограничение. На метод аутентификации. Но не на вход в систему.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
stannum
Сообщения: 322
Статус: Свободолюбитель
ОС: Debian GNU/Linux unstable

Re: Можно ли обойти /sbin/nologin?

Сообщение stannum »

Давайте рассмотрим все варианты:
Сперва условимся, что пользователь user1 имеет возможность входа в систему по паролю, у него есть домашний каталог и запись в /etc/passwd с шеллом, типа /bin/sh или /bin/bash.
1. Меняем его логин шелл на false или что-угодно, что явно не даст ему шелла (cat , nologin, скрипт - тысячи их)

Теперь он выполняет со своего компа:

user@host

$ ssh user1@server /bin/bash user1@localhost's password: ls -la <== команда в ssh-сессии (стандартного приглашения типа "$, #, %" нет) итого 192 drwxr-xr-x 10 user1 user1 4096 сен 30 2015 . drwxr-xr-x 5 root root 4096 ноя 7 2013 .. drwx------ 2 user1 user1 4096 сен 30 2015 .aptitude -rw------- 1 user1 user1 492 сен 30 2015 .bash_history -rw-r--r-- 1 user1 user1 220 ноя 7 2013 .bash_logout -rw-r--r-- 1 user1 user1 3392 ноя 7 2013 .bashrc drwxr-xr-x 6 user1 user1 4096 сен 30 2015 .cache drwxr-xr-x 11 user1 user1 4096 сен 30 2015 .config drwx------ 3 user1 user1 4096 сен 4 2015 .dbus drwx------ 2 user1 user1 4096 сен 30 2015 .gnupg -rw-r--r-- 1 user1 user1 415 сен 4 2015 .gtkrc-2.0 lrwxrwxrwx 1 user1 user1 22 сен 4 2015 .gtkrc-2.0-kde4 -> /home/user1/.gtkrc-2.0 drwx------ 3 user1 user1 4096 сен 4 2015 .kde drwxr-xr-x 3 user1 user1 4096 сен 4 2015 .local -rw-r--r-- 1 user1 user1 1107 ноя 7 2013 .mkshrc drwx------ 3 user1 user1 4096 сен 30 2015 .nv -rw-r--r-- 1 user1 user1 675 ноя 7 2013 .profile -rw------- 1 user1 user1 60 сен 30 2015 .Xauthority -rw------- 1 user1 user1 124858 сен 30 2015 .xsession-errors

Вводит свой пароль и вуаля! Он на server'е и запустил себе /bin/bash в которм может делать все что позволено его учётке

2. Блокируем учётку командой passwd -l user1
Но умный user1 задолго до этого сгенерировал себе ключевую пару закрытый/открытый ключ командой ssh-keygen на другом компе и добавил открытый ключ в файл /home/user1/.ssh/authorized_keys, например командой ssh-copy-id
И теперь при вводе:

user@host

$ ssh user1@server /bin/bash ls -la <== команда в ssh-сессии (стандартного приглашения типа "$, #, %" нет) итого 192 drwxr-xr-x 10 user1 user1 4096 сен 30 2015 . drwxr-xr-x 5 root root 4096 ноя 7 2013 .. drwx------ 2 user1 user1 4096 сен 30 2015 .aptitude -rw------- 1 user1 user1 492 сен 30 2015 .bash_history -rw-r--r-- 1 user1 user1 220 ноя 7 2013 .bash_logout -rw-r--r-- 1 user1 user1 3392 ноя 7 2013 .bashrc drwxr-xr-x 6 user1 user1 4096 сен 30 2015 .cache drwxr-xr-x 11 user1 user1 4096 сен 30 2015 .config drwx------ 3 user1 user1 4096 сен 4 2015 .dbus drwx------ 2 user1 user1 4096 сен 30 2015 .gnupg -rw-r--r-- 1 user1 user1 415 сен 4 2015 .gtkrc-2.0 lrwxrwxrwx 1 user1 user1 22 сен 4 2015 .gtkrc-2.0-kde4 -> /home/user1/.gtkrc-2.0 drwx------ 3 user1 user1 4096 сен 4 2015 .kde drwxr-xr-x 3 user1 user1 4096 сен 4 2015 .local -rw-r--r-- 1 user1 user1 1107 ноя 7 2013 .mkshrc drwx------ 3 user1 user1 4096 сен 30 2015 .nv -rw-r--r-- 1 user1 user1 675 ноя 7 2013 .profile -rw------- 1 user1 user1 60 сен 30 2015 .Xauthority -rw------- 1 user1 user1 124858 сен 30 2015 .xsession-errors

Он авторизуется без ввода пароля по своему ключу и так же запустит себе BASH как приложение, в котором будет что-либо делать

3. Способ с выставлением срока годности учётки я уже описал выше, важно то, что получит пользователь при попытке войти:

user@host

$ ssh user1@localhost /bin/bash user1@localhost's password: Your account has expired; please contact your system administrator Connection closed by ::1


Вот и все.
А для "системных" пользователей 1й способ применяется по той причине, что у них нет ни домашнего каталога ни пароля (в большинстве случаев). Как-то так, надеюсь объяснил.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21231
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Можно ли обойти /sbin/nologin?

Сообщение Bizdelnick »

stannum писал(а):
23.05.2016 13:33
Вводит свой пароль и вуаля! Он на server'е и запустил себе /bin/bash в которм может делать все что позволено его учётке

Занятно. А почему у меня так не получается? Вы часом шелл юзеру поменять не забыли?
Я тоже поначалу полагал, что это сработает (см. выше), однако, как выяснилось, ошибался.

$

$ ssh test@192.168.122.58 /bin/bash test@192.168.122.58's password: This account is currently not available. $

Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21231
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Можно ли обойти /sbin/nologin?

Сообщение Bizdelnick »

stannum писал(а):
23.05.2016 13:33
А для "системных" пользователей 1й способ применяется по той причине, что у них нет ни домашнего каталога ни пароля (в большинстве случаев). Как-то так, надеюсь объяснил.

Нет, не объяснили. Отсутствие домашнего каталога (хотя он у многих системных пользователей есть) и пароля не мешает объявить учётную запись устаревшей, если это действительно «самый правильный» способ.
Кроме того, я бы не был так уверен, что ни одна система не позволяет выставить время до начала эпохи, а в таком случае «самый правильный» способ не сработает.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
stannum
Сообщения: 322
Статус: Свободолюбитель
ОС: Debian GNU/Linux unstable

Re: Можно ли обойти /sbin/nologin?

Сообщение stannum »

Ну что ж, я старался как мог.
Я имел в виду, что пароля в большинстве случаев нет, а не домашних директорий.
Демагогия вроде "я бы не был так уверен..." не принимается, вы найдите конкретный пример, в каком случае это не будет работать и напишите его и всего делов-то.
В конце концов я указал на метод, который работает, и который можно легко проверить. Кроме того разобрал все способы, которые были озвучены еще до меня.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21231
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Можно ли обойти /sbin/nologin?

Сообщение Bizdelnick »

stannum писал(а):
23.05.2016 14:49
я старался как мог

Нет уж, давайте ещё постараемся. Мне интересно, как так — я не могу залогиниться, когда шеллом стоит nologin, а Вы можете. Я выше уже спрашивал — Вы точно поменяли шелл юзеру? На что? Что за дистрибутив на сервере, какой версии там ssh? Я экспериментировал на ubuntu 12.04 с openssh 5.9p1 с дефолтными настройками.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Можно ли обойти /sbin/nologin?

Сообщение SLEDopit »

stannum писал(а):
23.05.2016 10:32
2. Запретить использование пароля при логине
это не запрет доступа. это вообще сюда не относится. оно, конечно, имеет побочный эффект, что люди без ключа не могут зайти, но это лишь побочный эффект.


stannum писал(а):
23.05.2016 13:33
1. Меняем его логин шелл на false или что-угодно, что явно не даст ему шелла (cat , nologin, скрипт - тысячи их)
У вас что-то не так. Будьте добры дистрибутив, версию ssh, строчку /etc/passwd про вашего пользователя, и команды повыполняйте не ls, а всякие whoami; echo "$SSH_CLIENT"; echo "$SSH_TTY" . а то не очень верится как-то.

у меня вот:

Код: Выделить всё

 $ sudo adduser --shell /usr/sbin/nologin sshtest
Adding user `sshtest' ...
<..>
Is the information correct? [Y/n] Y
 $ ssh sshtest@localhost /bin/bash
sshtest@localhost's password:
This account is currently not available.
 $ grep sshtest /etc/passwd
sshtest:x:1407:1407:,,,:/home/sshtest:/usr/sbin/nologin
 $ sudo chsh -s /bin/false sshtest
 $ ssh sshtest@localhost /bin/bash
sshtest@localhost's password:
 $ echo $?
1

 $ dpkg -l | grep openssh
ii  openssh-blacklist                     0.4.1+nmu1                        all          list of default blacklisted OpenSSH RSA and DSA keys
ii  openssh-blacklist-extra               0.4.1+nmu1                        all          list of non-default blacklisted OpenSSH RSA and DSA keys
ii  openssh-client                        1:7.1p1-4                         amd64        secure shell (SSH) client, for secure access to remote machines
ii  openssh-server                        1:7.1p1-4                         amd64        secure shell (SSH) server, for secure access from remote machines
ii  openssh-sftp-server                   1:7.1p1-4                         amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines
 $ uname -a
Linux localhost 4.0.0-2-amd64 #1 SMP Debian 4.0.8-2 (2015-07-22) x86_64 GNU/Linux
 $ cat /etc/debian_version
stretch/sid
точно так же ведёт себя на RHEL.
можете повторить на своей машине?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
HorekRediskovich
Сообщения: 125

Re: Можно ли обойти /sbin/nologin?

Сообщение HorekRediskovich »

У меня тоже не работает 1 метод обхода:

Код: Выделить всё

# useradd -s /sbin/nologin greg
# cat /etc/passwd|grep greg
greg:x:1111:1111::/home/greg:/sbin/nologin
# ssh -l greg 10.10.10.10
greg@192.168.255.200's password:
Last login: Mon May 23 18:22:22 2016 from srv.loval.lan
This account is currently not available.
Connection to 10.10.10.10 closed.


Код: Выделить всё

# useradd -s /bin/false greg
# cat /etc/passwd|grep greg
greg:x:1112:1112::/home/greg:/bin/false
# ssh greg@192.168.255.200 /bin/bash
greg@192.168.255.200's password:
#
Спасибо сказали:
HorekRediskovich
Сообщения: 125

Re: Можно ли обойти /sbin/nologin?

Сообщение HorekRediskovich »

stannum писал(а):
23.05.2016 13:33
Spoiler
Давайте рассмотрим все варианты:
Сперва условимся, что пользователь user1 имеет возможность входа в систему по паролю, у него есть домашний каталог и запись в /etc/passwd с шеллом, типа /bin/sh или /bin/bash.
1. Меняем его логин шелл на false или что-угодно, что явно не даст ему шелла (cat , nologin, скрипт - тысячи их)

Теперь он выполняет со своего компа:

user@host

$ ssh user1@server /bin/bash user1@localhost's password: ls -la <== команда в ssh-сессии (стандартного приглашения типа "$, #, %" нет) итого 192 drwxr-xr-x 10 user1 user1 4096 сен 30 2015 . drwxr-xr-x 5 root root 4096 ноя 7 2013 .. drwx------ 2 user1 user1 4096 сен 30 2015 .aptitude -rw------- 1 user1 user1 492 сен 30 2015 .bash_history -rw-r--r-- 1 user1 user1 220 ноя 7 2013 .bash_logout -rw-r--r-- 1 user1 user1 3392 ноя 7 2013 .bashrc drwxr-xr-x 6 user1 user1 4096 сен 30 2015 .cache drwxr-xr-x 11 user1 user1 4096 сен 30 2015 .config drwx------ 3 user1 user1 4096 сен 4 2015 .dbus drwx------ 2 user1 user1 4096 сен 30 2015 .gnupg -rw-r--r-- 1 user1 user1 415 сен 4 2015 .gtkrc-2.0 lrwxrwxrwx 1 user1 user1 22 сен 4 2015 .gtkrc-2.0-kde4 -> /home/user1/.gtkrc-2.0 drwx------ 3 user1 user1 4096 сен 4 2015 .kde drwxr-xr-x 3 user1 user1 4096 сен 4 2015 .local -rw-r--r-- 1 user1 user1 1107 ноя 7 2013 .mkshrc drwx------ 3 user1 user1 4096 сен 30 2015 .nv -rw-r--r-- 1 user1 user1 675 ноя 7 2013 .profile -rw------- 1 user1 user1 60 сен 30 2015 .Xauthority -rw------- 1 user1 user1 124858 сен 30 2015 .xsession-errors

Вводит свой пароль и вуаля! Он на server'е и запустил себе /bin/bash в которм может делать все что позволено его учётке

2. Блокируем учётку командой passwd -l user1
Но умный user1 задолго до этого сгенерировал себе ключевую пару закрытый/открытый ключ командой ssh-keygen на другом компе и добавил открытый ключ в файл /home/user1/.ssh/authorized_keys, например командой ssh-copy-id
И теперь при вводе:

user@host

$ ssh user1@server /bin/bash ls -la <== команда в ssh-сессии (стандартного приглашения типа "$, #, %" нет) итого 192 drwxr-xr-x 10 user1 user1 4096 сен 30 2015 . drwxr-xr-x 5 root root 4096 ноя 7 2013 .. drwx------ 2 user1 user1 4096 сен 30 2015 .aptitude -rw------- 1 user1 user1 492 сен 30 2015 .bash_history -rw-r--r-- 1 user1 user1 220 ноя 7 2013 .bash_logout -rw-r--r-- 1 user1 user1 3392 ноя 7 2013 .bashrc drwxr-xr-x 6 user1 user1 4096 сен 30 2015 .cache drwxr-xr-x 11 user1 user1 4096 сен 30 2015 .config drwx------ 3 user1 user1 4096 сен 4 2015 .dbus drwx------ 2 user1 user1 4096 сен 30 2015 .gnupg -rw-r--r-- 1 user1 user1 415 сен 4 2015 .gtkrc-2.0 lrwxrwxrwx 1 user1 user1 22 сен 4 2015 .gtkrc-2.0-kde4 -> /home/user1/.gtkrc-2.0 drwx------ 3 user1 user1 4096 сен 4 2015 .kde drwxr-xr-x 3 user1 user1 4096 сен 4 2015 .local -rw-r--r-- 1 user1 user1 1107 ноя 7 2013 .mkshrc drwx------ 3 user1 user1 4096 сен 30 2015 .nv -rw-r--r-- 1 user1 user1 675 ноя 7 2013 .profile -rw------- 1 user1 user1 60 сен 30 2015 .Xauthority -rw------- 1 user1 user1 124858 сен 30 2015 .xsession-errors

Он авторизуется без ввода пароля по своему ключу и так же запустит себе BASH как приложение, в котором будет что-либо делать

3. Способ с выставлением срока годности учётки я уже описал выше, важно то, что получит пользователь при попытке войти:

user@host

$ ssh user1@localhost /bin/bash user1@localhost's password: Your account has expired; please contact your system administrator Connection closed by ::1


Вот и все.
А для "системных" пользователей 1й способ применяется по той причине, что у них нет ни домашнего каталога ни пароля (в большинстве случаев). Как-то так, надеюсь объяснил.

какая у вас ос? версия ssh и т.д. ибо уже нескоко человек не смогли повторить ваш пример у себя.
Спасибо сказали: