sudo를 사용하지 않고 쉘 스크립트가 "마운트" 및 "마운트 해제"를 실행할 수 있도록 하려면 어떻게 해야 합니까?

sudo를 사용하지 않고 쉘 스크립트가 "마운트" 및 "마운트 해제"를 실행할 수 있도록 하려면 어떻게 해야 합니까?

배경: 저는 dmenu를 사용하여 드라이브를 마운트/마운트 해제하는 Python 및 Shell 스크립팅을 사용하여 간단한 애플리케이션을 만들려고 합니다.

현재 문제는 드라이브를 마운트하는 명령이 쉘 스크립트 파일에 있고 명령을 실행하려면 루트 권한이 필요하다는 것입니다.

문제가 되는 부분은 바로 이렇습니다.

mount ${DRIVE} ${DESTINATION}

나는 몇 가지 연구를 수행했으며 "sudo 없이 마운트 실행" 질문에 대한 대부분의 답변은 fstab 파일을 편집하고 디스크를 수동으로 추가하는 것을 가리킵니다.

사용자가 시스템 파일/구성을 편집할 필요가 없는 다른 방법이 있는지 궁금합니다. 아니면 최소한 이 구성을 자동화하세요.

답변1

사용자가 사용할 수 있는 mount 명령의 가능한 매개 변수를 제한하는 방법이 필요합니다. 그렇지 않으면 악의적인 사용자가 시스템이 실제 버전 대신 /etc공격자의 버전을 사용하도록 무언가를 마운트하여 쉽게 시스템을 장악할 수 있습니다 . /etc/shadow그 결과 공격자는 일시적으로 모든 사용자의 암호를 공격자가 알고 있는 암호로 바꿀 수 있는 것과 같습니다.

사용자가 고정된 파일 시스템 세트를 고정된 마운트 지점 세트에 마운트/마운트 해제하기만 하면 되는 경우 또는 마운트 옵션을 /etc/fstab사용하여 이를 추가하는 것이 효율적인 솔루션이 될 수 있습니다.userusers

사용자가 설치해야 하는 장치의 이름을 예측할 수 없거나 사용자가 액세스할 수 있는 모든 곳에 설치할 수 있어야 하는 경우 문제는 더욱 어렵습니다. 어쩌면 사용자가 파일 시스템을 고정된 위치에 마운트하도록 허용한 다음 ln -s /actual/mount/point /desired/location파일이 필요한 위치에 표시되도록 심볼릭 링크를 만드는 방법을 사용자에게 가르칠 수 있을까요 ?

답변2

이 질문에 대한 더 간단하고 안전한 대답은 직접 사용하는 udisks2것보다 사용하는 것입니다 mount. Thunar와 같은 파일 관리자에서 사용되며 루트 권한이 필요하지 않습니다. 이 도구는 에 드라이브를 설치합니다 /run/media/<username>/.

드라이버를 마운트하려면 다음을 udisksctl사용하십시오 mount.

udisksctl mount -b /dev/sdbX

제거를 위해 unmount.

답변3

사용자 권한 파일을 편집하고 해당 사용자에게 마운트 사용 권한을 부여할 수 있습니다.

visudo를 사용하고 다음과 같은 줄을 추가하세요(자신의 사용자에 대해 user_name을 변경하세요).

user_name ALL=NOPASSWD: /bin/mount

관련 정보