Почему ограничивают количество inodes, к которому может получить доступ пользователь?

Корень или некорневой, это - вопрос, локальный для Вашей машины. Это не изменяет то, что одноранговый узел получает с другой стороны соединения.

Если программное обеспечение, которое Вы используете для соединения, имеет серьезную уязвимость, которая позволяет удаленному серверу угонять Ваше приложение, то, открывая соединение, поскольку корень означает, что взломщик получит корневой процесс на Вашей машине. С другой стороны, если Вы открываете соединение как некорневой пользователь, затем взломщик получает некорневой процесс. Это не имеет значения очень на практике: если взломщик может выполнить произвольный код под Вашим UID (что Вы используете, чтобы сделать все на Вашей машине), то Вы обречены так или иначе.

Обычная молитва "не работает, поскольку корень" является частично функцией включения повреждения, но главным образом это - старые сведения со времен, где типичная система Unix использовалась десятками одновременных пользователей; это было мейнфреймовой моделью. Эта модель имеет ограниченную применимость для того, что мы делаем в наше время с машинами, которые являются фактическими системами отдельного пользователя. Необходимо все еще выполнить процесс как некорневой, если только ради Традиции (Традиция важна в мире Unix).

Если Вы действительно хотите эффективный слой изоляции, выполняете Ваш сетевой процесс в песочнице: a chroot среда, возможно виртуальная машина (это - то, что Qubes делает).

6
21.06.2014, 01:28
2 ответа

Причина Вы ограничиваете количество inodes пользователь, может получить доступ, так, они не заставляют систему в целом исчерпать inodes путем создания огромного количества 0-байтовых файлов.

С большинством файловых систем Linux (например, ext3 и ext4), каждый файл (включая файлы устройств) или каталог имеет inode - число раньше указывало на данный файл/каталог. Если система исчерпывает inodes, не имеет значения, сколько свободного пространства жесткий диск имеет; невозможно сделать новый файл, пока inodes не освобождены.

Для наблюдения, сколько оставил inodes каждая файловая система:

df -i

Количество inodes, который имеет файловая система, определяется -i аргумент при форматировании файловой системы. Примеры:

mkfs -t ext4 -i 1024 /dev/foo # One inode per 1024 bytes
mkfs -t ext4 -i 2048 /dev/foo # One inode per 2048 bytes
mkfs -t ext4 -i 8192 /dev/foo # One inode per 8192 bytes

Файловая система, созданная с -i 1024 опция будет иметь в восемь раз больше inodes, чем файловая система созданный с -i 8192 опция (принимающий обе системы файла тот же размер). Иногда, особенно с некоторыми почтовыми серверами (что использование "maildir") или олдскульные шпульки Usenet, каждому нужно больше inodes, так как те варианты использования создают много маленьких файлов.

Обратите внимание, что некоторые файловые системы Linux, такие как Reiserfs, могут динамично присвоить inodes и не создают всех их во время создания файловой системы.

9
27.01.2020, 20:23
  • 1
    Интересный. Если бы настолько легко определить номер inodes на байт, почему Вы не всегда определяли бы большой inode номер при создании файловых систем? –  spuder 05.02.2014, 08:03
  • 2
    ответа файловая система с большим количеством пространства, зарезервированного для inodes, будет иметь меньше пространства зарезервированным для файлов (у меня когда-то была шпулька Usenet с таким количеством inodes, файловая система имела на 30% меньше пространства, чем это иначе будет иметь) –  samiam 05.02.2014, 08:09

Несомненно, пользователь может заполнить диск одним действительно большим файлом, но это - только один вектор для насыщения файловой системы. Другой вектор является более тонким - можно насыщать количество доступного inodes. В этой ситуации df -h будет все еще выглядеть хорошо, но df -i сообщит, что Вы вне inodes (и Вы, вероятно, начнете читать много "никакого пространства, оставленного на устройстве").

$ df -i /
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/sda2      7266304 490108 6776196    7% /

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

Ограничения на размер файла и количество доступного inodes должны использоваться в тандеме.

4
27.01.2020, 20:23

Теги

Похожие вопросы