Как заключить в тюрьму пользователей, подключающихся по SSH

В нашем мире есть много-много секретов ... Я, честно говоря, не думаю, что смогу выучить достаточно, чтобы знать большинство из них, и это объясняется тем простым фактом, что Linux позволяет нам делать так много, но так много вещей, что нам трудно знать их все.

На этот раз я объясню вам, как сделать что-то чрезвычайно полезное, что-то, что нужно было сделать многим сетевым или системным администраторам, и им было трудно просто не найти довольно простой способ добиться этого:

Как ограничить пользователей, подключающихся через SSH

клетка? … Черт возьми!

Да. Если по какой-либо причине мы должны предоставить SSH доступ нашему другу к нашему компьютеру (или серверу), мы всегда должны заботиться о безопасности и стабильности нашего компьютера или сервера.

Бывает, что недавно мы хотели предоставить Персею SSH-доступ к нашему серверу, но мы не можем предоставить ему какой-либо доступ, потому что у нас есть действительно важные конфигурации (мы скомпилировали много вещей, пакетов, которые мы установили индивидуально и т. Независимо от того, пытаюсь ли я внести хоть малейшее изменение в сервер, есть вероятность, что все пойдет зря, хе-хе.

Тогда, Как создать пользователя с крайне ограниченными привилегиями, настолько, что он не может даже выйти из своей клетки (дома)?

Начнем со скачивания тюремщик, инструмент, который позволит нам сделать это:

Все следующие команды запускаются от имени root

1. Сначала мы должны загрузить наш сервер JailKit.

wget http://ftp.desdelinux.net/jailkit-2.14.tar.gz

2. Затем мы должны распаковать пакет и войти в только что появившуюся папку:

tar xzf jailkit-2.14.tar.gz && cd jailkit-2.14

3. Позже мы перешли к компиляции и установке программного обеспечения (Оставляю вам скриншот):

./configure
make
make install

. / Настроить

сделать

сделать установку

4. Готово, это уже установлено. Теперь мы переходим к созданию клетки, которая будет содержать будущих пользователей, в моем случае я создал ее в: / opt / и назвал ее "тюрьмой", поэтому путь будет следующим: / opt / jail :

mkdir /opt/jail
chown root:root /opt/jail

5. Клетка уже создана, но в ней нет всех необходимых инструментов, чтобы будущие пользователи, которые будут там, могли работать без проблем. Я имею в виду, что на данный момент клетка создана, но это просто пустой ящик. Теперь мы поместим в клетку некоторые инструменты, которые понадобятся пользователям в клетке:

jk_init -v /opt/jail basicshell
jk_init -v /opt/jail editors
jk_init -v /opt/jail extendedshell
jk_init -v /opt/jail netutils
jk_init -v /opt/jail ssh
jk_init -v /opt/jail sftp
jk_init -v /opt/jail jk_lsh

6. Готово, клетка существует, и в ней уже есть инструменты для использования пользователем ... теперь нам просто нужен ... пользователь! Создадим пользователя Кира и поместим в клетку:

adduser kira
jk_jailuser -m -j /opt/jail kira

Примечание. Выполните следующую команду в терминале, и она должна иметь результат, аналогичный показанному на снимке экрана:

cat /etc/passwd | grep jk_chroot

Если вы заметили, что ничего похожего на скриншот не появляется, значит, вы сделали что-то не так. Оставьте здесь комментарий, и я с радостью вам помогу.

7. И вуаля, пользователь уже в клетке ... но он ТАК в клетке, что не может подключиться по SSH, потому что, когда он пытается подключиться, сервер не позволяет ему:

8. Чтобы позволить пользователю подключиться, мы должны сделать еще один шаг.

Мы должны отредактировать файл etc / passwd клетки, то есть в этом случае это будет / opt / jail / etc / passwd , в нем мы комментируем созданную нами пользовательскую строку и добавляем новую, например:

Кира: х: 1003: 1003 :: / домой / Кира: / бен / баш

То есть у нас был бы такой файл ПАРОЛЬ:

корень: х: 0: 0: корень: / корень: / Bin / Баш
#kira: x: 1003: 1003: ,,,: / opt / jail /./ home / kira: / usr / sbin / jk_lsh
Кира: х: 1003: 1003 :: / домой / Кира: / бен / баш

Обратите внимание на повторяющиеся знаки препинания и другие, важно не ронять ни один из них 🙂

После этого пользователь может войти без проблем 😀

И это все.

Инструмент, который мы используем для всего этого (тюремщик) использовать в бэкэнде корневой, который фактически используется почти во всех руководствах. Однако с помощью JailKit становится проще запереть

Важно !: Это было проверено на Сжатие Debian (6) y Centos и это сработало в 100%, протестирован в Debian Wheezy (7), и он также работал, хотя и с небольшой детализацией: никнейм пользователя не отображается в ssh, но при этом не теряет никакой функциональности.

Если у кого-то возникла проблема или что-то не в порядке, оставьте как можно больше подробностей, я не считаю себя экспертом, но я помогу вам, чем смогу.


50 комментариев, оставьте свой

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   v3on сказал

    Так это было бы что-то вроде разрешений в FTP? интересно

    вы всегда придумываете все, о чем вы даже не подозревали, например, пользователи в mysql xD

    1.    КЗКГ ^ Гаара сказал

      Не совсем так, потому что SSH - это не то же самое, что FTP. SSH - это оболочка, то есть терминал ... вы были бы в терминале на другом компьютере или сервере, вы могли бы выполнять команды, запускать процессы и т.д ... вы бы делали столько, сколько позволяет администратор сервера

      ха-ха-ха-ха, да ладно, происходит то, что я публикую больше технических вещей ... то есть мне нравится публиковать мелочи, которые не так популярны и интересны. Например, я лично не планирую публиковать что-то в день выхода новой Ubuntu, потому что я считаю, что многие уже будут об этом говорить ... однако то, что вы читаете здесь, в посте, не является ли это тем, что читают каждый день или нет? 😀

      1.    Дамиан Ривера сказал

        Очень хороший вклад, спасибо

        также существует протокол sftp, который представляет собой ftp и Secure Shell вместе, хотя это не то же самое, что запуск FTP через SSH: \

        привет

        1.    КЗКГ ^ Гаара сказал

          Да, конечно, но, заключая SSH в клетку, я автоматически блокирую всех, кто подключается с помощью SFTP, потому что, как вы говорите, SFTP на самом деле SSH + FTP 😀

          привет

  2.   Жискар сказал

    Изображения не видно !!! 🙁

    1.    КЗКГ ^ Гаара сказал

      Моя маленькая ошибка хе-хе, скажи мне сейчас 😀

      1.    Жискар сказал

        Готов. Спасибо 😀

  3.   Ротс87 сказал

    очень хорошо, я указываю его на мои любимые, чтобы он был доступен, когда мне это нужно lol

    1.    КЗКГ ^ Гаара сказал

      Спасибо, любые вопросы или проблемы, мы здесь, чтобы помочь вам 🙂

  4.   Мануэль де ла Фуэнте сказал

    У них Персей в клетке. http://i.imgur.com/YjVv9.png

    1.    правильный сказал

      LOL
      xD

  5.   Хорхеманджаррезлерма сказал

    Как поживаете.

    Вы знаете, это тема, с которой я не очень хорошо знаком и которую я проверял в BSD (PC-BSD и Ghost BSD), и я нахожу ее очень интересной и с функциональными возможностями, которые могут быть очень полезными.

    Я собираюсь сохранить его для справки и сверить его с документом BSD. Спасибо за информацию.

    1.    КЗКГ ^ Гаара сказал

      Я тоже не был знаком с этим, потому что я никогда не думал предоставить кому-то SSH-доступ к любому из моих серверов, ха-ха, но когда я обнаружил необходимость это сделать, я хотел предоставить доступ, но без возможности того, что кто-то может что-то сделать по ошибке это не должно

      Я никогда не пробовал это в системах BSD, поэтому я не могу сказать вам, что это сработает, но если вы ищете, как выполнить chroot в BSD, что-то должно выйти 😉

      Спасибо за комментарий друг

      1.    Дамиан Ривера сказал

        Здравствуйте, я использую FreeBSD и конечно jailkit работает на самом деле в портах

        Вы устанавливаете его с помощью этой команды

        cd / usr / ports / shells / jailkit / && сделать установку чистой

        Или по ftp-пакету

        pkg_add -r джейлкит

        Только в конфигурации (kira: x: 1003: 1003 :: / home / kira: / bin / bash)

        Вам нужно добавить tcsh или sh, если вы не установили bash и добавить этот путь

        / USR / местные / бен / Баш

        И еще несколько деталей, в Ghost BSD аналогичный процесс должен быть еще проще, поскольку он основан на FreeBSD.

        привет

  6.   adiazc87 сказал

    Отлично, я это искал; вы знаете, работает ли он в Centos ?? Благодарю.

    1.    КЗКГ ^ Гаара сказал

      На Centos не тестировал, но да, должно работать :)
      На самом деле, я думаю, что помню, что некоторые использовали этот же инструмент на серверах Centos и Red Hat 😉

  7.   кибералехо17 сказал

    Большое спасибо. Он идет прямо в закладки.

    1.    КЗКГ ^ Гаара сказал

      Спасибо за комментарий 🙂

  8.   М. В. Альтамирано сказал

    Очень хороший «трюк», очень полезный для системных администраторов. Но даже лучше, отлично написано. Что еще тебе надо.
    Большое спасибо за вклад.

    1.    КЗКГ ^ Гаара сказал

      Спасибо, большое спасибо за ваш комментарий 😀
      привет

  9.   ЛиГНУксеро сказал

    Хвала SSH, ха-ха
    Однажды я попытался сделать клетку для ssh, но в традиционном стиле, и правда в том, что это так и не вышло правильно. Если клетка была запущена, у нее даже не было bash, то есть она подключилась, и ничего не осталось, ха-ха, если оболочка была запущена, она могла подняться в иерархии каталогов и еще много киломбо, ха-ха но этот джейлкит - булава, он автоматизирует все эти вещи ... Настоятельно рекомендуется

    1.    КЗКГ ^ Гаара сказал

      хаха спасибо.
      Да, на самом деле SSH - это чудо из-за того, что он позволяет нам, что на самом деле не более чем то, что позволяет система, так что ... ура Linux! … Ха-ха.

  10.   nwt_lazaro сказал

    Здравствуйте, вопрос!
    зачем менять дом с (1) / opt / jail /./ home / kira на (2) / home / kira

    Мы должны отредактировать файл etc / passwd клетки, то есть в данном случае это будет / opt / jail / etc / passwd, в нем мы комментируем созданную нами строку пользователя и добавляем новую, например:

    Кира: х: 1003: 1003 :: / домой / Кира: / бен / баш

    Другими словами, файл passwd будет выглядеть так:

    корень: х: 0: 0: корень: / корень: / Bin / Баш
    (1) #kira: x: 1003: 1003: ,,,: / opt / jail /./ home / kira: / usr / sbin / jk_lsh
    (2) kira: x: 1003: 1003 :: / home / kira: / bin / bash

    1.    КЗКГ ^ Гаара сказал

      Привет 🙂
      Если он не установлен, доступ по SSH не работает, пользователь пытается подключиться, но автоматически удаляется ... похоже, это ошибка или проблема с интерпретатором, который приносит JailKit, потому что при внесении этого изменения указывается, что он использует нормальная система bash, все работает.

      1.    Омар рамирез сказал

        Я все еще закрываю сеанс ssh: C
        Сьюз 10.1x64

  11.   Алекситу сказал

    Здравствуйте, я установил это, и он отлично работает в centos = D

    но мой дуа похож на назад, чтобы добавить больше команд, например, пользователю тюрьмы
    не могу запустить команду svn co http://pagina.com/carpeta

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

    1.    КЗКГ ^ Гаара сказал

      Привет, как дела
      Если вы хотите включить команду «svn» в джейле, у вас есть команда jk_cp
      То есть:
      jk_cp / opt / тюрьма / / bin / svn

      Предполагается, что двоичный или исполняемый файл svn: / bin / svn
      И пусть Cage / Jail будет: / opt / jail /

      Вы найдете команды, которые зависят от других, то есть, если вы добавите команду «pepe», вы увидите, что вы также должны добавить «federico», потому что «pepe» зависит от «federico», который будет выполняться, если вы найдете это, то вы добавляете нужные команды и уже 😉

      1.    Алекситу сказал

        Это отлично.

        1.    КЗКГ ^ Гаара сказал

          Удача 😀

  12.   Алекситу сказал

    Мне удалось сделать то, что вы мне сказали, но таким образом и автоматически он обнаружил меня без каких-либо проблем. Это была команда, которую я использовал для использования подрывной деятельности.

    jk_cp -j / home / jaul svn

    Ну я использую centos xP и может он другой но хороший
    теперь я хотел бы знать, какие библиотеки, такие как svn, но теперь я хотел бы скомпилировать, потому что, скажем, мне нужно использовать такую ​​команду

    ./ настроить и отметить ошибку

    ./configure.lineno: строка 434: expr: команда не найдена

    Я бы не знал, какие библиотеки я уже установил, что такое mysql и другие, если он компилируется вне тюрьмы, но не внутри jaui.

    Приносим извинения за доставленные неудобства.

    ps: вы должны поместить в руководство то, что я сказал вам о команде, используемой в centos =) привет.

    1.    КЗКГ ^ Гаара сказал

      Слушайте, когда я говорю вам, что он не может найти команду (как здесь), первым делом нужно найти команду:

      whereis expr

      Найдя (/ usr / bin / expr и / usr / bin / X11 / expr), мы копируем его в Jail с помощью jk_cp 😉
      Попробуйте это увидеть.

      Ага, я уже редактирую пост и добавляю, что он работает в Centos 😀

  13.   adiazc87 сказал

    Отлично! Большое спасибо (:

  14.   Иисус сказал

    Спасибо за вклад…

  15.   карма сказал

    Привет, как ты?

  16.   djfenixchile сказал

    Бля, чувак! Из Чили мои приветы. Ты такой же пердеж, как и я! СМЕШНО!. Объятия. Ваш пост мне очень помог!

    1.    КЗКГ ^ Гаара сказал

      Спасибо за комментарий 😀

  17.   Даниэль П.З. сказал

    Большое спасибо за пост, он мне очень помог, но, к сожалению, в части

    ////////////////////////////////////////////////// // //////////////////////////////////////////////// //// //////////////////////
    Мы должны отредактировать файл etc / passwd клетки, то есть в данном случае это будет / opt / jail / etc / passwd, в нем мы комментируем созданную нами строку пользователя и добавляем новую, например:

    Кира: х: 1003: 1003 :: / домой / Кира: / бен / баш

    Другими словами, файл passwd будет выглядеть так:

    корень: х: 0: 0: корень: / корень: / Bin / Баш
    #kira: x: 1003: 1003: ,,,: / opt / jail /./ home / kira: / usr / sbin / jk_lsh
    Кира: х: 1003: 1003 :: / домой / Кира: / бен / баш
    ////////////////////////////////////////////////// // //////////////////////////////////////////

    Это вызывает у меня ту же ошибку, я имею в виду, я оставляю ее как есть, и она загружает меня с терминала при подключении ,,, .., я комментирую строку и добавляю еще одну, изменяя ее, как вы указываете, а также загружает меня….

    Установите последнюю версию «jailkit-2.16.tar», даже создайте скрипт для экономии времени, вот ниже:

    ////////////////////////////////////////////////// //// //////////////////////////////////////////////
    #! / Bin / Баш
    Wget http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz
    tar -zxvf джейлкит-2.16.tar.gz
    компакт-диск jailkit-2.16
    . / Настроить
    сделать
    сделать установку
    выход
    ////////////////////////////////////////////////// //// /////////////////////////////

    Очевидно, сначала они входят в систему как "root" ...

    Как я мог решить ошибку друг ????

    1.    Даниэль П.З. сказал

      Извините, я уже получил, я ошибся с домашней папкой, но я очень сомневаюсь, как я могу заставить ее выполнять команду "screen", я пытаюсь ее использовать (в ограниченном пользователе) , но это не работает ... Другое дело, что, как мне заставить этого пользователя в клетке запускать программу Wine на exe, который он только что поместил в свой дом, как бы это было?

  18.   Леонель сказал

    привет очень хорошее туто! Я новичок в этой среде, у меня есть вопрос ...
    По поводу безопасности вижу, что в корне у него много папок, они нужны? Я просто хочу, чтобы у него был доступ к своей папке (ftp-upload и ssh-execute) для запуска приложения, какие папки он мог удалить из корня? или это не представляет для меня никакой опасности? Заранее ценю вашу помощь, привет!

  19.   КубаКрасный сказал

    @ KZKG ^ Гаара, слава богу, вы поставили хрипящую ошибку, но с версией jailkit-2.16.tar.gz, которую вы предложили, они исправили ее

    http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz

  20.   Алгабе сказал

    Я думаю, что передам это в PDF, jojo .. to cage и спасибо wn 😀

  21.   Самуил сказал

    Привет друг, у меня вопрос:

    Предположим, у нас есть пользователь с именем «test».

    Вопрос в том, что файл /home/test/.ssh/known_hosts, который находится в доме этого пользователя, совпадает с файлом пользователя или нет?

  22.   Ричард сказал

    Попробуй это. С помощью этого метода можно ограничить навигацию другим домом других пользователей.

  23.   ТЗБКР сказал

    Прежде всего, спасибо за пост! Мне это очень полезно; но у меня есть два сомнения, и они возникают из моего сценария:

    Мне нужно создать N пользователей с независимым и частным доступом к своему дому, каждый пользователь может получить доступ к своему дому только для хранения, изменения и удаления содержащихся в нем файлов без необходимости переходить к другим (у меня уже есть этот пункт). Не требует доступа по ssh.

    1. Нужно ли создавать клетку для каждого пользователя или есть способ разместить разных пользователей в одной и той же клетке, но у каждого из них будет свой «личный» каталог?

    2. При доступе (через FTP-клиент) отображаются все каталоги, созданные инструментом, есть ли способ показать папку в чистом виде? Или я что-то не так сделал?

  24.   Эдуардл сказал

    Отличный учебник! Это мне очень помогло, я тестирую его с версией 2.17 на Ubuntu 14.04, и он работает очень хорошо. Теперь у меня есть следующая задача: как только пользователь заключен в клетку и не может перейти по любому пути, я хочу, чтобы он мог видеть только содержимое файла, находящегося на другом пути. Я пробовал использовать символическую ссылку, но при попытке прикрепить к этому файлу хвост или кота он сообщает мне, что его не существует, хотя при доступе к пользователю я могу перечислить этот файл в доме клетки.

    Если бы вы могли мне помочь, я был бы очень признателен, заранее спасибо

  25.   Яс сказал

    Здравствуйте, я следил за всем руководством, и при входе в систему с помощью ssh он автоматически закрывается, следы:

    4 декабря, 19:20:09 toby sshd [27701]: принят пароль для теста от порта 172.16.60.22, 62009 ssh2.
    4 декабря, 19:20:09 toby sshd [27701]: pam_unix (sshd: session): сеанс открыт для пользовательского тестирования (uid = 0)
    4 декабря, 19:20:09 toby jk_chrootsh [27864]: теперь ввод jail / opt / jail для пользовательского теста (1004) с аргументами
    4 декабря, 19:20:09 toby sshd [27701]: pam_unix (sshd: session): сессия закрыта для пользовательского тестирования

    спасибо

  26.   Омар рамирез сказал

    Нет, когда я делаю последний шаг, предоставляя пользователю доступ по ssh, он все равно закрывает соединение

  27.   Benj сказал

    Можно ли от этого созданного пользователя перейти на root? ваш -корень? это не позволяет мне. Как бы это было? Спасибо за помощь

  28.   Slevin сказал

    Большое спасибо за учебник, он мне понадобился для создания пользователя, который мог бы использовать clonezilla для создания образа и копирования его на сторонний сервер, но который не мог роиться там, где он хотел

  29.   Mauro сказал

    Хорошо! Мне нужно кое-что знать.

    Можно ли войти как ROOT, используя FTP и имея эти разрешения, управлять им по FTP, а не по SSH? Скажем, например, создание соединения, стиль туннеля или что-то в этом роде. Как это делается? Настраиваете файл VSFTPD?

    Большое спасибо!