背景:私はdmenuを使ってドライブをマウント/マウント解除するPythonとShellスクリプトを使って簡単なアプリケーションを作成しようとしています。
現在の問題は、ドライブをマウントするコマンドがシェルスクリプトファイルにあり、コマンドを実行するにはroot権限が必要であることです。
問題になる部分はまさにこうです。
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などのファイルマネージャで使用され、root権限は必要ありません。このツールはにドライブを取り付けます/run/media/<username>/
。
ドライバをマウントするには、以下をudisksctl
使用しますmount
。
udisksctl mount -b /dev/sdbX
除去のためにunmount
。
答え3
ユーザー権限ファイルを編集し、そのユーザーにマウント権限を付与できます。
visudoを使用して、次の行を追加します(自分のユーザーに対してuser_nameを変更します)。
user_name ALL=NOPASSWD: /bin/mount