2010-12-29 1 views
0

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

Как я могу выполнить эти сценарии с наименьшим воздействием безопасности ¿

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

#!/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 
#

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

Другой scriptt:

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

, когда я запускаю его я получаю ошибки Apache с разрешения для appcfg.py даже chmoding 4755 и visudoing всем всем = NOPASSWD: urlscript/скрипт

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

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


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

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

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

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

+0

[Как форматировать мои кодовые блоки] (http://meta.stackexchange.com/questions/22186/how-do-format-my-code-blocks) – ajreal

+0

Запуск чего-либо как root (сервер, скрипт , и т. д.) оставляет значительные дыры в безопасности. Вам просто нужен root-доступ для установки скриптов? Если это так, войдите в систему как root и установите их в свои перспективные каталоги. Если это какой-то веб-интерфейс (похожий на cPanel или другой), установите скрипт как root, но ваш веб-интерфейс будет запущен на своем собственном пользователе, который затем просто скопирует данные на учетные записи пользователей (дайте пользователям права на запись в каталог '/ home'). – RageD

+0

Нет необходимости закрывать и открывать кавычки в 'echo'. Вместо «echo» --- «$ var» --- «', просто выполните 'echo" --- $ var --- "'. Блок «Переменные», кажется, делает несколько вещей без необходимости. В некоторых местах вы используете переменную '$ base', но ее можно использовать еще в нескольких случаях. Нет необходимости использовать '$ (())' внутри 'for (())' - вы можете сделать математику напрямую. То же самое верно в индексе массива - вместо '[$ ((a-b))]' just do '[a-b]'. –

ответ

0

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

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

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

+0

Привет там thx для ответов, я довольно много искал в googling и пробовал разные решения как sudoing скрипты, передающие root пользователя и пароль и другие. Дело в том, что наши локальные серверы не имеют доступа из Интернета, это зеркало наших онлайн-сайтов, против которых мы торгуем. У меня должна быть обновлена ​​база данных и настройки времени выполнения для samba apache и т. Д. ... актуально относительно более 700 доменов. У меня есть сценарии, которые проходят через каждый домен, получающий фактический IP-адрес, если у него есть drupal wordpress и т. Д. Также мне нужно как-то настроить автоматическую настройку локальных доменов внутри ... – budaya

+0

дружественный интерфейс для нетехнических пользователей (контент-пользователей) , и большинство сценариев в конечном итоге вынуждены перезапускать apache или запускать python для загрузки и загрузки амазонок google cdn google и т. д. До сих пор я должен делать это по запросу, и я запускаю эти сценарии с нужными доменами, но было бы здорово это сделать как веб-интерфейс, чтобы любой мог это сделать. Пока мое решение настраивает nginx для сайта администратора на другом порту и работает от имени root, но я просто хочу иметь подсказки о других альтернативных методах, которые у меня могут быть. Проблема всегда в том, что у каждого человека есть другой метод, и не все работают. – budaya

+0

Я понимаю вашу идею, но всегда доступ к корням - самое худшее решение. Вы можете создать пользователя, которому вы предоставите разрешение на выполнение всех необходимых действий, а также перезапустите службы или выполните скрипты python. Лучший вариант, который я могу сейчас подумать, - создать какое-то приложение, предлагающее вам WebService, который будет слышать команды из вашего веб-интерфейса, и этот пользователь (который работает с WebService) - это тот, который будет делать все, что вы хотите. Во всяком случае, сложно подумать о решении, не зная, что именно вам нужно работать.Надеюсь, поможет! – webbi

 Смежные вопросы

  • Нет связанных вопросов^_^