Книга: 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-сервере такой ошибки нет, но нет гарантии, что она не появится в будущем, когда выйдет обновление, в котором по случайности кто-то отключит проверку или удалит ее. Поверьте мне, такое иногда бывает с любым программным обеспечением, особенно если над ним работает целая команда, и нет контроля.
- 2. Пример создания базового отношения в записи на псевдокоде
- 3 Учетные записи пользователей
- ГЛАВА 8 Блокировки чтения-записи
- Как из-под учетной записи пользователя (без администраторских привилегий) включать и отключать оборудование и выполнять ...
- Практическая работа 21. Настройка учетной записи в почтовой программе
- Практическая работа 59. Создание новой учетной записи и изучение действующих разграничений доступа к файлам
- 1.11.3. Популярные записи
- Техника восстановления главной загрузочной записи
- Основные параметры новой записи
- Проект записи CD-ROM
- Листинг 10.3. Использование однонаправленного чтения-записи XML-данных для загрузки XML-документа из файла и его сохране...
- 4.7. Форсирование записи данных на диск