1

Рассмотрим два обычных пользователя: A & B, ни один из которых не имеет привилегий sudo.

/home/A  A  A  rwx------
/home/B  B  B  rwx------

Я хотел собрать 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 хотел повторно использовать Git A, поэтому B попросил root

cp -r /home/A/third/git /home/B/third/git
chown -R B:B /home/B/third/git

B экспортировал PATH & LD_LIBRARY_PATH для git B и ожидал, что будет использовать 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 ответ1

1

Существует проблема с вашим разрешением, которая включает пользователя, группу и т.д. Вот несколько причин для поведения git:

  1. Git читает настройки конфигурации по разным путям, и <USER> не имеет доступа к некоторым из них.
  2. Git пытается прочитать настройки корневой конфигурации вместо настроек конфигурации из-за запуска сценария с помощью команды su с параметром не сбрасывать переменные среды (-m):

    /bin/su -m $USER -c "cd $BASE/logs && $BASE/bin/startup.sh &> /dev/null"

Вы можете попробовать кое-что исправить:

  1. Исправьте разрешение:

    chown <USER>.<GROUP> -R /home/<USER>/.config

    chown <USER>.<GROUP> -R /home/<USER>/.gitconfig

  2. Перекомпилируйте, используя параметры по умолчанию:

Вторая часть вашего ответа о том, как два пользователя могут совместно использовать локально установленную программу?

Есть несколько способов, о которых я могу думать прямо сейчас:

  1. Добавьте пользователя B в список A Access Control List(ACL) пользователя с помощью команды setfacl .
  2. Создайте отдельную группу с правильными настройками разрешений и т.д. И добавьте A и B в эту группу.
  3. Установите программу в том общем пространстве, которое могут использовать оба. Как нестандартный путь, который может включать в себя каталог, который имеет доступ к обоим, или отдельный раздел, который имеет доступ к каждому из них в зависимости от ваших потребностей.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .