在挂载外部设备执行cargo build时遭遇OS error 13权限拒绝问题
解决外部挂载分区上cargo build后无法执行程序的权限问题
问题原因
你遇到的Permission denied (os error 13)错误,核心原因是外部分区挂载时默认禁用了执行权限。虽然你设置了读写权限并修改了目录所有者,但users挂载选项会默认启用noexec(禁止执行分区内的二进制文件),这是Linux的安全机制,防止普通用户挂载的分区执行恶意程序。
解决方案
1. 临时验证(无需修改配置)
先临时重新挂载分区并开启执行权限,验证是否解决问题:
sudo mount -o remount,rw,exec /mnt/external
回到项目目录,运行编译后的程序:
cd /mnt/external/testexternal ./target/debug/testexternal
如果能正常执行,说明就是挂载选项的问题。
2. 永久修复(修改fstab)
编辑/etc/fstab文件,在挂载选项中添加exec,覆盖users默认带来的noexec限制:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/external ext4 defaults,noatime,users,rw,auto,exec 0 0
保存后重新挂载分区:
sudo umount /mnt/external && sudo mount /mnt/external
之后再执行cargo build或cargo run即可正常运行程序。
额外检查
如果上述操作后仍有问题,检查二进制文件的执行权限:
ls -l target/debug/testexternal
正常情况下cargo编译生成的文件应带有x权限(如-rwxr-xr-x),如果没有,可手动添加:
chmod +x target/debug/testexternal
内容的提问来源于stack exchange,提问作者Xabi00
相关产品推荐
相关产品推荐

