Запрещено изменять файлы linux

«Защита от дурака» или как запретить изменение/удаление важных папок

Исторически так сложилось, что для своих мелких проектов держу виртуалку. Однако, так как я не использую ее ресурсы на 100%, решил не жадничать и пустил похоститься несколько друзей. Сайтов не много, деньги за хостинг не беру, поэтому ставить что-то вроде cpanel счел перебором. К тому же я их тех, кто предпочитает настраивать все вручную. Структуру выбрал следующую:

/home/hostuser/vhosts/sitename.ru/

И тут возник вопрос: как запретить пользователю удалять/переименовывать папки в sitename.ru? Если будет отсутствовать папка web, то и apache и nginx выдадут предупреждение, но все-равно загрузятся. Но если удалить/переместит папку logs, то и apache и nginx не запустятся из-за ошибки (по мне довольно странное поведение). Папка hostuser полностью принадлежит данному пользователю и его личной группе (hostuser:hostuser), а это означает, что при желании он сможет удалить любую внутреннюю папку/файл, даже если она будет принадлежать суперпользователю. Так как же запретить удаление/перемещение, чтобы пользователь (случайно или специально) не сломать весь хостинг?

После недолгого гугления решение было найдено. По мимо стандартных разрешений и acl, в файловых системах типа ext2, ext3, ext4 для файла можно выставлять дополнительные атрибуты. Подробней о всех атрибутах прочитать на Wiki, либо man chattr. Нас же интересует атрибут immutable. Данный атрибут для файла или папки может выставить только суперпользователь. Если назначит атрибут immutable на файл, то данный файл нельзя будет изменить или удалить (причем даже суперпользователь это не сможет сделать, пока не уберет данный атрибут). Если назначит атрибут immutable на папку, то данную папку нельзя будет удалить, а так же нельзя будет изменить структуру внутри нее. Тем самым получается, что если нам нужно защитить папку sitename.ru и структуру внутри нее, нам необходимо выполнить простую команду:

chattr +i /home/hostuser/vhosts/sitename.ru 

Для снятия атрибута необходимо использовать флаг -i.

Если же нужно защитить только одну папку (например, logs), можно поступить следующим образом:

touch /home/hostuser/vhosts/sitename.ru/logs/.keep chattr +i /home/hostuser/vhosts/sitename.ru/logs/.keep 

Собственно так можно поставить «защиту от дурака» (даже с правами суперпользователя).

Важно понимать, данная статья не об информационной безопасности. Замок на почтовом ящике — это информационная безопасность. Стекло на кнопке пожарной сигнализации — это защита от дурака.
Если создать файл .keep и дать ему атрибут -i, саму папку можно перенести и файл можно перенести. Нельзя удалить сам файл и структуру папок до этого файла.
Если вам требуется более надежный уровень безопасности, используйте атрибут immutable совместно с mount —bind. С помощью этой связки можно настроить защиту от намеренного изменения структуры.

Читайте также:  Linux executable files directory

Источник

unixforum.org

Команда chattr позволяет изменять параметры ФС для отдельного файла или директории:
chattr +a — только добавление данных (append-only), удаление и переименование запрещено;
chattr +i — запрещено удаление, изменение или переименование (immutable);
chattr +A — запретить сохранение данных о каждом обращении к файлу (no atime)
chattr +S — синхронное изменение всех данных на диск, без кэширования;
chattr +c — файл будет хранится на диске в сжатом виде (нужен отдельный патч для ядра);
chattr +s — после удаления файла, место на диске забивается нулями (внешний патч);
chattr +u — резервирование данных файла после удаления (внешний патч);

Пример:
chattr -R +i /bin /sbin /usr/bin /usr/sbin — запрещаем изменение бинарников
chattr +a /var/log/secure — предотвращаем модификацию лога злоумышленником

Для просмотра расширенных атрибутов используется утилита lsattr.

получаем:
stanislav@lexx4:/etc$ chattr +i resolv.conf
chattr: Неприменимый к данному устройству ioctl while reading flags on resolv.conf

смотрю свойства
stanislav@lexx4:/etc$ ls -l resolv.conf
-rw-r—r-T 1 root root 140 Дек 4 11:27 resolv.conf

создаём resolv.conf в Temp. пробуем
stanislav@lexx4:~/Temp$ ls -l resolv.conf
-rw-r—r— 1 stanislav stanislav 141 Дек 4 11:52 resolv.conf
stanislav@lexx4:~/Temp$ chattr +i resolv.conf
chattr: Неприменимый к данному устройству ioctl while reading flags on resolv.conf

а в чём собственно дело? как зафиксировать файл, если reiserfs ?

