Я наткнулся на неожиданное (для меня) поведение разрешений во FreeBSD. Допустим, я работаю как пользователь без полномочий root . Я создаю файл, устанавливаю его разрешение только для чтения и затем пытаюсь записать в него:
$ touch f
$ chmod 400 f
$ ls -l f
-r-------- 1 user wheel f
$ echo a >> t
t: Permission denied.
Все идет нормально. Теперь я делаю то же самое, что и root, и он записывает в файл:
# ls -l f2
-r-------- 1 root wheel f2
# echo a >> f2
# echo $?
0
Это ошибка или предполагаемое поведение? Могу ли я с уверенностью предположить, что это будет работать на любом Unix и Linux?
files
permissions
root
arrowd
источник
источник
CAP_DAC_OVERRIDE
может сделать любой пользователь с . Почти на всех системах Linux это означает, что root может сделать это, поэтому это сделано намеренно. Не могу говорить о части FreeBSD, но я думаю, что у них похожая настройка.chmod
не может записать в файл.touch somefile; chmod 0000 somefile; chmod 0644 somefile
как обычный пользователь.Ответы:
Это нормально для
root
возможности переопределить разрешения таким способом.Другим примером является
root
возможность чтения файла без доступа для чтения:Некоторые системы имеют концепцию неизменяемых файлов. например, на FreeBSD:
Теперь даже
root
не могу записать в файл. Но, конечно,root
можно убрать флаг:С FreeBSD вы можете пойти дальше и установить флаг ядра, чтобы предотвратить его
root
удаление:Теперь никто, даже не
root
может изменить этот файл.(Систему необходимо перезагрузить, чтобы уменьшить уровень безопасности).
источник
chattr +i tst
устанавливается неизменный атрибут.Да, это очень нормально. root не имеет ограничений на чтение / запись (за очень небольшим исключением), потому что он является root.
источник