네트워크 인터페이스에서 패킷을 읽고 쓰는 프로그램이 있습니다. 일반적으로 sudoers 파일에 자신을 추가하고 다음과 같이 프로그램을 실행합니다.
sudo ./bridge
하지만 이제 이 프로그램을 실행하려면 여러 사용자가 필요하지만 다음과 같이 프로그램을 실행할 수 있도록 sudo 권한을 부여하지 않아야 합니다.
./bridge
내가 어떻게 할 수 있는지 아는 사람 있나요? 저는 64비트 플랫폼에서 Scientific Linux 6.1을 실행하고 있습니다.
답변1
다음으로 제한할 수 있습니다.Sudoerssudo를 사용하여 명령을 실행할 수 있습니다.
sudo를 통해 루트로 ./real-bridge를 실행할 수 있는 권한을 사용자에게 ./bridge
호출 하고 부여하는 작은 스크립트를 작성하세요 .sudo ./real-bridge
답변2
eth 장치에서 작동하는지 잘 모르겠지만 이 사람은 tun 장치에서 작동합니다.
$ tail -n1 /etc/udev/rules.d/20-kvm.rules
KERNEL=="tun", NAME="net/%k", GROUP="mygoodusers", MODE="0660"
해당 줄의 GROUP="mygoodusers", MODE="0660"을 참조하세요. 물론 각 사용자를 이 그룹에 넣어야 합니다.
udevadm control --reload-rules
그러나 재부팅하기 전에 수동으로 chmod/chown을 수행해야 합니다.
답변3
이 사용자가 스크립트를 실행할 수 있도록 sudo 규칙을 추가하세요. 실행 visudo
하고 다음 내용을 sudoers
파일에 추가합니다.
Defaults!/path/to/bridge env_reset
alice, bill ALL = (root) /path/to/bridge
이를 통해 사용자는 프로그램에 매개변수를 전달할 수 있습니다 /path/to/bridge
. ""
인수 전달을 비활성화하려면 줄 끝에 추가됩니다 .
보다 쉬운 사용자 관리를 위해 브리지를 제어할 수 있는 권한이 있는 사용자 집합을 정의하는 것이 좋습니다. alice, bill
그룹 이름으로 바꿉니다 %bridgers
.bridgers
프로그램 내부에는 bridge
호출 $SUDO_UID
사용자의 사용자 ID가 있습니다 sudo
. 프로그램에서 해당 사용자가 변수에 있어야 하는 경우 USER
이를 설정하기 위한 작은 래퍼 쉘 스크립트를 작성하십시오 USER=$SUDO_UID
.