![sudo make install:权限被拒绝](https://linux22.com/image/1304157/sudo%20make%20install%EF%BC%9A%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D.png)
我有一个关于从源代码构建的最烦人的问题。我搜索了很长时间的答案,却无处可寻...我以前从源代码编译过软件,这让我很困惑。
因此,我尝试从源代码安装 python 2.7.2。我可以成功安装./configure
,并且make
似乎运行良好。但是当我这样做时sudo make install
,我收到各种错误...
首先,sudo make install
给我这个:
make: stat: GNUmakefile: Permission denied
make: stat: makefile: Permission denied
make: stat: Makefile: Permission denied
make: stat: install: Permission denied
make: *** No rule to make target `install'. Stop.
所以我这么做了chmod +rx Makefile*
。但毫无效果。
然后,sudo ls .
说
ls: cannot access .: Permission denied
然后ls -d .
说权限是drwxr-x---
然后,作为一个绝望的措施,chmod +rx .
。这给了我:
make: stat: Modules/config.c.in: Permission denied
make: *** No rule to make target `Modules/config.c.in', needed by `Makefile'. Stop.
所以有一些进展...这里发生了什么?这看起来像是某种权限问题。我以为 sudo 是解决方案,但显然这里还有其他事情发生...我试过了,sudo -s
但又遇到了那些权限问题...
我正在使用 Ubuntu 10.04LTS。
答案1
我认为您遇到的实际上是称为“root squash”的 NFS 策略。用户在特定主机上需要 root 权限的情况并不少见,但您不希望他们在共享 NFS 卷上拥有同样的权限。因此,授予本地 root 访问权限并不允许用户粗暴地对待任何已安装的 NFS 卷并访问/修改其他用户的文件 - NFS 服务器会将 root 的 uid 从 0 映射到 65534(nobody
),这就是为什么您甚至无法在示例中列出目录的原因。
因此,您有几个选择:
- 您可以尝试通过在顶层目录中执行操作来使所有文件都可以
nobody
在构建中访问,并授予“其他人”对您的文件的读/写权限(可能足够也可能不够 - 例如您可能需要chmod -R o+rw .
o+x
,并授予“其他人”对您的文件的读/写权限(可能足够也可能不够 - 例如,如果需要搜索目录,您可能需要目录)。 - 如果您有权访问 NFS 服务器的
/etc/exports
文件,那么您可以禁用 root squash(也许不是一个好主意)。 - 只需在本地目录中构建,如、
/usr/local/src
等,或者只需创建您自己的本地目录(您甚至可以让它归您的用户所有),如。这可能是引起最少麻烦的选项。/usr/src
/tmp
/scratch/myuser
答案2
如果你使用 sshfs,请使用-o allow_other
选项挂载
$ sudo sshfs -o allow_other hostfolder localfolder
在此之前你必须设置user_allow_other
先/etc/fuse.conf
答案3
尝试将其更改为您的用户。也就是说,在目录中使用“sudo chown user ./*”(将 user 替换为您的用户名),它会将目录中所有文件的所有者更改为您。