удаление разрешения на запись не препятствует записи root в файл

31

Я только что заметил на своей машине с Ubuntu (файловая система ext3), что удаление разрешений на запись из файла не удерживает root от записи в него.

Это общее правило разрешений файлов UNIX? Или специфичный для Ubuntu? Или неверная конфигурация на моей машине?

# Touch ABC
# chmod ugo-w abc
# питон
Python 2.6.4 (r264: 75706, 7 декабря 2009 г., 18:45:15) 
[GCC 4.4.1] на linux2
Введите «помощь», «авторское право», «кредиты» или «лицензия» для получения дополнительной информации.
>>> open ('abc', 'w'). write ('AAA \ n')
>>> 
# кошка азбука
AAA

Запись в файл не выполняется (как и ожидалось), если я делаю это из своей обычной учетной записи пользователя.

  1. Это нормальное поведение?

  2. Есть ли способ предотвратить случайную запись root в файл? (Желательно использовать обычные механизмы файловой системы, а не AppArmor и т. Д.)

Пожалуйста, научите меня чему-то, чего я совершенно точно не понимаю.

ПРИМЕЧАНИЕ. Я понимаю, что root имеет полный контроль над системой и может, например, изменять разрешения для любого файла. Мой вопрос заключается в том , применяются ли установленные в настоящее время разрешения для кода, работающего от имени пользователя root . Идея заключается в том, чтобы пользователь root не допустил случайной записи в файл.

ПРИМЕЧАНИЕ: я также понимаю, что для нормальной работы не следует входить в систему как root . Я только заметил это поведение и прошу вас об этом.

laramichaels
источник

Ответы:

46

1) Это нормальное поведение. root имеет постоянный доступ ко всем файлам.

2) Вы можете защитить файл даже от пользователя root (не намеренного действия, а случайного, в любом случае), используя

chattr +i filename.ext

То есть «изменить атрибуты добавить неизменным». Чтобы снять защиту:

chattr -i filename.ext

посмотрите на man chattrбольше информации

Brice
источник
@brice: большое спасибо. прямо на мой вопрос. не знал о чаттре.
laramichaels
моя система, кажется, нуждается в доступе root для запуска chattr. есть ли в пользовательском режиме средства для установки таких атрибутов?
Квик-кихот
1
... хотя это отличный ответ на вопрос, "может rootтак хорошо защитить файл, даже не может удалить его"!
шарлатан Кихота
4
Точнее (в случае Linux, в любом случае), root имеет CAP_DAC_OVERRIDEвозможность, позволяющую ему игнорировать ACL и разрешения.
Гравитация
1
К вашему сведению, эквивалент этого в OS X состоит в том, sudo chflags <s|u>chg <file>чтобы сделать его неизменным для системы или пользователя, соответственно, и sudo chflags no<s|u>chg <file>для снятия флага неизменности для системы или пользователя, соответственно.
GDP2
3
  1. Да, это нормально. Корень это бог.

  2. Да, есть способы предотвратить перезапись файлов пользователем root.

    • Установите неизменный бит с помощью chattr( +isets, -iUnsets). Требуется доступ с правами root, работает только на ext2 / ext3 (предположительно тоже на ext4), но в остальном практичен.
    • Не запускайте приложения как root. Нет корневых привилегий, нет перезаписи файлов. Используйте sudoдля доступа к системным функциям.
    • Размонтируйте файловую систему. Нет смонтированных файлов, нет перезаписи файлов. [*]
    • Выключите компьютер. Нет электричества, нет перезаписи файлов.

Эти методы логически следуют из # 1. Как вы можете видеть, последние два метода, как правило, бесполезны, так же как защита Windows от вирусов путем отключения от сети, как правило, бесполезна. Вот почему root опасен. [+]

[*] Конечно, не исключая возможность «случайной» записи непосредственно на блочное устройство. Да, root может сделать это. Да, вы можете предотвратить это: отключите устройство.

[+] Это также то, откуда берутся эти мифы о BOFH. Они не все мифы.

шарлатан
источник
@ ~ кря: метод Брайса гораздо более практичен, чем три, перечисленные вами. :)
laramichaels
@ ~ шарлатан: мой вопрос дал понять, что я понимаю проблемы с запуском команд от имени root.
laramichaels
3

Вы также можете ограничить доступ к файлам для пользователя root, используя ядро ​​Linux «Возможности»: http://www.securityfocus.com/infocus/1400

Существует также возможность использования SE-Linux или другого патча ядра, чтобы сделать некоторые файлы неизменяемыми даже для root.


источник
0

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

Так что нет, скорее всего, вы бы только деактивировали учетную запись root, чтобы предотвратить ее неправильное использование.

С уважением

[примечание к себе: вы будете скромны ... может быть, вы не правы]

dag729
источник