В стандартной файловой системе Linux, какие из этих общих каталогов доступны для записи по умолчанию ?
/tmp
/etc
/var
/proc
/bin
/boot
/....
....
Почему они написаны для всего мира? Это создает угрозу безопасности?
В стандартной файловой системе Linux, какие из этих общих каталогов доступны для записи по умолчанию ?
/tmp
/etc
/var
/proc
/bin
/boot
/....
....
Почему они написаны для всего мира? Это создает угрозу безопасности?
Ответы:
Единственные директивы, утвержденные FHS , которые обычно доступны для записи в мире, это /tmp
и /var/tmp
. В обоих случаях это потому, что они предназначены для хранения временных файлов, которые могут быть созданы кем-либо.
Также /dev/shm
, как и tmpfs (файловая система, поддерживаемая ОЗУ), часто используется для быстрого доступа к данным среднего размера, совместно используемым процессами, или просто для создания файлов, которые гарантированно будут уничтожены при перезагрузке.
Также могут быть /var/mail
или /var/spool/mail
, а иногда и другие каталоги спулера. Они используются для временного хранения почты до ее обработки. Они не всегда доступны для записи в мире, в зависимости от используемых инструментов. Когда они есть, это потому, что файлы могут быть созданы там пользовательскими инструментами для обработки демонами.
Все эти каталоги обычно имеют набор sticky bit ( t
), что означает, что только владелец файла или каталога может перемещать или удалять файлы в нем.
Любая программа, работающая от имени любого пользователя, может создавать файлы в этих каталогах, и сама программа-создатель должна делать правильные действия в том, что касается безопасности ее конкретных данных. Нет особой общей проблемы с безопасностью, кроме того, что кто-то потенциально заполняет файловую систему, но есть много возможностей для программы, чтобы она ошиблась.
Там были некоторые шаги в сторону конкретных /tmp
каталогов. Это позволяет избежать некоторых потенциальных ошибок, которые могут возникнуть, поэтому для программы не так важно быть без ошибок в том, как она использует каталог.
Вы можете найти в вашей системе доступные для записи каталоги с помощью:
find / -maxdepth 3 -type d -perm -777
/tmp
, /var/tmp
И /var/lock
всемирно-записываемые по умолчанию. Могут быть символические ссылки, такие как /usr/tmp
→ /var/tmp
, для совместимости со старыми приложениями.
/tmp
и /var/tmp
доступны для записи, потому что они предназначены для использования любым пользователем для любого временного хранилища. /var/lock
доступен для записи во всем мире, поэтому любой процесс, работающий от имени любого пользователя, может создавать файлы блокировки в центральном месте.
Есть ли риск безопасности? Нет, но вроде как да.
Разрешения для всех этих каталогов есть 1777
, с ведущим, 1
являющимся липким битом . Это означает, что, хотя любой пользователь может создать файл в этих каталогах, доступных для записи, только владелец может удалить свои собственные файлы (и, конечно же, пользователь root тоже).
Возможная угроза безопасности может возникнуть из-за небезопасного создания временного файла. Поскольку эти каталоги являются бесплатными для всех, пользователям необходимо принять меры предосторожности, чтобы убедиться, что создаваемые ими файлы действительно являются новыми файлами, вместо того, чтобы открывать существующий файл или символическую ссылку, которые могли быть установлены злонамеренным пользователем. Если файлы создаются с использованием надлежащих методов, таких как open(…, O_EXCL)
или mkstemp(3)
, то такого риска можно избежать.
/tmp
Это рискованно, потому что вам нужно добавить дополнительный код, чтобы использовать его безопасно. Очевидно, это упускается из виду.
Недавний пример дал Стив Кемп. http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html
./mgmt/tools/SysAPI.cc: tmp = fopen("/tmp/shadow", "w"); ./mgmt/tools/SysAPI.cc: system("/bin/mv -f /tmp/shadow /etc/shadow");
Если вы (атакующий) замените / tmp / shadow перед второй строкой, вы сможете заменить пароль каждого пользователя. (Я предполагаю, что атака требует, чтобы вы создали файл перед первой строкой и сделали файл доступным для записи).
Systemd в linux позволяет смягчить такие уязвимости, изолируя / tmp для многих системных служб. (За исключением тех, которые "неправильно используют / tmp как место для сокетов IPC и других примитивов связи").
В Fedora Linux - http://fedoraproject.org/wiki/Features/ServicesPrivateTmp
Системное объяснение - http://0pointer.de/blog/projects/security.html
fopen
он перезаписывает его, но не сбрасывает разрешения, поэтому злоумышленник все еще может вносить изменения. Кроме того, злонамеренный пользователь мог сделать что-то вроде ln -s /bin/bash /tmp/shadow
первой строки, чтобы существенный системный двоичный файл был перезаписан.
Чтобы найти всемирно доступные для записи каталоги, вы можете использовать
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
Для файлов измените тип на f
Для символических ссылок введите l
Чтобы установить липкий бит:
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t
/var/lock
→/run/lock