серверные скрипты запускаются от имени root или жизнеспособного интерактивного пути в php - PullRequest
0 голосов
/ 29 декабря 2010

Я пытаюсь найти способ выполнения административных задач на локальном сервере, так как разные сценарии имеют действия, требующие прав root.

Как выполнить эти сценарии с наименьшим влиянием на безопасность? 100

Я отправляю несколько примеров скриптов:

#!/bin/bash
if [ $1 == '-h' ];
then
  echo +-------+-------+-------+-------+-------+-------+-------+-------+-------+
  echo +                               Instrucciones                           +
  echo +-------+-------+-------+-------+-------+-------+-------+-------+-------+
  echo Para ejecutar el script hay que hacer cd hasta /var/www/scripts/server .. 
  echo ejecutar ----> bash crearhosts $dominio $dominio $dominio $status
  echo Se pueden poner tantos dominios como se quiera sin extensión salvo el último parámetro que ha de ser el tipo de site con los siguientes valores validos:
  echo localzone1
  echo localzone2
  echo localzone3
  echo +------------ejemplo-------------+
  echo bash domain domain domain localzone
  echo +-------+-------+-------+-------+-------+-------+-------+-------+-------+
  echo +                               fin                                     +
  echo +-------+-------+-------+-------+-------+-------+-------+-------+-------+
