Как запустить скрипт оболочки от имени пользователя root (sudo)? - PullRequest
6 голосов
/ 21 сентября 2011

У меня есть сервер репозитория SVN, который работает под пользователем репозитория. Я хочу запускать скрипт после каждого действия после фиксации. Я написал сценарий оболочки, который запускается с крючка после каждого коммита. Это должно быть запущено от имени пользователя root. Вот почему я использовал sudo в скрипте, но он не работал. Есть ли способ запустить скрипт от имени root?

sudo su
echo "password"
svn export --force file:///home/repository/trunk/ /home/memarexweb/public_html/devel/
chmod -R 777 /home/memarexweb/public_html/devel/

Ответы [ 4 ]

6 голосов
/ 16 ноября 2011

Я искал и нашел это полезное решение:

Отредактируйте файл sudoers, чтобы разрешить запуск определенных команд без пароля.

Лучше всего разбить ваш скрипт post-commit надве части, одна из которых будет проходить через sudo.

  • запись в /etc/sudoers:

    loqman    ALL=(root) NOPASSWD: /usr/local/bin/svn-postcommit-export
    
  • Ваш пост-Хук коммита:

    #!/bin/sh
    sudo /usr/local/bin/svn-postcommit-export
    
  • Скрипт /usr/local/bin/svn-postcommit-export:

    #!/bin/sh
    svn export --force file:///home/repository/trunk/ /home/memarexweb/public_html/devel/
    chmod -R 777 /home/memarexweb/public_html/devel/
    

    (Вы можете выбрать любое имя и поставить скрипт в любом месте; я просто предложил svn-postcommit-exportв качестве примера, и /usr/local/bin как общее местоположение.)

3 голосов
/ 22 сентября 2011
sudo su

запускает новый процесс, принадлежащий пользователю root.После того, как этот процесс завершен или остановлен, выполняется следующая строка, снова как пользователь, который выполняет сценарий.

Возможное решение состоит в том, чтобы запустить весь сценарий, используя sudo, и предоставить этому пользователю права sudo для выполнениясценарии.Для этого вам необходимо отредактировать файл /etc/sudoers с помощью команды visudo.

1 голос
/ 21 сентября 2011

В последней строке вашего сценария вы меняете режим с /home/memarexweb/public_html/devel/ на 777, поэтому пользовательский «репозиторий» должен иметь возможность копировать файлы в этот каталог без прав root.В этом случае вам не нужно использовать sudo или su.

Однако изменение прав доступа к каталогу на 777 опасно, так как позволяет любому пользователю писать в этот каталог и создавать или удалять файлы.Было бы лучше изменить владельца каталога на пользовательское «хранилище» и изменить режим на 755. Если это невозможно, вы можете добавить POSIX ACL, позволяющий «хранилищу» выполнять запись в каталог.Вы можете Google "POSIX ACL" для получения дополнительной информации, или прочитать справочные страницы для getfacl и setfacl.

0 голосов
/ 21 сентября 2011

Это не сработает, лучше всего поместить в скрипт оболочки только необходимые команды.И затем setuid сам скрипт, например, (используя root):

chmod u+s myscript.sh

Таким образом, выполнение этого скрипта даст вам права владельца скрипта (root).

РЕДАКТИРОВАТЬ: Как уже упоминалось в комментариях, Stuid не допускается для сценария оболочки.Это решение работает только для исполняемых файлов.

...