읽기 전용 Yocto 파일 시스템에서 시스템 고정 IP 편집 허용

읽기 전용 Yocto 파일 시스템에서 시스템 고정 IP 편집 허용

내 시스템에 고정 IP를 설정하기 위해 systemd .network 구성 파일을 /etc/systemd/network에 복사하는 사용자 정의 레시피가 있습니다.

여러 장치가 동일한 네트워크에 연결될 수 있으므로 사용자가 시스템 IP 주소를 편집할 수 있기를 바랍니다.

내 이미지에는 읽기 전용 루트 파티션과 쓰기 가능한 기본 파티션이 있습니다. 내 생각은 /etc/systemd/network에 있는 .network 파일을 집에 있는 파일에 대한 링크로 만들어 사용자가 편집할 수 있도록 하는 것입니다(분명히 파일을 망치지 않는 원격 소프트웨어를 통해).

# ll /etc/systemd/network/20-wired.network
lrwxrwxrwx 1 root root 35 Sep 16 15:16 /etc/systemd/network/20-wired.network -> /home/root/systemd/20-wired.network*

링크된 파일의 권한입니다.

# ll /home/root/systemd/20-wired.network
-rwxrwxrwx 1 root root 107 Mar  9  2018 /home/root/systemd/20-wired.network*

안타깝게도 연결 트릭이 작동하지 않습니다.

# systemctl status systemd-networkd.service
* systemd-networkd.service - Network Service
         Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
         Active: active (running) since Fri 2022-09-16 15:19:31 UTC; 6min ago
TriggeredBy: * systemd-networkd.socket
             Docs: man:systemd-networkd.service(8)
     Main PID: 413 (systemd-network)
         Status: "Processing requests..."
            Tasks: 1 (limit: 520)
         Memory: 2.0M
         CGroup: /system.slice/systemd-networkd.service
                         `-413 /lib/systemd/systemd-networkd

Sep 16 15:19:31 imx8mpsolidrun systemd[1]: Starting Network Service...
Sep 16 15:19:31 imx8mpsolidrun systemd-networkd[413]: Failed to load /etc/systemd/network/20-wired.network, ignoring: Permission denied
Sep 16 15:19:31 imx8mpsolidrun systemd-networkd[413]: Enumeration completed
Sep 16 15:19:31 imx8mpsolidrun systemd[1]: Started Network Service.
Sep 16 15:19:31 imx8mpsolidrun systemd-networkd[413]: eth0: Link UP
Sep 16 15:19:36 imx8mpsolidrun systemd-networkd[413]: eth0: Gained carrier
Sep 16 15:19:37 imx8mpsolidrun systemd-networkd[413]: eth0: DHCPv4 address 10.0.10.240/24 via 10.0.10.1
Sep 16 15:19:37 imx8mpsolidrun systemd-networkd[413]: eth0: Gained IPv6LL

링크된 파일이 기본 파티션이 아닌 루트 파티션에 있는 경우 연결 트릭이 작동합니다. 하지만 그러면 다시 읽기 전용이 됩니다...

ProtectHome=yes나는 이것이 로 설정하고 주석을 달아 비활성화하려고 시도했지만 no지금 false까지는 행운이 없는 systemd-networkd 서비스 때문이라고 생각합니다 . 나는 또한 그것을 로 설정하려고 시도했지만 read-only여전히 ReadOnlyPaths=path/to/linked/file운이 없습니다.

어떻게 작동하게 만들 수 있는지 아시나요?

루트 파티션이 읽기 전용일 때 편집 가능한 고정 IP를 얻는 더 좋은 방법이 있습니까?

편집하다

추가 테스트를 해보니 실제로 파일 권한 액세스 문제인 것 같습니다.

ProtectHome=no파일 에 해당 파일이 필요하다는 것을 확인했습니다 systemd-networkd.service. 그렇지 않으면 서비스가 홈 디렉터리의 파일에 액세스할 수 없습니다.

모든 사용자의 집(예: /home/weston/)에 있는 파일은 systemd에서 액세스하고 사용할 수 있지만 /home/root전체 폴더에 대한 권한 설정 측면에서 그 안에 있는 파일에는 액세스할 수 없는 것으로 나타났습니다. 모든 폴더와 하위 폴더에 대해 0777 설정을 시도했지만 /home/root/systemd는 여전히 파일에 액세스할 수 없습니다. 실제로 systemd-network사용자는 구성 파일에 액세스할 수 없습니다.

파일 권한(두 파일 모두 누구나 읽을 수 있는 것으로 나타남)과 test결과는 다음과 같습니다.

# namei -l /home/root/20-wired.network 
f: /home/root/20-wired.network
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr--r-- root root root
-rw-r--r-- root root 20-wired.network
# sudo -u systemd-network test -r /home/root/20-wired.network; echo $?
1
# namei -l /home/weston/20-wired.network 
f: /home/weston/20-wired.network
drwxr-xr-x root   root   /
drwxr-xr-x root   root   home
drwxr-xr-x weston weston weston
-rw-r--r-- weston weston 20-wired.network
# sudo -u systemd-network test -r /home/weston/20-wired.network; echo $?
0

root접근 권한을 더 잘 조사해야 할 것 같네요...

관련 정보