2010-12-29 21 views
0

私はローカルサーバで管理タスクを実行する方法を、ルート権限が必要なアクションを持つほとんどのスクリプトとして探しています。私が最もセキュリティの影響でこれらのスクリプトを実行するにはどうすればよいサーバ側のスクリプトが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 

このスクリプトは、そのためのルートとして実行する必要があります見ることができるように

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

別scriptt必要とする多くのアクションを持っています #

私はそれを実行したとき、私はappcfg.pyの権限も4755をchmodingし、すべてのすべて= NOPASSWDにvisudoingでapacheのエラーを取得:urlscript /スクリプト

そして、他の試み。

私は非常に多くの質問を投稿して申し訳ありませんが、私は本当に私の会社の人々がWebインターフェイスとしてそれを行うことができるように多くのスクリプトを実行できるようにする必要があります。


ありがとうございました。基本的に私のニーズに合わせてカスタマイズされたpleskタイプのパネルです。これには、Samba設定の作成、vhost設定の作成、リモートサーバへのWebサイトのアップロード、ダウンロード、プログラマのデータベースのインストールの自動化、ユーザグループの作成などが含まれます。私はこのすべてを独立したスクリプトで設定しましたが、どうにかして人々にウェブサイトのインターフェースでこれをさせることができるようにする必要があります。私は(私はこれをやっている唯一の人です)多くの仕事を解放し、ウェブサーバの最適化などに集中することができます。だから私はこれを行う必要があり、ほとんどのスクリプトは、少なくとも30の異なるサーバーにsshを介してsshのconectionを含むまたはダウンロード - (sshの接続ftpなど)100 minisitesをアップロードするダウンロード、またはpythonとsdkとelseとelseとGoogleのcdnを実行します。これを実行するには、このサーバからこれらのドメインを取得する必要があります。そのオプションを選択するには、アクションを選択して、upload-download-cleanremotecache-erasespecificfilesfolders-etcスクリプトを実行します。

それは事です。これについての良いことは、iptablesやサーバconf内のローカルの特定のMACアドレスによるサーバへの総アクセスをブロックすることができるということです。ローカルでのみ実行し、主にルートコマンドを含むスクリプトを実行できるようにする必要があります。

私はちょうどそれを行うための最良の方法に焦点を当てる必要がありますグーグルで見つかったほとんどのものは、幻影、または類似して動作しません。私がアプローチの方法を得るとき、残りはそれに手を差し伸べる問題です。

自分自身を広げて申し訳ありませんが、私はコンピュータとLinuxの経験が1年前から始まりました。

+0

[コードブロックのフォーマット方法](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) – ajreal

+0

ルートとして何かを実行する(サーバー、スクリプト、など)は大きなセキュリティホールを残します。スクリプトをインストールするにはrootアクセスが必要ですか?そのような場合は、rootとしてログインして、それらをパースペクティブディレクトリにインストールします。それが何らかのWebインターフェイス(cPanelのようなもの)なら、rootとしてスクリプトをインストールしますが、Webインターフェイスを独自のユーザーで実行して、ユーザーのアカウントにデータをコピーします(ユーザーに書き込み権限を与えます) '/ home'ディレクトリに)。 – RageD

+0

'echo'で引用符を閉じて再度開く必要はありません。 'echo" --- "$ var" --- "'ではなく 'echo" --- $ var --- "'を実行します。あなたの "変数"ブロックは、不必要にいくつかのことをしているようです。あなたは '$ base'変数をいくつかの場所で利用しますが、いくつかの場所で使うことができます。 'for(())'の中で '$(())'を使う必要はありません。直接数学をすることができます。 '$((a-b))]の代わりに' [a-b] 'だけでも配列の添字の中で同じことが当てはまります。 –

答えて

0

ここで本当に疑問に思うのは、Webインターフェイスからこれらのスクリプトをrootとして実行する必要がある場合です。非常に安全ではなく、推奨されません。

サーバーにログオンして手動でインストールしてから、Webインターフェイスからrootアクセスが不要なものをインストールする必要があります。

とにかく私はあなたがGoogle上のこれの解決策のいくつかの時間を探すことができると思うが、推奨されていないし、Linuxの一般的なアクセス許可の設計に違反しています。

+0

こんにちは、答えのために、私はかなりたくさんのグーグルグーグルされているし、rootユーザーとパスワードなどを渡すスクリプトをsudoingとして別のソリューションを試してみました。事は、私たちのローカルサーバーがインターネットからのアクセスを持っていないということです。私はデータベースを更新し、samba apacheなどのランタイム設定を持っている必要があります... 700以上のドメインに関する最新の情報私はすべての単一のドメインを介して実際のIPを取得するスクリプトを持っている場合は、オンラインdrupalワードプレスなどが..また、私は何とかローカルドメイン内で自動的にローカルドメインを設定する必要があります... – budaya

+0

非技術的なユーザー(コンテンツの人々) 、そしてほとんどのスクリプトは、自動化されたGoogleのcdnアップロードとアマゾンのアップデートなどのために、Apacheを再起動したり、pythonを実行したりする必要があります。これまでのところ、私は要求に応じてスクリプトを実行する必要があります。誰もができるようにWebインターフェイスとして。これまでのところ、私の解決策は管理サイト用のnginxを別のポートに設定してルートとして実行していますが、私は他の代替方法を知りたいだけです。問題は常にすべての人が異なる方法を持っていて、すべてが働くわけではないということです。 – budaya

+0

私はあなたの考えを理解していますが、常にルートアクセスは最悪の解決策です。必要なものをすべて実行したり、サービスを再起動したり、Pythonスクリプトを実行する権限を与えるユーザーを作成することができます。私が今考えることのできる最良の選択肢は、Webインターフェイスからのコマンドを聞くWebServiceを提供するアプリケーションを作成することです。WebServiceを実行しているユーザーは、必要なものを実行するものです。とにかく、あなたが何をしなければならないかを正確に知らなくても、解決策について考えるのは難しいです。それが役に立てば幸い! – webbi

関連する問題