Как ограничить пользователя в Shell (терминал SSH) к определенному каталогу
Поскольку безопасность очень важна в современном цифровом мире, ограничение доступа к нашему серверу через SFTP помогает минимизировать риски.Если не настроить linux сервера с доступом SSH (secure shell ― безопасная оболочка) нужным образом, любой пользователь с учетной записью в этой системе может войти в систему и возможно нанести ущерб вашему серверу.
Что вы можете сделать, так это ограничить этих пользователей chroot jail. Тем самым вы строго ограничиваете доступ пользователей к вашей системе, к определенным файлам. Теперь любой пользователь или ssh группа пользователя, который ограничен chroot jail, имеет:
- Доступ к серверу только через sftp
- Доступ только к определенному каталогу
Операция chroot (сокращение от change root) - это операция Unix, которая изменяет видимый корневой каталог на указанный пользователем. Это отличное дополнение безопасности для ваших серверов Linux, что особенно важно, если на вашем сервере хранятся конфиденциальные данные и вы не хотите, чтобы пользователи даже просматривали эти файлы и папки.
Любой процесс, запущенный после операции chroot, имеет доступ только к новой корневой директории и ее поддиректориям. Эта операция в просторечии называется chroot jail, поскольку эти процессы не могут читать и писать за пределами нового корневого каталога.
Для чего используется chroot jail
Chroot jail используется для создания ограниченной "песочницы" для процесса. Это означает, что процесс не может злонамеренно изменять данные за пределами установленного дерева каталогов.
Еще одно применение chroot jail - замена виртуальных машин. Этот метод называется виртуализацией на уровне ядра и требует меньше ресурсов, чем виртуальные машины. Эта операция позволяет пользователям создавать несколько изолированных экземпляров на одной системе.
Шаг 1. Создайте SSH chroot jail
- Для начала необходимо создать chroot jail, воспользовавшись командой mkdir, приведенной ниже:
mkdir -p /home/test
mkdir − нужна с целью формирования директории- Затем определите необходимые файлы. Согласно man-странице sshd_config, опция ChrootDirectory указывает путь к каталогу, где будет производиться chroot после аутентификации. Каталог должен содержать необходимые файлы и каталоги для поддержки сеанса пользователя. Интерактивный сеанс должен иметь хотя бы одну оболочку, обычно sh, и базовые узлы /dev, такие как null, zero, stdin, stdout, stderr и tty устройства:
ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
- Теперь создайте файлы /dev следующим образом с помощью команды mknod.
mkdir -p /home/test/dev/
cd /home/test/dev/
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8
Если вы хотите перевести идентификаторы пользователей и групп в читаемые строки, вам нужно будет настроить NSS, скопировав следующие файлы в среду chroot:
- /etc/nsswitch.conf
- libnss_systemd.so
- libnss_files.so
- libcrypt.so
- Затем установите соответствующие ssh права пользователя на chroot jail. Обратите внимание, что chroot- и ее подкаталоги и подфайлы должны принадлежать пользователю root и не должны быть доступны для записи ни одному обычному пользователю или группе:
chown root:root /home/test
chmod 0755 /home/test
ls -ld /home/test
Шаг 2. Настройка интерактивной оболочки для SSH Chroot Jail
- Теперь впишите следующую команду, чтобы создать каталог bin:
mkdir -p /home/test/bin
- Затем скопируйте /bin/bash в /bin/ директорию с помощью команды cp:
cp -v /bin/bash /home/test/bin/
- Перед переходом в новый каталог необходимо включить команду bash. Для этого нужно скопировать командный файл и все связанные с ним библиотеки в новый корневой каталог.
Далее выделите bash-файлы, нужные для общих библиотек, согласно приведенному примеру и скопируйте их в директорию libdirectory:
ldd /bin/bash
mkdir -p /home/test/lib64
cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
Шаг 3. Создайте и настройте пользователя SSH
Создайте пользователя, используя команду useradd, который будет входить в среду chroot и поставьте для него надежный пароль:
useradd username
passwd username
Сформируйте общий каталог конфигурации chroot jail, /home/test/etc и скопируйте в него обновленные файлы учетных записей (/etc/passwd и /etc/group) следующим образом:
mkdir /home/test/etc
cp -vf /etc/{passwd,group} /home/test/etc
Важно помнить: если вы добавляете в систему новых пользователей SSH, то нужно будет копировать обновленные файлы учетных записей в каталог /home/test/etc.
Шаг 4. Настройте SSH для использования Chroot Jail
- Откройте файл sshd config
nano /etc/ssh/sshd_config
и внесите/замените следующие ниже строки в файле:
define username to apply chroot jail to
Match User username
specify chroot jail
ChrootDirectory /home/test
- Сохраните файл, закройте его и перезапустите службы SSHD:
systemctl restart sshd
В процессе запуска службы, сервер OpenSSH (sshd) считывает файл конфигурации.
Шаг 5: Проверка SSH с Chroot Jail
Теперь протестируйте с помощью SSH и убедитесь, что пользователь ограничен в возможностях выполнять внешние команды, такие как ls, date, uname и прочие:
ssh [email protected]
Пользователь имеет доступ только к bash и к его командам pwd, history, echo и т.д.
Шаг 6. Создайте домашний каталог пользователя SSH и добавьте команды Linux
На предыдущем шаге мы можем убедиться, что пользователь заблокирован в корневом каталоге, далее можем создать домашний каталог для пользователя SSH таким образом (так сделайте для всех будущих пользователей):
mkdir -p /home/test/home/username
chown -R username:username /home/test/home/username
chmod -R 0700 /home/test/home/username
После добавьте несколько пользовательских команд, таких как ls, date и mkdir, в каталог bin:
cp -v /bin/ls /home/test/bin/
cp -v /bin/date /home/test/bin/
cp -v /bin/mkdir /home/test/bin/
Затем проверьте общие библиотеки для указанных выше команд и переместите их в каталог chrooted jail libraries:
ldd /bin/ls
cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
Шаг 7. Проверка SFTP с помощью Chroot Jail
Выполните заключительный тест с использованием sftp и убедитесь, что только что установленные команды работают.
Внесите строку ниже в файл /etc/ssh/sshd_config:
Enable sftp to chrooted jail
ForceCommand internal-sftp
Сохраните файл и выйдите.
После следует перезапустить службы SSHD:
systemctl restart sshd
Теперь протестируйте с помощью SSH и вы получите следующий результат:
ssh [email protected]
Попробуйте применить SFTP как указано ниже:
sftp [email protected]
12 Aug 2024, 16:32:14