.NET Core 애플리케이션을 실행하는 Linux 머신이 있습니다. 이 애플리케이션은 EEPROM 시스템을 표시하고 구성하는 데 사용되는 웹 UI입니다. 애플리케이션은 /var/lib/dhcp 디렉터리에 있는 dhcpd.leases 파일을 읽고 각 EEPROM의 IP 주소를 UI에 표시합니다. 새 EEPROM이 시스템에 추가되면 해당 IP 주소가 dhcpd.leases 파일에 추가되어 UI에 표시됩니다. 그러나 EEPROM이 시스템에서 제거되면 IP 주소가 dhcpd.leases 파일에서 제거되지 않으므로 UI에 계속 표시됩니다. 우리는 사용자가 EEPROM을 시스템에서 물리적으로 제거한 후 UI에서 제거할 수 있도록 하려고 합니다. 사용자가 UI에서 EEPROM을 제거하면 dhcpd.leases에서 IP 주소를 제거하여 다시 표시되지 않도록 하려고 합니다. 파일에 대한 기본 권한은 소유자에게 읽기 및 쓰기 권한만 부여하고(소유자가 나열되지 않음) dhcpd 그룹 및 다른 사용자에게 읽기 전용 권한을 부여하며 실행을 허용하지 않기 때문에 이는 불가능합니다. 명령을 실행하면 sudo chmod 777 /var/lib/dhcp/dhcpd.leases
응용 프로그램이 필요에 따라 파일을 수정할 수 있도록 파일 권한이 변경될 수 있습니다. 그러나 시스템이 다시 시작될 때마다 파일 권한이 복원됩니다. 우리 Linux 상자는 systemd 서비스를 사용하여 시스템 시작 시 응용 프로그램을 시작하므로 systemd 서비스를 만드는 것이 시스템 시작 시 파일 권한을 변경하는 명령이 실행되도록 하는 가장 좋은 방법이라고 생각했습니다. 다음과 같이 /etc/systemd/system 디렉터리에 dhcp.service라는 파일을 만들었습니다.
[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 start dhcp.service
파일 권한이 성공적으로 변경됩니다. 서비스가 시작되면 제대로 작동하지만 활성화되면 서비스가 성공적으로 실행되고 있다고 표시되지만 활성화되면 작동하지 않습니다. 이곳과 다른 교류 사이트에 올라온 다양한 질문을 통해 팁을 시도해 보았지만 아무 효과가 없었기 때문에 구체적인 시나리오를 공유해야겠다고 생각했습니다. 시스템이 재부팅될 때 파일 권한이 다시 표시되지 않도록 파일 권한을 어떻게 영구적으로 변경합니까?
답변1
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은 모든 사람이 파일을 읽고, 쓰고, 실행할 수 있도록 허용하므로 위험합니다. 서비스는 파일 소유자를 변경합니다. 여기서 mustache는 사용자 이름입니다. 애플리케이션은 사용자 콧수염으로 실행되므로 이제 애플리케이션은 우리가 원하는 dhcpd.leases 파일을 읽고 쓸 수 있습니다. dhcpd.leases 파일의 소유자뿐만 아니라 전체 /var/lib/dhcp 디렉토리의 소유자를 변경해야 합니다.이것. 우리는 기본 권한이 있는 dhcpd.leases~ 파일이 우리가 설정한 권한을 포함하여 때때로 dhcpd.leases 파일을 덮어쓴다는 것을 알고 있습니다. 이 동작은 디렉터리 소유자를 변경하여 제거할 수 있습니다. 따라서 시스템을 다시 시작해도 파일 소유자가 복원되지 않습니다.