動機&対処前の状況 #
外付けSSDを購入して容量増設した際、chown
& chmod
で適切に所有権と権限を設定(ls -l
でrx
が付いているのを確認)したがbash script等を実行しようとすると’Permission Denied’となってしまっていた。
原因 #
あくまで今回のケースの場合です。 まず
ls -l
で適切な権限が付いていることを確認してください。
fstab(sudo mount
とかを実行した際に読まれる設定ファイル)内で権限エラーがでるssdの設定を見ると
cat /etc/fstab
/dev/nvme1n1p1 /media/ssd2 ext4 user,auto,rw 0 2
となっていた。
これの何がまずいかと言うと、user
を指定するとユーザーが自由にマウントできるようになるがnoexec
が自動的にセットされてしまうのでexec
を明示的に与える必要があった。
以下、情報ソース。
man fstab | grep user
user
allow a user to mount
man mount | grep user
user
Allow an ordinary user to mount the filesystem. The name of the mounting user is written to the mtab file (or to the private
libmount file in /run/mount on systems without a regular mtab) so that this same user can unmount the filesystem again. This option
implies the options noexec, nosuid, and nodev (unless overridden by subsequent options, as in the option line user,exec,dev,suid).
対処法 #
sudo blkid
で該当のUUIDかマウントポイント(/dev/xxx
)をコピーしてsudo umount
の後に貼り付けて実行してアンマウントする。
target is busy
と出たらどこかでファイル等を開いていたりするので閉じて再実行。
umount
からでなくても環境によってはファイラ、ディスクツール等からアンマウントできたりする。
アンマウントできたら/etc/fstab
を編集する。
自分の場合は
/dev/nvme1n1p1 /media/ssd2 ext4 user,exec,auto,rw 0 2
とexec
を明示的につけてuser
で非明示的にセットされたnoexec
を上書きしておいた。
編集内容をcat /etc/fstab
で確認したら再度マウント(sudo mount
or 環境のGUIから)して無事に問題解決した。
以上。