Книга: Linux глазами хакера

10.6. Гостевые учетные записи

10.6. Гостевые учетные записи

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

Для начала нужно создать новую учетную запись для пользователя, например robert_ftp. Для этого выполняем команду:

add robert_ftp

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

robert_ftp:x:507:507::/home/robert_ftp:/bin/bash

Классическая запись для нового пользователя. Но через нее можно входить в систему локально, а мы должны ограничиться только FTP-доступом. Изменим командную оболочку (shell) для этого пользователя на /bin/ftponly. Такой оболочки пока нет, и мы ее еще создадим чуть позже. Помимо этого, необходимо директорию /home/robert_ftp сделать корневой. Для этого нужно добавить в конце пути папку с именем в виде точки.

Отредактируйте соответствующим образом строку, и вы получите такой результат:

robert_ftp:x:507:507::/home/robert_ftp/.:/bin/ftponly

Обратите внимание, что в качестве командной оболочки указан файл /bin/ftponly, который не существует. Давайте его создадим. Это делается только один раз и потом используется всеми гостевыми учетными записями. Для создания файла можно воспользоваться командой cat:

cat >> /bin/ftponly

В ответ на это все команды, которые теперь будут вводиться в консоли, попадут в файл /bin/ftponly. Наберите следующий текст:

#! /bin/sh
echo 'You are not allowed to log in interactively'
exit 0

Для завершения ввода в файл нужно нажать сочетание клавиш <Ctrl>+<X>, и вы вернетесь в нормальный режим работы.

В файле /bin/ftponly у нас хранится всего две команды: первая выводит на экран эхо-сообщение о том, что нельзя входить в систему интерактивно, вторая — завершает сеанс.

Теперь необходимо сделать наш скрипт /bin/ftponly исполняемым. Для этого выполните команду:

chmod 755 /bin/ftponly

Итак, у нас создан файл командной оболочки и пользователь, который использует ее. Если сейчас попытаться войти в систему как пользователь robert_ftp, то на секунду появится сообщение "You are not allowed to log in interactively" и произойдет выход из системы. Таким образом, работать под учетной записью robert_ftp нельзя.

Вместо файла /bin/ftponly можно использовать в качестве командного интерпретатора /dev/null — нулевое устройство, которое не может обрабатывать команды и не позволит входить в систему под этой учетной записью. Оно определено в качестве консоли в файле /etc/passwd для всех системных учетных записей, которые не предназначены для локальной работы.

Теперь осталась самая малость — сказать серверу FTP, что пользователь с именем robert_ftp является гостем. Для этого в файл ftpaccess добавим строку:

guestuser robert_ftp

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

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

Для гостевых пользователей достаточно только ограничить доступ определенной директорией, а все остальное защитит сервер. Правда, и здесь иногда бывают проблемы. Рассмотрим классическую ошибку программистов. Допустим, что пользователю открыта директория /home/robert, и для обеспечения этого сервер банально проверяет, чтобы путь к каталогу начинался с этой строки. Хакер видит эту директорию как корневую (/) и выше подниматься не должен. Теперь посмотрите на следующую команду:

cat /home/robert/../../../../../etc/passwd

Она должна выводить на экран файл /home/robert/../../../../../etc/passwd, а на экране вы увидите содержимое /etc/passwd. С точки зрения проверки начала пути все записано верно, но после /home/robert идет множество символов "/..", каждый из которых заставляет передвинуться на уровень выше. Хакер, не зная в какой папке он находится, может поставить такую комбинацию раз пять и, скорее всего, поднимется до корня, а потом переместится в системную папку /etc/passwd.

Несмотря на эту простоту, ошибка встречается довольно часто. А ведь программисту достаточно проверить адрес на вхождение в него символов двоеточия, и если они есть, то принять меры. В wu-ftp-сервере такой ошибки нет, но нет гарантии, что она не появится в будущем, когда выйдет обновление, в котором по случайности кто-то отключит проверку или удалит ее. Поверьте мне, такое иногда бывает с любым программным обеспечением, особенно если над ним работает целая команда, и нет контроля.

Оглавление книги


Генерация: 1.511. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз