向系统添加了新分区,运行程序时出现“权限被拒绝”

向系统添加了新分区,运行程序时出现“权限被拒绝”

可能重复:
Ubuntu 删除了我的数据分区的权限

我用 ext4 重新格式化了系统上的 NTFS 分区,因为我想在当前的 Ubuntu 安装上使用它,而不是在 Windows 上。我添加了一个条目以/etc/fstab在启动时挂载它。挂载点是。我将及其所有子目录的/home/username/bin所有者更改为我的常规帐户及其用户组。最后,我将所有权限设置为 755。/home/username/bin

我的/etc/fstab样子如下:

proc        /proc               proc    nodev,noexec,nosuid               0       0
UUID=[uuid] /                   ext4    errors=remount-ro                 0       1       
UUID=[uuid] /data               vfat    utf8,umask=007,gid=46             0       1
UUID=[uuid] /home               ext4    defaults                          0       2
UUID=[uuid] /home/username/bin  ext4    rw,suid,dev,exec,auto,user,async  0       2
UUID=[uuid] none                swap    sw                                0       0

我现在的问题是,虽然我能够读取和写入此新分区上的文件,但我无法运行位于此处的应用程序/程序。作为普通用户,我总是收到“权限被拒绝”错误。作为 root(使用sudo),什么也没有发生,这意味着它会立即将我带回 shell 提示符。应用程序应该产生文本输出或打开窗口。其中一些应用程序是二进制文件,一些是脚本。我尝试使用启动它们./program。如果我将它们复制回我的主文件夹,我可以毫无问题地运行它们。

实际上,我将这些应用程序保存在主文件夹的另一个子目录中数月/home/username/apps,并从那里运行它们,没有任何问题。

我该如何修复这个问题?我做错了什么?:)

答案1

您可以访问新创建的 ext4 分区上的文件,但无法运行程序。当您这样做时,您会收到“权限被拒绝”错误。这表明有两种可能性,verendj1建议

  • 文件可能没有执行权限要从命令行授予文件执行权限,请运行:

    chmod +x filename

    如果您只想授予文件所有者执行权限:

    chmod u+x filename

    要在 Nautilus(文件浏览器)中授予文件执行权限,请右键单击该文件,然后单击特性。 点击权限标签。选中允许将文件作为程序执行,然后点击关闭

    在此处输入图片描述

  • 该分区可能已安装noexec。要检查这一点,请运行mount并查看noexec相关条目旁边是否列出了。由于您是从安装的/etc/fstab,因此您可以noexec在那里删除。

此外,请注意:

  • 通常,尽管并非总是如此,可执行文件应存储在正常位置:/bin,,,,,,,。您确定要在该驱动器上存储可执行文件/sbin吗?您可能需要/usr/bin/usr/sbin /usr/local/bin/usr/local/sbin/opt/bin~/bin编辑你的问题提供更多关于您想要实现的目标的信息。

  • 要通过指定相对路径从位于当前目录中的命令行运行程序,必须在其前面加上./

    ./program
  • 如果您启动的是.desktop文件而不是应用程序,那么:

    1. 它不需要设置可执行位。
    2. 你不应该尝试将它当作一个脚本或程序来运行,而是像这样

      xdg-open application.desktop
  • 如果这些是使用 Wine 运行的 Windows 可执行文件,则它们实际上不必设置可执行位。如果没有,您可以右键单击它们,然后单击打开它们Wine Windows 程序加载器或者从命令行启动它们,如下所示:

    wine program.exe

(我发现这个建议和之前的答案非常相似,所以我决定这样做社区维基

答案2

我解决了。问题出在 中的挂载选项上/etc/fstab。将其更改为defaults(相当于更改usernouser)解决了问题,现在一切都按预期运行。

答案3

忽略这个-原始帖子暗示 NTFS,但事实并非如此。

当您挂载 NTFS 分区时,与 ext3 或 ext4 不同,它仅使用为用户设置的权限进行挂载,而组和其他用户则根本没有权限 (rwx------)。使用 chmod 设置权限或使用 chown 设置所有者只会更改目录的权限,而不会更改目录中的任何内容。

解决方案是在 中指定正确的参数/etc/fstab/。我成功使用的使自己成为所有者的参数是这个(将 00000000000000000 更改为正确的 UUID,并将 LOGIN_NAME 更改为您的登录名):

UUID=0000000000000000 /home/LOGIN_NAME/bin ntfs-3g auto,users,uid=LOGIN_NAME,gid=LOGIN_NAME,utf8,dmask=002,fmask=113 0 0

这些都应该在 fstab 中的一行上。

原因在于 NTFS 权限与本机 Linux 权限不同,因此必须指定某些转换才能供 Linux 使用。

忽略此内容结束-------------

编辑:

抱歉误导了您。

我相信你可以通过更改 ~/bin 目录的所有者来解决这个问题首次安装时。在 bash shell 中,输入命令sudo chown LOGIN_NAME:LOGIN_NAME /home/LOGIN_NAME/bin,当然,将 LOGIN_NAME 更改为您的姓名。

我使用 USB 驱动器对此进行了测试,它在我的 bin 目录中安装正常。唯一的区别是我在 fstab 中仅使用了选项“auto”。

答案4

我遇到了类似的问题,无法执行存储在 NTFS 上的 shell 脚本,即使使用 sudo,即使按照上面所述编辑 fstab 之后也是如此。

事实证明我从未创建过挂载点目录。我卸载了分区,并为该分区创建了挂载点目录:

mkdir /media/Windoze7

然后再次安装。

sudo mount -a

相关内容