Re: запрет изменения файла

Сообщение sciko » 04.12.2009 12:23

Он русский и это многое объясняет.

Добавьте разделу attrs в опции монтирования.

Brainsburn Сообщения: 949 Статус: / ОС: LFS,Gentoo Контактная информация:

Re: запрет изменения файла

Сообщение Brainsburn » 04.12.2009 12:26

Poor Fred Сообщения: 1575 Статус: Pygoscelis papua ОС: Gentoo Linux, FreeBSD

Re: запрет изменения файла

Сообщение Poor Fred » 04.12.2009 12:27

Уже в который раз вижу, как люди пытаются заблочить /etc/resolv.conf. На кой? Разберитесь лучше с конфигом программы, которая его изменяет! Держу пари, что это клиент DHCP.

Re: запрет изменения файла

Уже в который раз вижу, как люди пытаются заблочить /etc/resolv.conf. На кой? Разберитесь лучше с конфигом программы, которая его изменяет! Держу пари, что это клиент DHCP.

Poor Fred Сообщения: 1575 Статус: Pygoscelis papua ОС: Gentoo Linux, FreeBSD

Re: запрет изменения файла

Сообщение Poor Fred » 04.12.2009 13:01

Эти люди, мягко говоря, не совсем компетентны (хотя я на звание гуру вовсе не претендую).

Рассказывай, что ты не хочешь, чтобы там менялось, а перед этим посмотри внимательно /etc/dhclient/dhclient.conf (если у тебя Дебиан или клон и если я не сильно ошибаюсь с именем файла)

Re: запрет изменения файла

Сообщение sciko » 04.12.2009 13:22

Re: запрет изменения файла

глянул и не понял ничего. хотя там почти всё закоментировано, но как то передаётся на скрипт /sbin/dhclient-script, который пересоздаёт /etc/resolv.conf

а смысл в том, что воткнул второй сетевой кабель в комп и всё вроде работает, но до перезагрузки. если в файле переписать (или заменить на рабочую копию), опять хорошо.
так бы и ладно, но проявилась ещё проблема. пишу sudo aptitude update в консоли — Ош ftp://ftp.debian-multimedia.org sid Release.gpg Не удалось найти IP адрес для ftp.debian-multimedia.org
хотя пинг проходит нормально.

Читайте также:  Как создать учетку linux

Poor Fred Сообщения: 1575 Статус: Pygoscelis papua ОС: Gentoo Linux, FreeBSD

Re: запрет изменения файла

Сообщение Poor Fred » 05.12.2009 07:02

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

Re: запрет изменения файла

2 сетевухи, 2 провайдера. 1- инет, 2-локалка.
всё прописано в /etc/network/interfaces
обе сетевые получают по dhcp
запросы и ответы идут правильно
при перезагрузке файл /etc/resolv.conf перезаписывается на dns-сервер 2 провайдера и инет не пашет.
вручную переписываю файл — инет опять есть, но aptitude не находит серверов, хотя пинг до них проходит.

Re: запрет изменения файла

Сообщение mailman137 » 05.12.2009 12:57

Имхо, можно попробовать применить для /etc/dhcp3/dhclient.conf вот эту директиву со значением false

The do-forward-updates statement

