sudo 권한 없이 스크립트에서 USB 드라이브 읽기/쓰기 작업 처리

sudo 권한 없이 스크립트에서 USB 드라이브 읽기/쓰기 작업 처리

저는 어느 시점에 USB 드라이브 장치에 작성해야 하는 애플리케이션을 개발 중입니다. 응용 프로그램은 수퍼유저가 아닌 권한으로 실행되며 드라이브에 쓰기 위한 가장 좋은 방법은 드라이브가 삽입되자마자 플러시 옵션을 사용하여 마운트하는 것이라고 생각했습니다. 이런 식으로 이론적으로는 그럴 필요가 없습니다. 다음 udev 규칙을 사용하여 마운트 해제 작업을 수행합니다.

ACTION="add", KERNEL="sd*[0-9]", SUBSYSTEMS="usb", RUN+="/bin/sh mymountscript.sh '%E{DEVNAME}'"

마운트 스크립트는 다음과 같은 방식으로 명령을 호출하려고 시도합니다.

mount -o --flush $1 /media/my-user/my-usb-unit

하지만 나는 얻는다이 마운트 오류:

mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

궁금한 점은 udev 규칙을 통해 마운트하려고 할 때만 이 오류가 발생한다는 것입니다. 내가 호출하면 mymountscript.sh장치가 해당 지점에 제대로 마운트됩니다.

이 문제에 대한 해결책과는 별도로, 이런 방식으로 수행하는 것이 위험한지 알고 싶습니다. (파일이 작성된 후 드라이브를 마운트 해제하지 않기 때문에 이해합니다.) 다른 방법으로 가면 장치를 직접 마운트/마운트 해제할 수 있으려면 사용자를 대신하여 실행되는 애플리케이션 스크립트가 필요합니다. 이를 위해서는 장치가 삽입될 때 장치 이름을 어딘가에 저장하고 애플리케이션에 마운트 권한을 부여해야 합니다.

OS는 Xubuntu 16.04입니다.

답변1

이에 대한 해결 방법은 다음과 같이 관리하는 것이었습니다.

  1. USB 삽입 작업에 대한 하나의 udev 규칙입니다.

  2. 그 동안 제공되는 스크립트는 드라이브 자체를 마운트/마운트 해제합니다.

  3. USB 제거 작업에 대한 udev 규칙 1개.

USB가 삽입됩니다.

장치 이름을 파일에 저장하는 스크립트 하나를 실행합니다. 이 규칙에 다른 스크립트를 추가할 수 있습니다.

ACTION=”add”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh my-usb-inserted.sh”,  RUN+=”/bin/sh myownscript.sh” 

여기서는 myownscript.sh다음을 사용하여 장치를 마운트합니다.마운트, 표준 사용자가 이동식 드라이브를 마운트/마운트 해제할 수 있습니다. 다음 스크립트가 사용하기 전에 각 스크립트의 유닛을 마운트 해제하는 한 이 스크립트 이후에는 다른 스크립트를 호출할 수 있습니다.

USB가 제거됩니다.

여기서 간단한 스크립트는 에서 생성된 파일을 제거하므로 my-usb-inserted.sh스크립트 내부에 플래시 장치가 삽입되지 않았다는 것을 알 수 있습니다.

ACTION=”remove”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh usb-removed.sh” 

이 해결 방법은 둘 이상의 USB 드라이브를 처리해야 한다는 사실을 고려하지 않았습니다.

또한보십시오:

관련 정보