Yandex
Обновяване на предпочитанията за бисквитки

Как да ограничите даден потребител в Shell (SSH терминал) до определена директория

Тъй като сигурността е много важна в днешния цифров свят, ограничаването на достъпа до нашия сървър чрез SFTP помага да се сведат до минимум рисковете.

Ако не конфигурирате по правилния начин линукс сървър с достъп до 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 затвор, като използвате командата 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}20240813_C2woi5mG
  • Сега създайте файловете /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
20240813_NYvZsmhK

Ако искате да преобразувате идентификаторите на потребителите и групите в четливи низове, ще трябва да конфигурирате 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