If you want to do DNS updates in the DHCP client script (see dhclient-script(8)) rather than having the DHCP client do the
update directly (for example, if you want to use SIG(0) authentication, which is not supported directly by the DHCP client, you
can instruct the client not to do the update using the do-forward-updates statement. Flag should be true if you want the DHCP
client to do the update, and false if you don’t want the DHCP client to do the update. By default, the DHCP client will do
the DNS update.

Poor Fred Сообщения: 1575 Статус: Pygoscelis papua ОС: Gentoo Linux, FreeBSD

Re: запрет изменения файла

Сообщение Poor Fred » 05.12.2009 13:31

Re: запрет изменения файла

Сообщение mailman137 » 05.12.2009 13:53

Poor Fred Сообщения: 1575 Статус: Pygoscelis papua ОС: Gentoo Linux, FreeBSD

Re: запрет изменения файла

Сообщение Poor Fred » 05.12.2009 14:37

Сейчас под рукой конфига нет, там еще какие-то директивы, но в общем — да.

По-моему там еще директивы, что отправлять серверу. Но в данном случае они вроде не нужны, если провайдер ничего такого не требует.

Re: запрет изменения файла

request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;

Poor Fred Сообщения: 1575 Статус: Pygoscelis papua ОС: Gentoo Linux, FreeBSD

Re: запрет изменения файла

Сообщение Poor Fred » 05.12.2009 15:46

request subnet-mask, broadcast-address, time-offset, routers, host-name, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers;

Достаточно будет, хотя не факт, что провайдер все эти данные дает. Но не помешают, во всяком случае. Минимум:

request subnet-mask, broadcast-address, routers,host-name; require subnet-mask, broadcast-address, routers;

Директива require задает что обязательно должно быть получено. Хотя сама она не обязательна. Как и строка

domain-name, domain-name-servers, domain-search — это как раз то, что в /etc/resolv.conf прописывается. В нем нужно предварительно прописать требуемые сервера.

Re: запрет изменения файла

request subnet-mask, broadcast-address, time-offset, routers, host-name, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers;

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

Poor Fred Сообщения: 1575 Статус: Pygoscelis papua ОС: Gentoo Linux, FreeBSD

Читайте также:  Linux function return exit

Re: запрет изменения файла

Сообщение Poor Fred » 06.12.2009 04:42

Поиграйся с опциями. Оставь минимальные запросы. Запускай вручную dhclient3 eth0 и смотри, когда и что изменяет resolv.conf. Почитай man dhclient.conf.

К примеру, вот мой конфиг (правда, на Фре):

# cat /etc/dhclient.conf interface "fxp0" < prepend domain-name-servers 127.0.0.1; prepend domain-name "mydomain"; request subnet-mask, broadcast-address, time-offset, routers, domain-name-servers; require subnet-mask, domain-name-servers; >lease

У меня свой DNS-сервер (а он уже форвардит к провайдерским) и свое имя хоста, поэтому мне не хотелось получать их от провайдера.

Re: запрет изменения файла

в принципе, пока не решился этот вопрос, может подскажете, что делать с аптитуде? напомню, что когда и инет и локалка есть и браузер обе сети видит и пинг до всего есть, аптитуде не может update сделать. пишет не вижу сервера. .

Re: запрет изменения файла

Сообщение mailman137 » 06.12.2009 14:59

Как подружить pppd и resolv.conf

Живу в общежитии с локальной сетью примерно на 2-3 тысячи машин. В сети так же имеется локальный DNS сервер и некоторое количество локальных ресурсов, для которых на этом DNS сервере существуют соответствующие записи. Подразумевается, что этот DNS сервер может ресолвить как внешние адреса, так и локальные. Выходом во «внешний мир» для меня служит VPN соединение провайдера, доступного в этой локальной сети. Проблема заключается в том, что после поднятия ppp интерфейса pppd перетирает глобальный /etc/resolv.conf своим, который содержит только две записи, полученные от провайдера и знать не знающие о наших локальных ресурсах.

Так как мне надоело каждый раз после поднятия ppp интерфейса вручную править /etc/resolv.conf, решил разобраться как заставить pppd не заменять этот файл своим.

Решение проблемы нашел только одно. Это убрать из файла настроек pppd (у меня это /etc/ppp/options) строку usepeerdns. Эта строка заставляет pppd запросить у провайдера адреса двух DNS серверов и передать их в скрипт /etc/ppp/ip-up в качестве переменных DNS1 и DNS2. Так же эта опция передает в этот же скрипт параметр USEPEERDNS со значением 1. После этого скрипт /etc/ppp/ip-up.d/0000usepeerdns перезаписывает файл /etc/resolv.conf своим, содержащим полученные адреса DNS серверов.

Poor Fred Сообщения: 1575 Статус: Pygoscelis papua ОС: Gentoo Linux, FreeBSD

Re: запрет изменения файла

Сообщение Poor Fred » 06.12.2009 16:53

в принципе, пока не решился этот вопрос, может подскажете, что делать с аптитуде? напомню, что когда и инет и локалка есть и браузер обе сети видит и пинг до всего есть, аптитуде не может update сделать. пишет не вижу сервера. .

Наверняка дело в неправильных маршрутах. Попробуй для начала пропинговать и протрассировать эти сервера, которых он не видит. Просмотри маршруты route -n. Доступны ли DNS-серверы, прописанные в resolv.conf?
Короче, так однозначно не скажешь, в чем проблема.

Re: запрет изменения файла

вобщем всё решилось изменением /etc/dhcp3/dhclient.conf на

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
send host-name «ionitcom.ru»;

prepend domain-name-servers 172.18.0.1, 172.18.1.1;

request subnet-mask, broadcast-address, time-offset, routers,
netbios-name-servers, netbios-scope, interface-mtu,
domain-name, domain-name-servers, domain-search, host-name,
rfc3442-classless-static-routes, ntp-servers;

т е он автоматом дописывает в /etc/resolv.conf то, что тому не хватает.

всё работает, только напрягает

Источник

Оцените статью
Adblock
detector