Как да ограничите даден потребител в Shell (SSH терминал) до определена директория
Тъй като сигурността е много важна в днешния цифров свят, ограничаването на достъпа до нашия сървър чрез SFTP помага да се сведат до минимум рисковете.Ако не конфигурирате по правилния начин линукс сървър с достъп до SSH (secure shell), всеки потребител с акаунт в тази система може да влезе и евентуално да нанесе щети на вашия сървър.
Това, което можете да направите, е да ограничите достъпа на тези потребители до chroot jail. По този начин строго ограничавате достъпа на потребителите до вашата система, до определени файлове. Сега всеки потребител или група ssh потребители, които са ограничени от chroot jail, имат:
- Достъп до сървъра само чрез sftp
- Достъп само до определена директория
Всеки процес, стартиран след операцията chroot, има достъп само до новата главна директория и нейните поддиректории. Тази операция разговорно се нарича chroot jail (затвор за хроот), защото тези процеси не могат да четат или пишат извън новата главна директория.
За какво се използва chroot jail
Chroot jail се използва за създаване на ограничен „пясъчник“ за даден процес. Това означава, че процесът не може злонамерено да променя данни извън установеното дърво на директориите.
Друга употреба на chroot jail е за заместване на виртуални машини. Този метод се нарича виртуализация на ниво ядро и изисква по-малко ресурси от виртуалните машини. Тази операция позволява на потребителите да създават множество изолирани екземпляри в една система.
Стъпка 1: Създаване на SSH chroot jail
- Най-напред трябва да създадете chroot затвор, като използвате командата mkdir по-долу:
mkdir -p /home/test
mkdir - необходим за създаване на директория
- След това дефинирайте необходимите файлове. Според ръководната страница на 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. Обърнете внимание, че 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
Създайте обща директория за конфигуриране на затвор с хроот, /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
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/
След това проверете споделените библиотеки за горепосочените команди и ги преместете в директорията с хронотирани библиотеки на затвора:
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