USB 플래시 드라이브에 대한 "화이트 리스트"와 같은 것을 만들고 싶습니다. "허용되지 않는 모든 것을 거부한다"는 뜻입니다.
나는 udev
규칙을 사용해야 한다는 것을 알고 있습니다.
/etc/udev/rules.d/
모든 USB 플래시 드라이브를 거부하는 규칙 에 추가- 내가 원하는 것을 허용하려면 더 높은 숫자의 다른 규칙을 추가하세요.
USB 플래시 드라이브만 다루고 싶습니다. 규칙은 USB 드라이브의 모든 정보를 기반으로 할 수 있습니다. 공급업체 ID, 일련번호를 의미합니다. 내 말은, 나는 이 사건에 대해 아무런 희망도 없다는 뜻이다. 모든 솔루션.
하지만 규칙 파일에 무엇을 써야 할지 모르겠습니다. 예를 들어주실 수 있나요?
UPD. 다음 내용으로 파일을 만듭니다.
deck@crunch /etc/udev/rules.d $ cat 90-deny-usbflash.rules
BUS=="usb", OPTIONS+="ignore_device"
내가 아는 것처럼 이 폴더는 를 udev
사용 하여 감시되므로 inotify
변경 사항이 즉시 적용되어야 합니다. 하지만 변경사항이 적용되지 않았습니다.
답변1
모든 드라이브를 자동 마운트하는 다른 소프트웨어가 설치되어 있는지 여부는 밝히지 않았습니다. 아래 내 솔루션에서는 그렇지 않다고 가정합니다. 그렇다면 문제는 다릅니다. 누군가가 이를 제거하거나 제어하는 방법을 제안할 수 있도록 문제가 무엇인지 지정해야 합니다.
다음은 허용된 드라이브만 마운트하는 udev 규칙의 예입니다(테스트하지는 않았지만 제가 사용하는 유사한 규칙을 기반으로 함).
#-- Skip if not an appropriate "sd" device
KERNEL!="sd[b-z]*", GOTO="99_exit"
SUBSYSTEM!="block", GOTO="99_exit"
#-- Handle 'remove' and 'change' events
SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/usr/bin/pumount /dev/%k", GOTO="99_exit"
ACTION=="remove|change", GOTO="99_exit"
#-- Create useful environment variables
SUBSYSTEMS=="usb", ENV{ID_SERIAL}!="?*", IMPORT{builtin}="usb_id"
SUBSYSTEMS=="usb", ENV{ID_FS_LABEL}!="?*", IMPORT{program}="/sbin/blkid -o udev -p %N"
#-- Skip if this is not a filesystem (e.g. if this is the whole drive, not a formatted partition)
ENV{ID_FS_USAGE}!="filesystem", GOTO="99_exit"
#-- Mount only allowed drives:
SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="something_allowed", RUN+="/usr/bin/sudo -u someuser /usr/bin/pmount -t vfat /dev/%k /media/some_name"
SUBSYSTEMS=="usb", ACTION=="add", ENV{ID_FS_LABEL}=="other_allowed", RUN+="/usr/bin/sudo -u someuser /usr/bin/pmount -t vfat /dev/%k /media/other_name"
#-- Exit
LABEL="99_exit"
물론 사용하는 장착 명령은 원하는 대로 결정됩니다. 제가 보여드린 것은 하나의 예일 뿐입니다.
업데이트: 자동 마운트를 수행하는 기능이 설치되어 있다는 귀하의 의견을 수집했습니다. 내 시스템(Debian Wheezy)에서는 그렇지 않습니다. 제안한 grep을 시도했지만 다른 결과를 얻었습니다. 에서 /lib/udev/rules.d/80-udisks.rules
다음 코드 섹션을 찾았습니다.
# Mark devices that shouldn't be automounted / autoassembled etc.
#
# Deny all, then punch holes for what looks like physical drives
# (TODO: this heuristic might need some work)
#
ENV{UDISKS_PRESENTATION_NOPOLICY}="1"
KERNEL=="sd*|hd*|sr*|mmcblk*|mspblk*", ENV{DISKS_PRESENTATION_NOPOLICY}="0"
이는 다음을 시사합니다.만약에자동 마운트 소프트웨어를 설치했는데 UDISKS_PRESENTATION_NOPOLICY 환경 변수로 제어할 수 있었습니다. 배포판을 지정하지 않았지만 분명히 다릅니다.
답변2
당신은 시도해 볼 수 있습니다USBGuard. UDev 및 Linux 커널 USB 인증 프레임워크 위에 USB 장치 블랙리스트/화이트리스트를 구현합니다. 이미 제안한 대로 UDev를 사용하여 동일한 결과를 얻을 수 있지만 USBGuard는 해당 작업을 위한 전용 도구이며규칙 언어그리고 (선택적) GUI 애플릿.
USB 플래시 디스크에는 일반적으로 일련 번호가 있으므로 VID:PID 및 일련 번호를 사용하는 화이트리스트는 usbguard에서 다음과 같습니다.
allow 1234:5678 serial "123456" with-interface equals { 08:*:* }
allow 1234:5678 serial "abcdef" with-interface equals { 08:*:* }
block
이렇게 하면 대용량 저장 인터페이스 VID:PID 또는 1234:5678과 iSerial 값이 "123456" 또는 "abcdef"인 두 개의 USB 장치를 연결할 수 있습니다(인증). 다른 모든 것은 차단될 것입니다.
면책조항: 저는 해당 프로젝트의 저자입니다.