시스템 서비스 및 특정 사용자에게 기능 할당

시스템 서비스 및 특정 사용자에게 기능 할당

저는 기본적으로 루트 사용자가 있는 임베디드 시스템 장치를 개발 중입니다. call.service루트 액세스로 제대로 작동하는 시스템 서비스가 있습니다 . 서비스는 기본적으로 일부 소켓을 생성한 다음 네트워크 장치와 상호 작용합니다.

UserA이 서비스를 사용자에게 시작 하고 net_raw및 같은 기능을 제공하고 싶습니다 net_admin. 다음 유닛 파일을 작성했습니다.

file: /etc/systemd/system/multi-user.target.wants/call.service

[Unit]
Description=XXX call service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=userA
Group=userA
ExecStart=/opt/call/bin/call eth0 -P -1
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW
ExecStartPre=/bin/mkdir -p /tmp/call
ExecStartPre=/bin/chmod -R 755 /tmp/call
ExecStopPost=/bin/rm -rf /tmp/call

[Install]
WantedBy=multi-user.target


그러나 이 서비스를 시작하면 소켓 생성 중에 "작업이 허용되지 않습니다"라는 오류와 함께 실패합니다.

$ systemctl restart call

Dec 01 17:56:10 xxxx call[26955]: ERROR    : CALL [17:56:10:682] socket creation failed: Operation not permitted

오류에 해당하는 src 파일:

//file call.cpp
net_iface_l->sd_general = socket( PF_PACKET, SOCK_DGRAM, 0 );
    if( net_iface_l->sd_general == -1 ) {
        LOG_ERROR( "socket creation failed: %s", strerror(errno));
        return false;
    }

사용자가 생성하거나 정의한 함수에 버그가 있으면 누군가 지적할 수 있나요? 여기 사용자 권한에 내가 이해할 수 없는 내용이 누락되어 있을 수 있습니다.

답변1

이 문제를 해결하려면 다음 줄을 사용하십시오.

환경 기능=CAP_NET_ADMIN CAP_NET_RAW

관련 정보