Linux запретить пользователю выходить из домашней папки

Обновлено: 06.07.2024

Ограничение пользователя SSH домашней директорией

Ограничение пользователя SSH домашней директорией

Сделал небольшое обновление хостинга. Очень часто бывает удобно и производить файловые операции на сервере, например закачивать по одному долго и неудобно, снимать дамп баз данных и делать прочие действия. Давать для этого полноценный ssh не очень интерсно, потому что пользователь сможет бродить по моей системе и, если у меня где-то выставлены не совсем правильные права, сможет получить данные, которые он получать не должен. И опять комбинация встроенных средств unix-like помогает нам успешно решить эту задачу.

Будем делать ssh chroot. Создадим юзера: root обязательно должен быть владельцем домашней директории пользователя.
Теперь внизу конфига sshd /etc/ssh/sshd_config, определим индивидуальные настройки для пользователя: Ну и перечитываем конфиг: Теперь можно попробовать зайти под логином пользователя и понять, что ssh не работает. А не работает потому что никаких команд в системе нет, то есть можно использовать только sftp. Но мы хотим, чтобы был доступен терминал с необходимым для работы набором команд. Поэтому можно, как это принято в мире unix, пойти двумя путями: Подмонтируем все что нужно в фс пользователя: Но при таком подходе некоторые данные будут доступны, которые, пользователю знать не обязятельно. Например, команда df или ifconfig.

Поэтому можно четко определить, что минимально необходимо пользователю и создать жесткие ссылки. Но этот способ не будет работать, если используется более одного раздела, а используется почти всегда используется более одного раздела, потому что нужна кластеризация, удаленные фс и тому подобное, поэтому делаем директорию /home/chrootuser и туда скопируем необходимый набор команд. У меня он получился такой: Теперь мы получили некий аналог директории /etc/skel только у нас не файлы, которые будут в домашней директории, а скелет системы, которую увидит пользователь. Дальше воспользуемся специальной фс union: Эта, крайне полезная фс, которая позволяет представлять расположенные в разных местах данные, представлять в некой директории. Эта фс имеет очень много самых невероятных возможностей, но нам сейчас необходимо, чтобы внутри домашней директории пользователя появились необходимые команды, кроме того эти команды должны быть с аттрибутом "только чтение". В противном случае злоумышленник может произвести замену, уже общих для всех пользователей, системных файлов.
Отлично, теперь мы смогли войти в систему. Набор команд ограничен, все что необходимо конечный пользователь может делать. Самое важное, что все это выполнено при помощи встроенных средств, которые будут обновляться вместе с системой и не нужно отдельно следить за дополнительным ПО.

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

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

Боевая ничья: Запрет выхода из /home/ (права доступа)

Модератор: Bizdelnick

Боевая ничья: Запрет выхода из /home/

Может кто подскажет.
В Мандрейке есть возможность установить уровень защиты системы в целом.
Если выбрать уровень "повышеный", то пользователи немогут выходить из своиз каталогов.
А как можно это организовать на пониженом уровне? (не все работает нормально при зарезаных правах, да и логи раздуды ерундой)
Если выставит урезаные права на домашнюю папку, они всеравно могут выйти наверх (в корень)
Закрыть доступ для всех директорий в корне нельзя т.к. это нарушит работу служб.
Как быть? Ну, почитай в доках описание того, что делает Мандрива при переходе на более высокий уровень безопасности, и выбери, что из этого применить, а что нет.
Вообще-то, есть еще restricted bash. Посмотри.
Совершенно верно - у них совсем свое представление о безопасности.
Вопрос дистро-специфичный, число четно, день четный, переношу в соответствующий раздел.

Не. Это проблема (безопасности) *нуксов, а не мандрейка.
А что, никто "вручную" это не делал?

Документация Мандрейка на англицком

>>Вообще-то, есть еще restricted bash. Посмотри.
Спасибо. Хм, пока непонятно.

Не. Это проблема (безопасности) *нуксов, а не мандрейка.
Чего? Не выходил из своих каталогов?
Так ходят ногами обычно, не руками

