2011-09-21 16 views
5

私は、リポジトリユーザの下で動作するSVNリポジトリサーバを持っています。コミット後のアクションごとにスクリプトを実行したい。私はすべてのコミットの後にフックから実行するシェルスクリプトを書いた。それはrootとして実行する必要があります。これが私がスクリプトでsudoを使った理由ですが、うまくいきませんでした。 スクリプトをrootとして実行する方法はありますか?シェルスクリプトをroot(sudo)として実行するにはどうしたらいいですか?

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

より良いが、パスワードを無効にすることができ – Yousf

+0

のオプションをsuperuser.comする質問を移動するために)共通の場所として一例としてsvn-postcommit-export、および/usr/local/binを示唆したが、イマイチ本当に良い解決策はhttp:// maestric .com/doc/unix/ubuntu_sudo_without_password – FUD

+0

ファイルモードを777にするのは良い考えではないかもしれません。 – eckes

答えて

6

私の周りを検索し、この便利な解決策がわかった。

は、パスワードなしで特定のコマンドを実行できるように、あなたのsudoersファイルを編集します。

post-commitスクリプトを2つの部分に分割することをお勧めします。そのうちの1つはsudoで実行されます。

  • /etc/sudoersのエントリ:

    loqman ALL=(root) NOPASSWD: /usr/local/bin/svn-postcommit-export 
    
  • あなたの投稿-commitフック:

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

    (ヨどんな名前を選んでもスクリプトをどこにでも置くことができます。 。私はちょうど

0

これは動作しませんが、最善のことは、シェルスクリプト内のコマンドを必要とだけ置くことです。そしてsetuidスクリプト自体は、この(ルートを使用した)のように:このように

chmod u+s myscript.sh 

、このスクリプトを実行すると、あなたのスクリプト(ルート)の所有者の権限を付与します。

EDIT:コメントに記載されているとおり、stuidはシェルスクリプトには使用できません。このソリューションは、実行可能ファイルに対してのみ機能します。

+0

シェルスクリプトで 'suid'フラグを設定するのは、**危険な**ですが、Linuxはそれを無視します。詳細については、答えにリンクされているWikipediaの記事を参照してください。 –

+0

申し訳ありませんA.H.、私は完全にあなたを理解していません。あなたはLinuxがsetuidを無視することを意味しますか?それはなぜ危険なのですか? – Yousf

+2

Linuxはスクリプトで 'suid' **を無視します**、実行可能ファイルはokです。多くのUNIXの派生物は、最近そうしています。いくつかの理由がある[ここで説明](http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html) –

1

スクリプトの最後の行で/home/memarexweb/public_html/devel/のモードを777に変更しているため、ユーザー "repository"はroot特権なしでそのディレクトリにファイルをコピーできるはずです。その場合、sudoやsuを使う必要はありません。

ただし、ディレクトリのアクセス権を777に変更することは、誰でもそのディレクトリに書き込み、ファイルを作成または削除することができるため、危険です。ディレクトリの所有権をユーザー "リポジトリ"に変更し、モードを755に変更する方が良いでしょう。これが実現できない場合は、 "リポジトリ"がディレクトリに書き込むことを許可するPOSIX ACLを追加することができます。詳細はGoogleの "POSIX ACL"を参照するか、getfaclsetfaclのマニュアルページをお読みください。

3

ルートユーザーが所有する新しいプロセスを開始します。そのプロセスが終了または停止されると、スクリプトを実行するユーザーとして次の行が再度実行されます。

可能な解決策は、sudoを使用してスクリプト全体を実行し、そのスクリプトにsudo権限を使用してスクリプトを実行させることです。これを行うには、visudoコマンドを使用して/etc/sudoersファイルを編集する必要があります。

関連する問題