|
1.
Файлы, доступные по чтению для всех
Обычные пользователи не должны иметь доступ к конфигурационным файлам или
паролям. Атакующий может украсть пароли к базе данных или веб-сайту и
использовать их для дефейса или даже хуже — для удаления файлов. Вот
почему важно правильно установить разрешения на файлы. Если вы уверены, что
определенный файл может использоваться только суперпользователем, установите
для него права 0600 и назначьте ему правильного владельца с помощью
chown.
1.
Файлы, доступные по записи для группы или для всех
Листинг 1.1: Поиск файлов, доступных по записи всем |
# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \; 2>/dev/null >writable.txt
# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \; 2>/dev/null >>writable.txt
|
Эти команды создадут огромный файл, содержащий имена файлов, которые имеют
права на запись для группы и всех остальных. Проверьте их и устраните ненужные
права, запустив для файлов команду /bin/chmod o-w.
1.
Файлы SUID/SGID
Файлы с битами SUID или SGID будут запущены с привелегиями владельца или
группы владельца, а не с привелегиями запустившего их пользователя. Обычно
это используется для файлов, которые должны запускаться с правами
суперпользователя для выполнения необходимых задач. Эти файлы, если содержат
уязвимости, могут стать источником повышения привелегий локальным
пользователем. Это может быть опасным, поэтому с подобных файлов необходимо
любой ценой удалить установленный бит SUID или SGID. Если вы не используете эти
файлы, запустите для них команду chmod 0 или удалите пакет, установивший
этот файл (проверить, какому пакету принадлежит определенный файл, можно с
помощью команды equery; если у вас ее еще нет, то, чтобы установить ее,
просто наберите emerge gentoolkit). Иначе просто удалите бит SUID с
помощью chmod -s.
Листинг 1.1: Поиск файлов с setuid |
# find / -type f \( -perm -004000 -o -perm -002000 \) -exec ls -lg {} \; 2>/dev/null >suidfiles.txt
|
Эта команда создаст файл, содержащий список всех SUID/SGID-файлов.
Листинг 1.1: Список файлов с setuid |
/bin/su
/bin/ping
/bin/mount
/bin/umount
/var/qmail/bin/qmail-queue
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/crontab
/usr/bin/chage
/usr/bin/expiry
/usr/bin/sperl5.6.1
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/procmail
/usr/bin/suidperl
/usr/lib/misc/pt_chown
/usr/sbin/unix_chkpwd
/usr/sbin/traceroute
/usr/sbin/pwdb_chkpwd
|
По умолчанию в Gentoo Linux не так много файлов с битом SUID (хотя это зависит
от типа вашей установки), но у вас может получиться список, представленный
выше. Большинство команд используется только суперпользователем. Удалите
SUID-бит с ping, mount, umount, chfn, chsh,
newgrp, suidperl, pt_chown и traceroute, запустив
для каждого из них chmod -s. Не удаляйте бит с su,
qmail-queue или unix_chkpwd. Удалив setuid с этих файлов, вы не
сможете стать суперпользователем и получать почту. Удаляя бит (там, где это
безопасно), вы исключаете возможность обычного пользователя (или
злоумышленника) получить права суперпользователя с помощью этих файлов.
В моей системе есть только несколько SUID-файлов: su, passwd,
gpasswd, qmail-queue, unix_chkpwd и pwdb_chkpwd.
Но если у вас запущен X-сервер, то в вашей системе их будет больше, так как X
нужны повышенные привелегии, которые могут быть предоставлены посредством SUID.
1.
SUID/SGID-файлы и жесткие ссылки
Файл может считаться удаленным лишь в том случае, когда нет больше ссылок,
указывающих на него. Это может звучать странно, но просто следует понять, что
файл (например, /usr/bin/perl) на самом деле является ссылкой на
inode, в котором сохранены данные. На файл может указывать любое число ссылок,
и пока каждая их них не будет удалена, файл будет существовать.
Если у ваших пользователей есть доступ к разделам, которые не смонтированы с
параметрами nosuid или noexec (например, если /tmp,
/home, /var/tmp не являются отдельными разделами), вы
должны удостовериться, что они не смогут создать жесткие ссылки на файлы с SUID-
или SGID-битами, благодаря чему они могут иметь доступ к устаревшим версиям
файлов.
Предупреждение:
Если вы получаете предупреждения об оставшихся жестких ссылках, а ваши
пользователи имеют доступ по записи к разделам, позволяющим запускать файлы
с SUID/SGID-битами, вы должны прочитать этот раздел очень внимательно. Любой
из ваших пользователей может разрушить ваши обновления, сохранив устаревшую
версию программы. Если ваши пользователи не могут создавать собственные файлы с
битом SUID или могут только запускать программы с помощью динамического
загрузчика (разделы, смонтированные с параметром noexec), то вам не о
чем беспокоиться.
|
Примечание:
Пользователям не нужен доступ по чтению для файла, чтобы создать на него
ссылку, им нужен всего лишь доступ по чтению к каталогу, содержащему этот файл.
|
Чтобы проверить, сколько ссылок имеет файл, вы можете использовать команду
stat.
Листинг 1.1: Команда stat |
$ stat /bin/su
File: `/bin/su'
Size: 29350 Blocks: 64 IO Block: 131072 regular file
Device: 900h/2304d Inode: 2057419 Links: 1
Access: (4711/-rws--x--x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2005-02-07 01:59:35.000000000 +0000
Modify: 2004-11-04 01:46:17.000000000 +0000
Change: 2004-11-04 01:46:17.000000000 +0000
|
Чтобы найти файлы с SUID и SGID со множеством ссылок, вы можете задействовать
команду find.
Листинг 1.1: Поиск suid/sgid-файлов с несколькими ссылками |
$ find / -type f \( -perm -004000 -o -perm -002000 \) -links +1 -ls
|
|