Почему непривилегированный пользователь может выполнить 'синхронизирующую' команду?

Ваша система может иметь тот, уже доступный; недавним системам Linux на основе Glibc всегда монтировали tmpfs на /dev/shm.

Если Ваша система не имеет один, или это является слишком маленьким, то файловая система, не смонтированная корнем в значительной степени, означает FUSE. На Ubuntu необходимо быть в fuse группа для использования FUSE. Просматривая доступные файловые системы FUSE, я вижу только Ramfuse, от которого, к сожалению, отказываются в восходящем направлении.

11
16.06.2018, 23:14
2 ответа

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

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

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

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

Если Вы действительно хотите предотвратить пользователей для выполнения синхронизации в системе, можно просто выполнить эти команды:

mv /bin/sync /bin/.sync
ln /bin/true /bin/sync

Это в основном было бы не замечено пользователями и не имеет никаких отрицательных эффектов кроме с людьми, которые просто работают, синхронизация затем удаляют устройства хранения (например: карта флэш-памяти usb), не размонтировав их, но этих пользователей уже действовали по-дурацки так или иначе.

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

16
27.01.2020, 19:57
  • 1
    @jippie Весь sync двоичный файл делает звонить sync() функция, таким образом (как Bonsi Scott сказал), что Вы действительно спрашиваете, то, почему ядро позволяет непривилегированным пользователям звонить sync() –  Michael Mrozek♦ 02.12.2012, 02:06
  • 2
    @jippie я думаю, что Вы упускаете суть. Вся синхронизация когда-либо делает фиксировать (сразу) дисковым вещам, которые оказывались перед необходимостью фиксироваться так или иначе. Когда я иду для удаления флеш-накопителя, я хочу удостовериться, что все, что я записал в него на самом деле, было записано. И, в то время как umount, как предполагается, гарантирует это, меня не уверяют, таким образом, я хочу (как пользователь) удостовериться, прежде чем я буду дергать его. Нет НИКАКОГО ВРЕДА ВООБЩЕ в том, чтобы вынуждать систему сбросить буферы к диску. В худшем случае некоторые вещи изолированы в течение секунды, в то время как система активно сбрасывает буферы. Опасность была бы в отклонении пользователей этой функцией. –  killermist 02.12.2012, 03:11
  • 3
    @killermist: синхронизация не вызывает, просто предложив. Синхронизация могла бы возвратиться со статусом выхода успеха не сбросив, что-либо к диску, не говоря уже о самом диске могло бы также задержать записи под капотом. В то время как я обычно совместно использую Windows мнения, пропускает необходимые функции, синхронизирующая команда была бы наименьшее количество моих проблем. –  jlliagre 02.12.2012, 03:23
  • 4
    @killermist @jippie корректен. Необходимо лучше доверять umount, который, безотносительно ОС, всегда сбрасывает буферы (если диска не не стало...) вместо sync который, как гарантируют, не сделает это в зависимости от ОС. Отметьте тот Linux sync ожидает сброса, чтобы быть эффективным, так может доверяться также. –  jlliagre 02.12.2012, 11:44
  • 5
    linux.die.net/man/2/sync-> Согласно стандартной спецификации (например, POSIX.1-2001), синхронизация () планирует записи, но может возвратиться, прежде чем фактические записи делаются. Однако начиная с версии 1.3.20 Linux действительно на самом деле ожидает. (Это все еще не гарантирует целостность данных: современные диски имеют большие кэши.) –  Bonsi Scott 02.12.2012, 11:57

sync не может делать ничего плохого к системе. Это может замедлить его, но не больше, чем запущение программ тот доступ диск. Почему это должно быть ограничено?

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

Операционные системы задерживают записи на диск для эффективности. Они не могут знать, когда для приложения действительно нужна запись для случая. Таким образом, приложениям дают способ сказать операционной системе писать теперь, с sync(1) и sync(2) и fsync(2).

5
27.01.2020, 19:57

Теги

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