Включение сценария оболочки для запуска от имени другого пользователя с PHP

Ок, понял. Highlight не принимает переменные в качестве аргументов, поэтому вам нужно использовать :exe, чтобы обойти это. Так что это работает:

if has_key(g:plugs, 'ale')
  exe 'highlight ALEErrorSign guifg=' . vim_ale_error_fg 'guibg=' . vim_ale_error_bg
  exe 'highlight ALEWarningSign guifg=' . vim_ale_warning_fg 'guibg=' . vim_ale_warning_bg
endif

См. также: https://stackoverflow.com/a/2211738/5918874

1
25.08.2017, 05:23
2 ответа

Если я поймите правильно, вы хотите выполнить скрипт как владелец файла, а не как текущий пользователь (пользователь apache).

Если это то, что вы хотите, вас может заинтересовать setuid.

Краткое описаниетого, как это работает, было опубликовано ранее.

0
27.01.2020, 23:45

Если я правильно понял вашу проблему и вас не волнуют риски безопасности, вы можете установить sudo, добавить «www -data» (www -data — это пользователь по умолчанию, используемый nginx/apache )в файл sudoers со всеми разрешениями и без пароля, и использовать его для выполнения команды от имени другого пользователя.

Можно сделать так:

Установить судо:

apt-get install sudo

Затем добавить пользователя в конфиг:

nano /etc/sudoers

Добавьте это в последнюю строку:

www-data ALL=(ALL) NOPASSWD: ALL

И, наконец, вы можете отредактировать свой php для выполнения команды с помощью sudo:

shell_exec('sudo -u testuser /var/www/html/copy.sh');

@Редактировать

Мне удалось заставить его работать на моем сервере. Просто следуйте этим шагам, и это должно сработать и для вас.

  1. Попробуйте заменить код PHP на этот:

    <?php
    echo shell_exec('/bin/sh /var/www/html/copy.sh'); #this will display the result in your browser
    
    echo "<pre>";
    echo file_get_contents("ltylog.txt");
    echo "<pre>";
    ?>
    
  2. Затем убедитесь, что данные www -имеют доступ к файлу copy.sh:

Вы можете либо дать ему 777 chmod, как этот:

    chmod 777 /var/www/html/copy.sh

или вы можете сделать так, чтобы файл принадлежал пользователю www -data (, используемому apache):

    chown www-data:www-data /var/www/html/copy.sh

но если вы решите использовать второй вариант, убедитесь, что данные www -все еще могут выполнить файл, применив chmod следующим образом:

    chmod 755 /var/www/html/copy.sh
  1. Сделать файл исполняемым:

    chmod +x /var/www/html/copy.sh
    
  2. измените код copy.sh на этот:

    rsync -rzv -e 'ssh -p 199'  test.txt testuser@192.168.1.79:/home/testuser/txt
    ssh  testuser@192.168.1.79 -p 199 /bin/sh /home/testuser/lty.sh > ltylog.txt 2>&1
    
  3. Наконец, убедитесь, что у пользователя testuser есть доступ к следующим файлам:

    • /дом/
    • /дом/тестовый пользователь/
    • /home/testuser/lty.sh
    • /home/testuser/ltylog.txt

Если вас не волнует безопасность, вы можете просто ввести это в консоли удаленного сервера

    chmod 777 -R /home/

Или вы можете проверить каждый файл вручную, чтобы убедиться, что разрешения установлены правильно.

2
27.01.2020, 23:45

Теги

Похожие вопросы