Linux глазами хакера - Михаил Флёнов
Шрифт:
Интервал:
Закладка:
□ MAIL_DIR — директория, в которой будет храниться почта пользователей;
□ PASS_MAX_DAYS — максимальный срок жизни пароля;
□ PASS_MIN_DAYS — минимальный срок жизни пароля;
□ PASS_MIN_LEN — минимальная длина пароля (используется только в команде passwd и игнорируется в useradd). В большинстве дистрибутивов здесь будет стоять 5. Я рекомендую поменять его на число 8. В этом случае нельзя будет установить любимый большинством пользователей пароль типа qwerty;
□ PASS_WARN_AGE — срок (в днях) до окончания действия пароля, когда об этом нужно предупредить пользователя;
□ UID_MIN — минимальный идентификатор пользовательских учетных записей;
□ UID_MAX — максимальный идентификатор пользовательских учетных записей;
□ GID_MIN — минимальный идентификатор пользовательских групп;
□ GID_MAX — максимальный идентификатор пользовательских групп;
□ CREATE_HOME — признак создания пользовательской директории (значение параметра YES, стоит по умолчанию).
4.3.6. Взлом паролей
Я еще раз хочу напомнить о недопустимости использования простых паролей не только для администратора, но и для всех пользователей системы. Если проследить за уязвимостями, которые находят в Linux-системах, то очень часто можно увидеть сплоиты, которые позволяют повысить права хакера от простого пользователя до root. Если взломщик не сможет получить доступ даже в качестве простого пользователя, то и воспользоваться сплоитом будет невозможно.
Сложные пароли должны быть абсолютно у всех пользователей. Если хакер получит доступ к файлу /etc/shadow с 1000 записями, то подбор паролей весьма упрощается. Вспомните, как хранятся пароли. Они зашифрованы необратимым образом. Это значит, что при простом переборе каждый возможный вариант тоже шифруется, а потом сравнивается с результатом из файла /etc/shadow. За счет того, что кодирование отнимает достаточно много процессорного времени, сопоставление становится слишком продолжительным.
Подбирать сложно, если вы сравниваете только с одной записью. А если в системе 1000 пользователей, то достаточно один раз зашифровать возможный вариант пароля и потом соотнести его с 1000 записями в файле паролей. Вероятность попадания увеличивается в несколько раз и подбор упрощается.
Когда хакеры получают файл /etc/shadow, то первым делом запускается проверка всех записей, в которых имя пользователя и пароль одинаковы. Вы не поверите, но такое встречается очень часто, и если файл паролей большой, то с вероятностью 0,9 можно сказать, что хакер найдет такую запись.
Если это не помогло, то в ход идет перебор всех часто используемых слов. Вот тут уже вероятность попадания близка к 100%, потому что из десяти пользователей один обязательно будет новичком и установит простой пароль. Вы должны проводить обучение каждого нового пользователя (в частности, по вопросу указания пароля) и самостоятельно запускать программу сопоставления паролей с часто используемыми словами. Если вам удалось подобрать, то хакер тем более сделает это.
4.4. Типичные ошибки распределения прав
Строгое распределение прав может значительно обезопасить систему. При правильной регламентации доступа большинство взломов могут оказаться неэффективными. Например, однажды в Интернете появилось сообщение, что один из сервисов ОС Linux содержит ошибку. Благодаря хорошему распределению прав мой сервер оказался защищенным от проникновения через эту дыру. Злоумышленник мог пробраться на сервер, но ничего изменить или удалить нельзя, потому что внешним пользователям этого сервиса все файлы открыты только для чтения.
Итак, если у вас хорошо настроены права доступа, то это может оказаться непреодолимой преградой для злоумышленника.
Давайте рассмотрим классический пример с файлами и каталогами. Допустим, что у вас на каталог поставлены максимальные права drwxrwxrwx (или 777), а на все файлы в нем — -rw-------. По идее, только владелец файла может его модифицировать, но это не совсем так. Да, злоумышленник не сможет изменить сам файл, но список документов в директории ему доступен (разрешены чтение и корректировка). Благодаря этому взломщик просто удалит нужный файл и создаст другой с новыми правами без каких-либо преград.
Чтобы этого не произошло, вы должны ограничивать доступ не только к файлам, но и каталогам.
Бывают случаи, когда директория должна иметь все права. Это открытые папки, через которые пользователи могут обмениваться файлами. Но при этом нужно защититься таким образом, чтобы только администратор или владелец файла могли его удалять. Все остальные пользователи не должны иметь прав на уничтожение уже существующих чужих файлов. Как же решить эту проблему, когда директорию необходимо сделать доступной всем, а ее содержимым должны управлять только хозяева?
Допустим, что у вас есть каталог shared. Для того чтобы в нем могли удалять файлы только владельцы, нужно установить для него sticky-бит. Это делается командой chmod с параметром +t:
chmod +t shared
Попробуйте выполнить команду ls -al и посмотреть права доступа к каталогу. Вы должны увидеть drwxrwxrwt. Обратите внимание, что на месте символа x для всех пользователей стоит "t". Как раз он и указывает на установленный sticky-бит. Теперь попробуйте удалить из этой директории файл, принадлежащий другому пользователю. Вы увидите сообщение "rm: cannot unlink 'имя файла': Operation not permitted".
Используйте этот бит на всех открытых папках. Некоторые хакеры, добравшись до диска и не обретя доступа к закрытой информации, начинают уничтожать все, что видят. С помощью sticky-бита взломщик сможет удалить только то, что создал сам, и ничего лишнего.
В Linux есть каталог /tmp, для которого как раз установлены права drwxrwxrwx, и в нем сохраняются временные данные всех пользователей. В современных дистрибутивах на этот каталог уже выставлен sticky-бит.
Проверьте, если в вашей системе это не так, то установите его самостоятельно, чтобы никто не смог удалить чужие временные файлы.
4.5. Привилегированные программы
В гл. 3 я уже намекал про существование еще двух битов доступа — SUID и SGID, и теперь пора с ними познакомиться поближе. Допустим, что пользователя необходимо ограничить в правах, чтобы он не натворил бед, но при этом дать возможность запускать программу, к которой требуется специальный доступ. В этом случае можно установить SUID-бит, тогда и программа сможет работать (от имени владельца), и у пользователя не будет лишних привилегий.
SUID-бит можно установить командой chmod с параметром u+s:
chmod u+s progname
Если теперь просмотреть права доступа к файлу, то они превратятся в -rwsr-xr-x. Как видите, появилась буква "s" на том месте, где должно быть разрешение на запуск (символ "x") для владельца файла.
Бит SGID похож на SUID, но он позволяет запускать программу с правами группы владельца файла. Этот бит устанавливается подобным образом командой chmod с параметром g+s:
chmod g+s progname
В этом случае права доступа к файлу будут -rwxr-sr-x. Вместо символа "x" (право на запуск для группы владельца файла) появилась буква "s".
Привилегии SUID и GUID достаточно удобны и полезны, но, с другой стороны, они таят в себе очень много проблем. Например, гость, обладающий минимальными правами, запускает программу с установленным битом SUID, владельцем которой является пользователь root. Это значит, что программа будет работать с правами root, а не гостевыми параметрами пользователя. Если в ней окажется ошибка, через которую можно выполнять команды на сервере, то эти директивы будут реализовываться от имени владельца программы, т.е. root. Таким образом, даже если взломщик сам не имеет возможности претворять в жизнь команды, то через привилегированную программу сможет получить доступ к запрещенной области.
Биты SUID и GUID нужно использовать аккуратно, и в любом случае владельцем программ не должен быть root или другой привилегированный пользователь. Лучше, если это будет специально заведенная для этой программы учетная запись, которая обладает только теми правами, которые необходимы пользователю.
Рассмотрим еще один пример. Допустим, гость не должен иметь прямого доступа к каталогу /home/someone, а для работы программы он необходим. Чтобы не открывать ему лишних возможностей, нужно завести отдельного пользователя с правами доступа на каталог /home/someone, сделать его владельцем программы и установить бит SUID. Если в программе будет найдена ошибка, то взломщик получит доступ к /home/someone, но все остальные разделы диска останутся недоступными.