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_ADMIN
Linux 기능을 통해 카운터를 읽을 수 있는 것처럼 보입니다 .
예를 들어 다음을 사용하여 루트가 아닌 사용자를 위한 쉘을 시작합니다 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
성공적으로 실행됩니다.
그러나 방화벽 규칙 변경, 새 카운터 추가 또는 기존 카운터 삭제와 같은 다른 작업도 수행할 수 있습니다.