배경: 저는 dmenu를 사용하여 드라이브를 마운트/마운트 해제하는 Python 및 Shell 스크립팅을 사용하여 간단한 애플리케이션을 만들려고 합니다.
현재 문제는 드라이브를 마운트하는 명령이 쉘 스크립트 파일에 있고 명령을 실행하려면 루트 권한이 필요하다는 것입니다.
문제가 되는 부분은 바로 이렇습니다.
mount ${DRIVE} ${DESTINATION}
나는 몇 가지 연구를 수행했으며 "sudo 없이 마운트 실행" 질문에 대한 대부분의 답변은 fstab 파일을 편집하고 디스크를 수동으로 추가하는 것을 가리킵니다.
사용자가 시스템 파일/구성을 편집할 필요가 없는 다른 방법이 있는지 궁금합니다. 아니면 최소한 이 구성을 자동화하세요.
답변1
사용자가 사용할 수 있는 mount 명령의 가능한 매개 변수를 제한하는 방법이 필요합니다. 그렇지 않으면 악의적인 사용자가 시스템이 실제 버전 대신 /etc
공격자의 버전을 사용하도록 무언가를 마운트하여 쉽게 시스템을 장악할 수 있습니다 . /etc/shadow
그 결과 공격자는 일시적으로 모든 사용자의 암호를 공격자가 알고 있는 암호로 바꿀 수 있는 것과 같습니다.
사용자가 고정된 파일 시스템 세트를 고정된 마운트 지점 세트에 마운트/마운트 해제하기만 하면 되는 경우 또는 마운트 옵션을 /etc/fstab
사용하여 이를 추가하는 것이 효율적인 솔루션이 될 수 있습니다.user
users
사용자가 설치해야 하는 장치의 이름을 예측할 수 없거나 사용자가 액세스할 수 있는 모든 곳에 설치할 수 있어야 하는 경우 문제는 더욱 어렵습니다. 어쩌면 사용자가 파일 시스템을 고정된 위치에 마운트하도록 허용한 다음 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