Это непреодолимо?
А на лафоксе поглядеть? Там даже не на украинском.

2 alv
Ну не придирайся к словам. Все ведь понимают, что вопрос вот в чем:
Как запретить пользователям выходить из home?

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

-- Как называется болезнь когда всё время по телефону разговариваешь?
-- Техподдержка. сейчас искать нет нужды, но было бы интересно узнать.
Ну мне тем более нет нужды - это крайне неудобно, так было, например, в Убунту Даппер, если не ошибаюсь. Уже в следующей версии от этого отказались.
Но решение навскидку - приписать юзеров определенной группе, find'ом отловить все подкаталоги, начиная от корня, и поставить на них запрет исполнения именно и только для этой группы.

самый простой способ выполнить из под рута

При всем этом пользоваетель сможет выходить из своей дериктории но делать что либо вне ее и видить что либо кроме как в своей дериктори не сможет

"Нету смысла искать смысл там где нет ни какого смысла это бесмыслица ее все равно не осмыслить!" Burhan Haldun (Бесмысленые высказывания)

самый простой способ выполнить из под рута

Да, спасибо. Моя задача- любителей Виндовз ограничить в перемещении по корню через MC.
=====================
Для примера, вот мои листинги прав:
1. Всем разрешено гулять:
drwxr-xr-x 19 root adm 4096 Июн 13 12:30 ./
drwxr-xr-x 19 root adm 4096 Июн 13 12:30 ../
-rw-r--r-- 1 root root 0 Июн 13 12:30 .autofsck
drwxr-xr-x 2 root root 4096 Май 4 21:32 bin/
drwxr-xr-x 4 root root 1024 Июн 13 12:30 boot/
drwxr-xr-x 20 root root 3840 Июн 13 12:48 dev/
drwxr-xr-x 69 root root 4096 Июн 13 12:30 etc/
drwxr-xr-x 4 root root 4096 Май 4 23:42 home/
drwxr-xr-x 2 root root 4096 Май 4 21:38 initrd/
drwxr-xr-x 13 root root 4096 Июн 13 12:30 lib/
drwx------ 2 root root 4096 Май 4 21:01 lost+found/
drwxr-xr-x 9 root root 4096 Май 27 13:05 mnt/
drwxr-xr-x 2 root root 4096 Янв 5 2004 opt/
dr-xr-xr-x 80 root root 0 Июн 13 2007 proc/
drwx------ 17 root root 4096 Июн 13 12:49 root/
drwxr-xr-x 2 root root 4096 Май 23 22:48 sbin/
drwxr-xr-x 9 root root 0 Июн 13 2007 sys/
drwxrwxrwt 9 root root 240 Июн 13 12:48 tmp/
drwxr-xr-x 12 root root 4096 Май 5 00:00 usr/
drwxr-xr-x 16 root root 4096 Май 4 23:38 var/


2. Пользователи сидят дома:
drwxr-x--x 19 root adm 4096 Июн 13 12:30 ./
drwxr-x--x 19 root adm 4096 Июн 13 12:30 ../
-rw-r--r-- 1 root root 0 Июн 13 12:30 .autofsck
drwxr-x--x 2 root adm 4096 Май 4 21:32 bin/
drwx--x--- 4 root ctools 1024 Июн 13 12:30 boot/
drwx--x--x 20 root root 3840 Июн 13 12:48 dev/
drwx--x--x 69 root adm 4096 Июн 13 12:50 etc/
drwxr-x--x 4 root adm 4096 Май 4 23:42 home/
drwxr-xr-x 2 root root 4096 Май 4 21:38 initrd/
drwxr-x--x 13 root adm 4096 Июн 13 12:30 lib/
drwx------ 2 root root 4096 Май 4 21:01 lost+found/
drwxr-x--- 9 root adm 4096 Май 27 13:05 mnt/
drwxr-xr-x 2 root root 4096 Янв 5 2004 opt/
dr-xr-x--- 81 root adm 0 Июн 13 2007 proc/
drwx------ 17 root root 4096 Июн 13 12:49 root/
drwxr-x--x 2 root adm 4096 Май 23 22:48 sbin/
drwxr-xr-x 9 root root 0 Июн 13 2007 sys/
drwxrwx-wt 9 root adm 240 Июн 13 12:48 tmp/
drwxr-x--x 12 root adm 4096 Май 5 00:00 usr/
drwxr-xr-x 16 root root 4096 Май 4 23:38 var/

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

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

