Сохраняйте файловые разрешения на dhcpd.leases после перезагрузки на Linux

У нас есть машина под Linux, на которой мы запускаем наше приложение .NET Core. Это приложение представляет собой веб-интерфейс, который используется для отображения и настройки системы EEPROM. Приложение читает файл dhcpd.leases, расположенный в каталоге /var/lib/dhcp, и отображает IP-адрес каждой EEPROM в пользовательском интерфейсе. Когда в систему добавляется новая EEPROM, ее IP-адрес добавляется в файл dhcpd.leases и таким образом отображается в пользовательском интерфейсе. Но когда EEPROM удаляется из системы, его IP-адрес не удаляется из файла dhcpd.leases и, таким образом, он продолжает отображаться в пользовательском интерфейсе. Мы хотим позволить пользователю иметь возможность удалить EEPROM из пользовательского интерфейса, когда он физически удален из системы. Когда пользователь удаляет EEPROM из пользовательского интерфейса, мы хотим, чтобы его IP-адрес был удален из dhcpd.leases, чтобы он больше не отображался. Это невозможно, так как разрешения по умолчанию на файл дают разрешение на чтение и запись только владельцу (владельца нет в списке), дают разрешение на чтение группе dhcpd и другим пользователям, и не дают разрешение на его выполнение. Выполнив команду sudo chmod 777 /var/lib/dhcp/dhcpd.leases, можно изменить разрешения на файл, и, таким образом, приложение сможет изменить файл так, как мы хотим. Однако, всякий раз, когда система перезагружается, разрешения на файлы возвращаются. Наша машина под Linux использует systemd службы для запуска приложения всякий раз, когда система запускается, поэтому я подумал, что создание systemd службы было бы лучшим способом гарантировать, что команда изменения разрешений на файлы будет выполнена при запуске системы. Я создал файл с именем dhcp.service в каталоге /etc/systemd/system, который выглядит следующим образом:

[Unit]  
Description=change dhcpd.leases permissions  

[Service]  
Type=oneshot  
WorkingDirectory=/var/lib/dhcp  
ExecStart=chmod 777 dhcpd.leases  
User=root  

[Install]  
WantedBy=multi-user.target

Затем я выполнил команду systemctl enable dhcp.service. Но даже после перезагрузки системы разрешения на файлы все равно не изменились. Я выполнил команду systemctl is enabled dhcp.service, которая вернула разрешение. Я также запустил journalctl -u dhcp.service, и журналы показали, что служба успешно работала, когда система была запущена. Когда я запустил systemctl -u dhcp.service, разрешения на файлы успешно изменятся. Эта служба работает так, как должна работать при запуске, но не тогда, когда она включена, несмотря на журналы, показывающие, что она работала успешно. Я попробовал подсказки из различных вопросов, размещенных здесь и на других сайтах биржи, но ничего не сработало, поэтому я решил поделиться своим конкретным сценарием. Как мы можем навсегда изменить файловые разрешения так, чтобы они не возвращались при перезагрузке системы?

1
задан 2 March 2021 в 19:56

2 ответа

Мы внесли изменения в нашу систему SystemD:

[Unit]
Description=change dhcpd.leases permissions
After=isc-dhcp-server.service

[Service]
Type=oneshot
WorkingDirectory=/var/lib/dhcp
ExecStartPre=/bin/sleep 30
ExecStart=chown -R whisker:whisker /var/lib/dhcp/
User=root

[Install]
WantedBy=multi-user.target

Это немного другой подход от того, что мы пытались раньше, но это лучший подход. CHMOD 777 опасен, так как он делает файл читаемый, письменный и исполняемый файл всех. Эта услуга вместо этого изменяет владельца файла, где у WISKER - это имя пользователя. Приложение работает как пользователь Whisker, поэтому теперь приложение может прочитать и записать файл DHCPD.LEALSELSEALES, который именно то, что мы хотим. Владелец всего каталога / var / lib / dhcp должен быть изменен в отличие от просто файла DHCPD.LEALSELSELSELS, согласно это . Из того, что мы поняли, файл DHCPD.LEALSELS ~, который имеет разрешения по умолчанию, перезаписывает файл DHCPD.LEALSELSELESS от Time-Time, включая разрешения, которые мы устанавливаем. Такое поведение может быть устранено путем изменения владельца каталога. В результате, когда система перезагружается, владелец файла не возвращается.

0
ответ дан 18 March 2021 в 23:29

Ваша проблема, вероятно, пользователь, используемый для запуска DHCP: файл принадлежит корнелю : root , но DHCPD, скорее всего, работает как DHCPD: DHCPD . Если так

/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

может быть изменено на

/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user root -group root --no-pid

, чтобы соответствовать владельцу: Группа / var / lib / dhcp .


Если нет: лучший способ, чем CHMOD 777, было бы изменение владения / var / lib / dhcpd к пользователю DHCPD . Таким образом Sudo Chown -R DHCPD: DHCPD / var / lib / dhcp каждый раз после начала deamon.

Я также рассмотрен ошибка, если это проблема. Редактировать: Redhat Исправлено его в 2012 году.


Также важно: Руководство состояния, файл очищается автоматически.

Для того, чтобы предотвратить растущую базу данных аренды, файл время от времени переписан. Во-первых, создана временная база данных аренды, и все известные аренды сбрасываются ему. Затем старая база данных аренды переименована /var/lib/dhcpd/dhcppd.lision~ . Наконец, вновь письменная база данных аренды перемещается на место

CONT имеет время аренды:

default-lease-time 600;
max-lease-time 7200;

Опускание тех, кто может исправить вашу проблему быстрее.


Как мы можем навсегда изменять разрешения на файл, чтобы они не вернулись, когда система перезагружается?

Это не перезагрузка; Это начало демона.

0
ответ дан 18 March 2021 в 23:29

Другие вопросы по тегам:

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