nftables는 루트가 아닌 사용자로 카운터를 읽습니다.

nftables는 루트가 아닌 사용자로 카운터를 읽습니다.

nftables를 사용하여 일부 방화벽 규칙을 설정했습니다. 여기에는 제가 모니터링하고 싶은 일부 트래픽 유형에 대한 일부 데이터 카운터가 포함되어 있습니다.

이제 이상적으로는 다음을 사용하여 애플리케이션에서 해당 카운터를 읽을 수 있게 하고 싶습니다.libnftnl, 루트가 아닌 사용자로 실행 중입니다. 그러나 초기 테스트에서는 nft루트가 아닌 사용자로서 nftables 카운터를 읽을 수 없음을 나타냅니다.

루트로서:

$ nft list counter my_table my_counter
table ip my_table {
    counter my_counter {
        packets 123 bytes 12345
    }
}

루트가 아닌 경우:

$ nft list counter my_table my_counter
Error: No such file or directory
list counter my_table my_counter
             ^^^^^^^^

루트가 아닌 사용자로 nftables 카운터를 읽을 수 있는 방법이 있습니까? 아마도 어떤 경우에는리눅스 기능설정되어 있나요?

답변1

좀 더 제한된 구성을 원한다면. 어쩌면 sudo를 사용할 수도 있습니다. 단일 명령만 허용하는 규칙을 설정할 수 있습니다.

craig_mcqueen ALL = NOPASSWD: /usr/sbin/nft 목록 카운터 my_table my_counter

답변2

CAP_NET_ADMINLinux 기능을 통해 카운터를 읽을 수 있는 것처럼 보입니다 .

예를 들어 다음을 사용하여 루트가 아닌 사용자를 위한 쉘을 시작합니다 CAP_NET_ADMIN.

capsh --caps="cap_net_admin+eip cap_setpcap,cap_setuid,cap_setgid+ep" --keep=1 --user=myuser --addamb=cap_net_admin -- -c "sh"

해당 쉘에서 /usr/sbin/nft list counter my_table my_counter성공적으로 실행됩니다.

그러나 방화벽 규칙 변경, 새 카운터 추가 또는 기존 카운터 삭제와 같은 다른 작업도 수행할 수 있습니다.

관련 정보