Прежде всего, я допускаю что OpenSSH уже установлен в системе.

Поэтому сразу же идем в редактирование настроек


Пролистываем до конца файла и дописываем следующие строки


Здесь уместно маленькое, но очень важное примечание.
Во-первых, владельцем всех директорий в пути, которые мы указываем в директиве ChrootDirectory должен быть root. В противном случае пользователь просто не сможет зайти по SFTP.
Во-вторых, эти директории не должны быть доступны для записи для каких-либо других пользователей.

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

Есть несколько вариантов. Здесь рассмотрим два из них.

Первый вариант: меняем владельца директории testuser на root и создаем поддиректорию, например public_html, владельцем которой будет уже наш пользователь testuser.


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

Второй вариант: в конфиграции SSH сервера указываем базовый путь к директории /home, владельцем которой в любом случае является root и она недоступна для записи другими пользователями.


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

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

Чтобы предотвратить это, от имени пользователя root запустите chmod 701 /home . Это, конечно, делает сам каталог /home «доступным для чтения / записи / выполнения» для корневого каталога, но только «выполняет» для всех остальных. /home по-прежнему доступен для cd , но пользователи не могут читать его содержимое - домашние папки других пользователей и, следовательно, имена пользователей.

Мне нужно было предоставить доступ пользователю sam только на /var/xyz и заблокировать список содержимого других папок внутри /var/

Я использовал следующую последовательность команд:

[ 118] Таким образом, пользователь может видеть каталоги, перечисленные в /var/ , но не может видеть содержимое в подкаталогах, кроме /var/xyz .

Сначала оцените ваше требование. Какую проблему вы пытаетесь решить? Почему вы хотите запретить пользователям выходить из своего домашнего каталога? Разве это не то, что вы не хотите, чтобы они рылись в определенных других каталогах - таких как домашние каталоги других пользователей?

Очень трудно предотвратить выход пользователей. их домашний каталог. Это тоже немного глупо (объяснение следует). Намного проще запретить пользователям входить в каталоги, которые вы не хотите, чтобы они входили.

Прежде всего, да, вы можете дать пользователям так называемую ограниченную оболочку , см. man rbash . Это предотвратит их cd -нахождение в другом месте, но только внутри этой оболочки. Если пользователь запускает vi или nano (или любую другую программу, способную открыть файл), он может снова открыть файлы в любом месте системы. На самом деле, ограниченная оболочка не предотвращает, например, cat /etc/passwd . [Одна тысяча сто тридцать одна]

Следующий шаг - корневая тюрьма. Больше информации в сообществе вики и в этом вопросе . Хотя корневая тюрьма блокирует пользователей внутри огороженного сада, в котором они не имеют доступа ни к чему, кроме файлов и команд, которые вы намеренно поместили туда, корневые тюрьмы действительно предназначены для изоляции ненадежного программного обеспечения , а не пользователей. В частности, они предназначены для программного обеспечения, которое должно работать с повышенными привилегиями - отсюда root jail.

С другой стороны, пользователям доверяют : они должны были аутентифицировать и работать без повышенных привилегий. Следовательно, прав доступа к файлам достаточно, чтобы помешать им изменять файлы, которыми они не владеют, и видеть вещи, которые они не должны видеть. Чтобы запретить пользователям читать содержимое файла, удалите его удобочитаемость с помощью chmod o-r FILE . Чтобы пользователи не попадали в каталог, сделайте его недоступным для всего мира с помощью chmod o-rwx DIR .

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

