考虑两个普通用户:A 和 B,都没有 sudo 权限。
/home/A A A rwx------
/home/B B B rwx------
A 想从源代码构建 git:
cd /home/A/third-src
wget & extract git.source
./configure --prefix=/home/A/third/git
make install # install without root
export PATH & LD_LIBRARY_PATH
# Here A can use git correctly
现在 B 想要重用 A 的 git,所以 B 要求 root
cp -r /home/A/third/git /home/B/third/git
chown -R B:B /home/B/third/git
B 为 B 的 git 导出了 PATH 和 LD_LIBRARY_PATH,并且预期可以正确使用 git,但是却不起作用!!git 抱怨没有权限读取 /home/A/third/git 中的文件:
git init
fatal: unable to access '/home/A/third/git/etc/gitconfig': Permission denied
似乎 --prefix 将绝对路径放入可执行文件中。
strings bin/git # it really lists /home/A/third/git
如何修复?有没有一种不使用 root 的规范方法可以将本地安装的程序共享给其他人?
先感谢您。
答案1
您的权限存在问题,包括用户、组等。以下是 git 行为的一些原因:
Git 从各种路径读取配置设置,但无法
<USER>
访问其中的一些。由于启动脚本时使用带有不重置环境变量选项 (-m) 的 su 命令,因此 Git 尝试读取根配置设置而不是配置设置:
/bin/su -m $USER -c "cd $BASE/logs && $BASE/bin/startup.sh &> /dev/null"
您可以尝试以下方法来修复:
修复权限:
chown <USER>.<GROUP> -R /home/<USER>/.config
chown <USER>.<GROUP> -R /home/<USER>/.gitconfig
使用默认选项重新编译:
您的回答的第二部分是两个用户如何共享本地安装的程序?
我现在能想到的几种方法是:
- 添加用户乙致用户A 访问控制列表 (ACL) 列表使用设置命令。
- 创建一个具有适当权限设置等的单独组,并将 A 和 B 都添加到该组中。
- 在两个都可以使用的公共空间中安装程序。例如非标准路径,其中可能包含一个可以访问两者的目录,或者一个可以访问每个目录的单独分区,具体取决于您的需要。