2016-08-16 16 views
0

としてユーザーとファイルを作成し、私は名前のファイルを作成するbashスクリプト、create-file.sh、持っている:のsudoで実行bashスクリプトが、所有者

$ cat create-file.sh 
    # /bin/bash 
    touch a 

を私はスクリプトを実行すると、それはファイルを作成します私のユーザーを所有者として 'a'。

$ ./create-file.sh 
$ ls -l 
-rw-r--r-- 1 shai wheel 0 Aug 16 17:19 a 

私はsudoの下にスクリプトを実行するときしかし、ファイルがユーザーとしてrootを使用して作成されます

$ sudo ./create-file.sh 
$ ls -l 
-rw-r--r-- 1 root wheel 0 Aug 16 17:19 a 

は私のユーザーとファイルを作成するために、sudoの下で実行するスクリプトを指示する方法はあります所有者として?

  • あなたは、単一のファイルに触れるスクリプトはsudoの下で実行する必要はないと言うのは間違いありません。この例は当然元の問題を軽減したものですが、私のスクリプトははるかに多く、sudoの下で実行する必要がありますが、所有者として自分のユーザでファイルを作成したいと思っています。
+0

詳細は問題 - - 理想的なアプローチには、例えばsudoのスクリプトをコプロセッサとして実行する非昇格スクリプトのようなものがあります。特定の解決策に焦点を当てた質問では、微妙な調整済みの回答は許されません。 –

+0

ところで、 '#/ bin/bash'は'#!/ bin/bash'ではありません。 '!'は有効なシバンであることが必須です。 –

+0

@Charles Duffy:もちろん、「#!/ bin/bash」、悪いです。 –

答えて

1

sudoSUDO_USERとしてエクスポートします。あなたはchownすることができます。あなたのsudoの設定が許可されている場合、明示的なパスワードプロンプトなしで、他のユーザーに権限をドロップするルート(デフォルトのように)

#!/bin/bash 
touch a 
[[ $SUDO_USER ]] && chown "$SUDO_USER" a 

は同様に、あなたはそれを活用することができます。

#!/bin/bash 

# drop privileges back to non-root user if we got here with sudo 
depriv() { 
    if [[ $SUDO_USER ]]; then 
    sudo -u "$SUDO_USER" -- "[email protected]" 
    else 
    "[email protected]" 
    fi 
} 

depriv touch a 
+0

ありがとう、これは正しいアプローチのように見えます。しかし、私のスクリプトが多くのファイルを作成し、他のスクリプトやシェルコマンドを呼び出すことでそれらのファイルのいくつかを作成する場合、これはうまく拡張できません。私は作成されている各ファイルを事前に知る必要があります。 –

+0

作成されたファイルのデフォルトの所有者をeuid-sorry以外のものにしたい場合は、単純にUNIXのセマンティクスではありません。だから私は、あなたが昇格させる必要があるスクリプトの特定の部分を除いてすべての元のeuidを維持するために、コプロセスのアプローチを提案したのです。 –

+0

代わりに、 'depriv'を使用して"他のスクリプトやシェルコマンド "元のeuidへのアクセス許可)、まあ、あります。それが私がそれを提供した理由です。 –

関連する問題