Почему блокировать пользователей в их домашнем каталоге немного глупо

Чтобы сделать что-нибудь полезное, пользователям нужен доступ к командам и приложениям. Они находятся в каталогах, подобных /bin и /usr/bin , поэтому, если вы не скопируете все необходимые команды оттуда в свои домашние каталоги, пользователям потребуется доступ к /bin и /usr/bin . Но это только начало. Приложению требуются библиотеки из /usr/lib и /lib , которые, в свою очередь, нуждаются в доступе к системным ресурсам, которые находятся в /dev , и к файлам конфигурации в /etc и /usr/share .

Это была только часть только для чтения. Приложения также захотят /tmp и часто /var писать в. Итак, если вы хотите ограничить пользователя в его домашнем каталоге, вам придется много копировать в него. Фактически, почти вся базовая файловая система, которая у вас уже есть, расположена в / .


Представьте себе этот сценарий. Вы хотите разрешить пользователю выполнять только определенные задачи и выполнять определенные команды. Пользователь не должен изменять переменные / пути окружения. Он / она не может посещать другие каталоги, кроме своего домашнего каталога, и не может переключаться на других пользователей и т. Д. Пользователь может выполнять только несколько команд, назначенных системным администратором. Это возможно? Да! Здесь на помощь приходит Restricted Shell . Используя Restricted Shell, мы можем легко ограничить доступ пользователя к системе Linux. После того, как вы поместите пользователей в ограниченный режим оболочки, им разрешено выполнять только ограниченный набор команд. В этом кратком руководстве мы поговорим о том, как это сделать в Linux. Я тестировал это руководство на минимальном сервере CentOS 7. Однако он будет работать в большинстве Unix-подобных дистрибутивов.

Что такое Restricted Shell?

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

Ограничьте доступ пользователей к системе Linux с помощью оболочки с ограничениями

Сначала создайте символическую ссылку под названием rbash из Bash, как показано ниже. Следующие команды следует запускать от имени пользователя root .

Установите пароль для нового пользователя.

Создайте каталог bin внутри домашней папки нового пользователя.

Теперь нам нужно указать, какие команды может запускать пользователь.

Здесь я позволю пользователю запускать только команды «ls» , «mkdir» и «ping» . Вы можете назначить любые команды по вашему выбору.

Для этого выполните следующие команды:

Теперь вы понимаете, почему мы создали каталог bin на предыдущем шаге. Пользователи не могут запускать никакие команды, кроме трех вышеуказанных команд.

Затем запретите пользователю изменять .bash_profile .

Отредактируйте файл /home/infoit/.bash_profile :

Измените PATH как показано ниже.

Нажмите клавишу ESC и введите : wq, чтобы сохранить и закрыть файл.

Теперь, когда пользователь входит в систему, ограниченная оболочка (rbash) будет запускаться как оболочка входа по умолчанию и читать .bash_profile , который установит PATH в $HOME/bin, чтобы пользователь мог запускать только ls , mkdir и команды ping . Оболочка с ограничениями не позволяет пользователю изменять PATH , а разрешения на .bash_profile не позволяют пользователю изменять среду, чтобы обойти ограничения во время следующего сеанса входа в систему.

Проверка Rbash

Теперь выйдите из системы от имени пользователя root и снова войдите в систему с вновь созданным пользователем, в нашем случае с ostechnix.

Затем запустите несколько команд, чтобы проверить, работает он или нет. Например, я хочу очистить Терминал.

Для этого я запустил:

Sample output:

Вы не можете использовать команду cd для перехода в другой каталог.

Пример вывода:

Пример вывода:

Кроме этих трех команд, пользователь ничего не может выполнять. Он / она полностью под вашим контролем.

Разрешить пользователям новые команды

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

Например, чтобы позволить пользователю (т.е. ostechnix) выполнять команду rm , выполните следующую команду от имени пользователя root .

Теперь пользователь может использовать команду «rm».

Для получения дополнительных сведений см. Справочные страницы по приведенной ниже ссылке.

Читайте также: