Рейтинг:2

странная безопасность файлов в Ubuntu 20.04

флаг ky

Ubuntu 20.04, формат раздела диска — EXT4. обычный пользователь с привилегиями sudo в каталоге tmp, например: ~/tmp/

$ sudo touch c.txt
// это создаст файл root-root(user-group) с режимом 644, как и ожидалось.
$ рм c.txt
$ rm: удалить защищенный от записи обычный пустой файл `c.txt'? // системная подсказка
если я выберу 'y', то c.txt будет удален! // НЕ так, как ожидалось.

Я даже пробовал rm непустой файл, все еще могу удалить!

Я попробовал два компьютера с Ubutnu 20.04, оба одинаковые.

почему обычный пользователь может удалить корневой файл без sudo?

Спасибо!

PS: После проверки документа на https://help.ubuntu.com/community/FilePermissions да, обычный пользователь может удалять любые файлы в полностью контролируемом каталоге (rwx=7), независимо от владельца файла и режимов. однако кажется, что это не должно применяться к операции модификации. например:

// ТС2
sudo vim d.txt // это создаст root-root (user-group) с режимом 644

vim d.txt   
// редактировать обычным пользователем, используйте w! сохранить в vim, 
// после выхода из vim содержимое файла изменилось и группа пользователей 
// изменена на текущую группу пользователей, а не на root-root.

Это как ожидалось?

chenzero avatar
флаг ky
это потому, что я являюсь владельцем каталога ~/tmp/, поэтому я могу управлять всеми файлами под ним, независимо от того, чьим владельцем является файл? Я проверю это с официальным документом ...
chenzero avatar
флаг ky
Вероятно, это какая-то непоследовательность в контроле прав доступа к файлам. Если я могу использовать шаги TC2 для изменения содержимого файла, владельца и группы, почему я не могу напрямую изменить файл с помощью команды chown? Я пробовал, если запустить $ chown chenzero d.txt в терминале, chown выведет: операция не разрешена.
Рейтинг:5
флаг cn

К удалять файл из каталога все, что вы разрешение в самом каталоге разрешения на этот файл не имеют значения. В вашем случае обычный пользователь имеет полное право доступа к каталогу, содержащему в нем файл. вы можете изменить его на неизменяемый, чтобы предотвратить его удаление: файл sudo chattr +i

ИЛИ ЖЕ:

sudo chmod o-w /path_to_directory

флаг au
Я думаю об этом так: права доступа к файлу применяются *к его содержимому*. Удаление, перемещение или переименование файла не затрагивают его содержимого, поэтому права доступа к нему не имеют значения; эти операции изменяют содержимое каталога (и, при перемещении, каталог, в который он перемещается), поэтому требуется разрешение на запись в каталог(и). Когда вы «удаляете» файл, вы на самом деле просто удаляете («развязываете») его из каталога, и если для него не осталось записей в каталоге («ссылок»), он просто исчезает.
chenzero avatar
флаг ky
Спасибо, я пробовал этот случай: судо вим d.txt ; // это создаст файл root-root 644 vimd.txt ; // редактируем под обычным пользователем, даже подсказка vim редактирует файл только для чтения, я могу использовать w! для сохранения, и в результате обычный пользователь может изменить файл, принадлежащий root
TooTea avatar
флаг cn
@chenzero Это неправда. Обычный пользователь не может изменить файл, принадлежащий root, но обычный пользователь может заменить файл, принадлежащий root, новым файлом, принадлежащим этому пользователю, если это происходит в каталоге, доступном для записи для пользователя.
флаг st
@GordonDavisson: Именно так каталоги работают и в реальной жизни, и на самом деле *почему* Unix называет их каталогами, а не «папками», как это делают некоторые другие ОС. Если я хочу удалить вас из списка контактов моего телефона, в конце концов, мне не нужно вас убивать.Если я хочу удалить файл из папки, у меня должен быть физический доступ как к папке, так и к файлу внутри нее. Если я хочу удалить файл из каталога, все, что мне нужно, это доступ к каталогу, а затем я могу стереть или вычеркнуть запись.
chenzero avatar
флаг ky
@TooTea Я не вижу никакой разницы между заменой и изменением файла --- достигнут тот же результат, содержимое файла изменилось. Я действительно смущен тем, почему vim w! может изменить содержимое файла, владельца файла и группу? Пожалуйста, попробуйте TC2 в моем вопросе. Спасибо.
флаг au
@chenzero Проблема в том, что разрешения определяются с точки зрения операций на уровне файловой системы, а не того, какой эффект имеют эти операции. Замена и изменение файла имеют схожие результаты, но они сильно различаются с точки зрения того, какие операции с файловой системой задействованы, поэтому разрешения применяются по-разному между ними. IMO, проблема в том, что разрешения unix были разработаны экспертом по файловой системе, а не экспертом по безопасности, поэтому они имеют смысл с точки зрения операций с файловой системой, но не с точки зрения определения разумной политики безопасности.
raj avatar
флаг cn
raj
@chenzero На самом деле это из-за плохо спроектированного приложения, которое вместо **записи в существующий файл** для изменения его содержимого сначала **удаляет** файл, а затем **создает новый файл** с тем же имя в том же каталоге с новым содержимым. Для записи в существующий файл требуется разрешение на запись **в файл**; для удаления и создания файла требуется только разрешение на запись **в каталог**. Жаль, что многие приложения написаны таким образом...
raj avatar
флаг cn
raj
@chenzero Такое поведение приложения может иметь нежелательные побочные эффекты, например, если исходный файл был жестко связан более чем с одним каталогом. После того, как приложение заменит файл таким образом, оно больше не будет жестко связано с другими экземплярами. Так что этого делать не следует... но многие приложения все равно это делают.
флаг au
@raj `vim` на самом деле может сохранять в любом случае - обычно он перезаписывает существующий файл, но если он не может, он переключается в режим удаления и замены. Многие другие программы делают это, чтобы получить более почти атомарные сохранения: они сохраняют под временным именем, затем удаляют оригинал и переименовывают временную запись на его место; это позволяет избежать повреждения файла, если что-то пойдет не так при записи новой версии.
chenzero avatar
флаг ky
Спасибо за вашу помощь! Понял, хорошего дня :)
флаг bg
@raj, многие люди не согласятся с вами в том, что поведение, которое вы описываете, плохо спроектировано. Есть веские причины предпочесть его перезаписи исходного файла на месте.
Рейтинг:1
флаг ua

Каталог — это список файлов и подкаталогов (точнее, для каждой записи: имя файла или подкаталога, пользователь-владелец, группа-владелец, биты разрешений, расширенные разрешения, указатель на расположение на диске файла/подкаталога и дополнительные эзотерические метаданные). Каталог имеет владельца и группу. Разрешения каталога определяют, какие пользователи и какие пользователи читают, пишут и CD в этот каталог. Если вы хотите создать файл в каталоге, у вас должно быть разрешение на запись в каталог. Если вы хотите удалить файл из каталога, у вас должно быть разрешение на запись в каталог. Если вы хотите переименовать файл, у вас должно быть разрешение на запись в каталог. Если вы хотите изменить права доступа к файлу, у вас должно быть разрешение на запись в каталог. Все это модификации каталога, поэтому используйте разрешения каталога. (Есть исключения, связанные с расширенными разрешениями, которые я выделил здесь.)

В дальнейшем я буду продолжать писать «запись каталога, которую вы используете для доступа к нему», потому что может быть несколько записей каталога, следовательно, потенциально разные имена для файла в файловой системе. На самом деле, несколько записей в одном каталоге (обязательно с разными именами) могут указывать на один и тот же файл на диске, и разные записи могут иметь разных пользователей-владельцев, группу-владельцев и разрешения.

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

Итак, давайте поработаем на вашем примере.

  • Текущий рабочий каталог ~/tmp/, поэтому текущий пользователь является пользователем-владельцем, группой-владельцем и имеет права на чтение, запись и выполнение в каталоге.
  • sudo touch c.txt Это создает файл с владельцем пользователя корень имея права на чтение+запись, группа корень иметь права на запись и права на запись для других пользователей. (4 = чтение, 2 = запись, 1 = выполнение, 6 = 4+2 = чтение+запись)
  • рм c.txt имеет предупреждение/подсказку "rm: удалить защищенный от записи обычный пустой файл «c.txt»?" Это предупреждение означает: текущий пользователь имеет права на запись в текущий каталог, поэтому может удалить этот файл, но текущий пользователь имеет права только на чтение содержимого этого файла, что говорит о том, что текущий пользователь желает сохранить этот файл от изменений , Эти два намерения несовместимы, поэтому требуется дальнейшее руководство.
  • Выбирать у и c.txt удален. Да. У вас есть права на удаление записи из справочника, поэтому при ответе у, запись удаляется из каталога. Содержимое файла никогда не записывается и не выполняется (что запрещено разрешениями на запись в файл).

Ваш второй сценарий также работает, но не по той причине, которую вы ожидаете. вим и многие, многие другие редакторы (в том числе, в качестве случайного примера, Microsoft Word) не редактируют исходный файл. Они копируют файл, затем редактируют копию. Если правки не сохраняются, копию можно удалить. Если изменения сохраняются, исходный файл удаляется из каталога, а копия переименовывается в имя оригинала. Итак, давайте посмотрим, что произойдет.

мкдир тест
компакт-диск тест
ls -laF

всего 8
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 11:40 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 11:40 ../

Мы видим, что мой пользователь, нечеткий, и моя группа, нечеткий владеть текущим каталогом, ., и установлены разрешения 775 (пользователь нечеткий: rwx, группа нечеткий: rwx, другое: rx).

sudo vim d.txt
[укажите пароль]
[сеанс vim начинается]
[вставить режим]Привет.

Теперь давайте перейдем к другой оболочке и посмотрим, что происходит в каталоге.

[другая оболочка, не sudo...]
компакт-диск тест
ls -laF

всего 20
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 11:44 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 11:44 ../
-rw------- 1 root root 12288 31 окт 11:44 .d.txt.swp

Мы видим, что судо вим создал временный файл с именем .d.txt.swp с владельцами корень.корень и режим 600. Теперь вернитесь и сохраните файл в судо вим сессии и проверьте еще раз.

ls -laF

всего 12
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 11:48 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 11:48 ../
-rw-r--r-- 1 root root 4 31 окт 11:48 d.txt

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

[первая сессия, обратите внимание, не sudo...]
vim d.txt
[перейти к концу первой строки]
[добавить. предупрежден: «W10: Предупреждение: изменение файла только для чтения»]
[введите один пробел после «Привет».]

Как только мы добавили после Привет. временный файл vim появился в каталоге.

[вторая сессия]
ls -laF

всего 16
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 11:53 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 11:52 ../
-rw-r--r-- 1 root root 4 31 окт 11:48 d.txt
-rw------- 1 нечеткий нечеткий 4096 31 октября 11:53 .d.txt.swp

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

[Первая сессия]
[выйти из режима вставки]
[Выход]:ж
[ошибка получения: «E45: установлена ​​опция «только для чтения» (добавьте !, чтобы переопределить)»]

Это означает, что исходная запись каталога не имеет прав на запись для текущего пользователя, нечеткий. Обычно это имеет семантику, что файл не должен быть изменен, поэтому вим может учитывать эту семантику или переопределять ее (поскольку разрешения каталога позволяют нечеткий удалить д.текст запись и переименовать .d.txt.swp к д.текст). Какой ты хочешь?

[Первая сессия]
[Esc]:в!

Вы выбираете перезапись.

Давайте посмотрим, что сейчас происходит в каталоге.

[вторая сессия]
ls -laF

всего 28
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 12:01 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 12:00 ../
-rw-r--r-- 1 нечеткий нечеткий 5 31 окт 12:01 d.txt
-rw-r--r-- 1 fuzzy fuzzy 4 31 окт 11:48 d.txt~
-rw------- 1 нечеткий нечеткий 12288 31 окт 12:01 .d.txt.swp

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

Теперь есть три файла:

  • д.текст -- модифицированная версия, которую мы только что сохранили. Он содержит «Привет». Последующие сохранения заменят этот файл.
  • д.текст~-- резервная копия оригинального файла. Он содержит «Привет». Эта запись каталога была создана процессом, запущенным как нечеткий, так же нечеткийправа собственности и разрешения по умолчанию.
  • .d.txt.swp -- текущий рабочий файл. Последующие правки будут периодически автоматически сохраняться в этот файл.

Теперь давайте покончим с этим вим сессия.

[Первая сессия]
[Выход]: д

и снова посмотреть, что происходит в файловой системе.

[вторая сессия]
ls -laF

всего 16
drwxrwxr-x 2 нечеткий нечеткий 4096 31 октября 12:05 ./
drwxr-xr-x 78 нечеткий нечеткий 4096 31 октября 12:05 ../
-rw-r--r-- 1 нечеткий нечеткий 5 31 окт 12:01 d.txt
-rw-r--r-- 1 fuzzy fuzzy 4 31 окт 11:48 d.txt~

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

chenzero avatar
флаг ky
Спасибо за отличные подробные объяснения! Я понимаю, что vim работает, потому что он сначала удаляет файл и переименовывает резервную копию, а не напрямую изменяет исходный файл. Всем спасибо и хорошего дня!

Ответить или комментировать

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