else 

    #+-------+-------+-------+-------+-------+-------+-------+-------+-------+
    #+                               Variables                               +
    #+-------+-------+-------+-------+-------+-------+-------+-------+-------+

    params=$*
    array=$(echo $params | sed 's/ /;/g')
    IFS=";"
    set -- $array
    sites=($array)

    base="/var/www"
    #+-------+-------+-------+-------+-------+-------+-------+-------+-------+
    #+                               funciones                               +
    #+-------+-------+-------+-------+-------+-------+-------+-------+-------+
    function hostconf(){
      case $status in
        aracne)
          cp /var/www/vhosts/template.ethings.com.conf /var/www/vhosts/$domain-aracne.ethings.com.conf  
          grep -Rl -e 'ethings/template' /var/www/vhosts/$domain-aracne.ethings.com.conf | xargs sed -i 's:domain/template:domain/'$domain'-aracne:g'
              grep -Rl -e 'template' /var/www/vhosts/$domain-domain.com.conf | xargs sed -i 's/template/'$domain'-aracne/g' 
          mkdir $base/$status/${directorios[0]}-aracne ; mkdir $base/$status/${directorios[0]}-dominio/${directorios[1]} ; mkdir $base/$status/${directorios[0]}-dominio/${directorios[2]}
              echo +---------------------------------------------------------------------------------------------------------------------------------------------+
              echo "+----------------------No OLVIDE AÑADIR EL DOMINIO "$domain"-domain.com para la ip xxx.xxx.xxx.xxx en su archivo hosts"
              echo +----------------------------------------------------------------!!!!!!!!!!!!!!!!!!!!---------------------------------------------------------+;;

        static)
          cp /var/www/vhosts/template.ethings.com.conf /var/www/vhosts/$domain.ethings.static.com.conf  
          grep -Rl -e 'ethings/template' /var/www/vhosts/$domain.ethings.static.com.conf | xargs sed -i 's:ethings/template:ethings/static-webs/'$domain':g'
          grep -Rl -e 'template.ethings' /var/www/vhosts/$domain.ethings.static.com.conf | xargs sed -i 's/template.ethings/'$domain'.ethings.static/g'
          mkdir $base/ethings/$status-webs/${directorios[0]}; mkdir $base/ethings/$status-webs/${directorios[0]}/${directorios[1]}; mkdir $base/ethings/$status-webs/${directorios[0]}/${directorios[2]}
              echo +---------------------------------------------------------------------------------------------------------------------------------------------+
              echo "+----------------------No OLVIDE AÑADIR EL DOMINIO "$domain".domain.com para la ip xxx.xxx.xxx.xxx en su archivo hosts"
              echo +----------------------------------------------------------------!!!!!!!!!!!!!!!!!!!!---------------------------------------------------------+;;
        *)
          cp /var/www/vhosts/template.domain.com.conf /var/www/vhosts/$domain.ethings.com.conf  
          grep -Rl -e 'template' /var/www/vhosts/$domain.domain.com.conf | xargs sed -i 's/template/'$domain'/g'
          mkdir $base/ethings/${directorios[0]} ; mkdir $base/ethings/${directorios[0]}/${directorios[1]} ; mkdir $base/ethings/${directorios[0]}/${directorios[2]}
              echo +-------------------------------------------------------------------------------------------------+
              echo "No OLVIDE AÑADIR EL DOMINIO "$domain".domain.com para la ip xxx.xxx.xxx.xxx en su archivo hosts"
              echo +-----------------------------------!!!!!!!!!!!!!!!!!!!!------------------------------------------+;;
      esac
    }

    #echo ${#sites[@]} +-------+ elements of array  +--------+
    for((count=0; count<$((${#sites[@]}-1)); count++))
    do
      directorios=("${sites[$count]}" "html" "logs")
      domain=${sites[$count]}
      status=${sites[$((${#sites[@]}-1))]}
      hostconf $status
    done
        /etc/init.d/apache2 restart
fi
#

Как вы можете видеть, этот скрипт должен быть запущен от имени пользователя root, так как он имеет много действий, требующих этого

Другой скрипт:

echo password | python /var/www/google_appengine/appcfg.py --passin --email=email update localapplicationurl
#

при запуске я получаю ошибки apache с разрешениями для appcfg.py даже для chmoding 4755 и просмотра всем всем = nopasswd: urlscript / script

И другие попытки.

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


Спасибо за ваш ответ. Ну, в основном это панель типа plesk, персонализированная под мои собственные нужды. Это включает в себя создание конфигураций samba, конфигураций vhost, загрузку веб-сайтов на удаленные серверы и, таким образом, их загрузку, автоматизацию установки баз данных по потребностям программистов, создание групп пользователей и т. Д. - это компания с более чем 1000 доменами, я установил четыре локальных сервера для производства, для которых у нас есть сценарии загрузка в cdn в google, amazon и т. д. У меня все это настроено в независимых скриптах, но нужно каким-то образом заставить людей делать это через интерфейс веб-сайта. Это освободило бы от меня большую работу (я единственный, кто делает это) и смогло бы сконцентрироваться на оптимизации веб-серверов и других. Поэтому мне нужно сделать это, и большинство сценариев включают в себя ssh-соединения по ssh по крайней мере с 30 различными серверами или загрузку-выгрузку 100 мини-сайтов одновременно (ssh-соединения, ftp и т. Д.), Или запуск gdd cdn с python и sdk и т. Д. И т. Д. Большая часть этого должна быть от имени пользователей, то есть получить эти домены с этого сервера - дать возможность выбрать их - выбрать действие - запустить скрипт upload-download-cleanremotecache-erasespecificfilesfolders-etc.

Это вещь. Хорошая вещь об этом - я могу заблокировать полный доступ к серверу с помощью iptables или локальных определенных mac-адресов в confs серверов, и так далее. Он должен работать только локально и иметь возможность запускать сценарии, которые в основном содержат команды root.

Мне просто нужно сосредоточиться на лучшем способе сделать это, большинство вещей, найденных в Google, не работают так, как предполагалось, или что-то подобное Когда я подхожу к подходу, все остальное сводится к тому, чтобы приложить к нему руки.

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

1 Ответ

0 голосов
/ 24 января 2011

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

Вы должны войти на сервер и установить их вручную,затем оставьте веб-интерфейс для установки чего-либо другого, для чего не требуется root-доступ.

В любом случае, я думаю, вы можете найти какое-то время решения этой проблемы через Google, но это не рекомендуется и нарушает общий дизайн разрешений linux..

...