2011-01-07 19 views
0

mercurialリポジトリを設定するシェルスクリプトを作成し、グループ内のすべてのユーザーに "開発者"がこのスクリプトを実行できるようにしたいと考えています。sudoで実行中のシェルスクリプトの入手

スクリプトはユーザー "hg"が所有し、実行時に正常に動作します。この問題は、sudoを使用して別のユーザーと を実行しようとすると、別のファイルのソースを試みるときに "許可が拒否されました"というエラーで実行が停止します。

問題のスクリプトファイル:

create_repo.sh

#!/bin/bash 

source colors.sh 

REPOROOT="/srv/repository/mercurial/" 
... rest of the script .... 

create_repo.shの権限、およびcolors.sh:

-rwxr--r-- 1 hg hg 551 2011-01-07 10:20 colors.sh 
-rwxr--r-- 1 hg hg 1137 2011-01-07 11:08 create_repo.sh 

sudoersの設定:

%developer ALL = (hg) NOPASSWD: /home/hg/scripts/create_repo.sh 

私は、実行しようとしている:

[email protected]:~$ id 
uid=1000(user) gid=1000(user) groups=4(adm),20(dialout),24(cdrom),46(plugdev),105(lpadmin),113(sambashare),116(admin),1000(user),1001(developer) 

[email protected]:~$ sudo -l 
Matching Defaults entries for user on this host: 
    env_reset 

User user may run the following commands on this host: 
    (ALL) ALL 
    (hg) NOPASSWD: /home/hg/scripts/create_repo.sh 

[email protected]:~$ sudo -u hg /home/hg/scripts/create_repo.sh 
/home/hg/scripts/create_repo.sh: line 3: colors.sh: Permission denied 

したがって、スクリプトは実行されますが、他のスクリプトを含めると停止します。

私も使って試してみました:

のuser @ NEBU:同じを与える〜$ sudoを-u HG/binに/ bashのを/home/hg/scripts/create_repo.sh

を結果。

別のシェルスクリプトを組み込む正しい方法は何ですか?スクリプトを別のユーザーで実行する場合は、sudoを使用しますか?

+0

あなたの権限は間違っています。スクリプトは誰でもアクセスできるように実行可能でなければなりません。スクリプトがソース化され実行されることがない場合、実行可能であってはなりません。 'chmod a + x create_repo.sh; chmod a-x colors.sh' –

+0

なぜなら、 '' create_repo.sh ''は '' a + x ''を持たないのは、 '' sudo -u hg ''を使って実行されるためです。 colors.shには他の人のために設定されたexecビットがありません。削除する必要はありません。 –

答えて

1

おそらく、スクリプトではsourceというファイルが現在のディレクトリにあり、現在のディレクトリを読み取るためのアクセス権がないために失敗します。原因はsudoです。

source /home/hg/scripts/colors.shを試してみてください。

+1

Spot on!これを$(dirname $ 0)/colors.shに置き換えました。ありがとうございました。 –

関連する問題