sudo
私のユーザーが(スクリプトから開始された)ホームディレクトリからWebディレクトリにファイルをコピーできるようにしたいと思います。
コマンドは次のとおりです。
sudo cp /home/$LOGNAME/file_source /var/www/$LOGNAME_file_dest
そのため、sudoersファイルに次の行を追加しました。
%users ALL=(ALL)NOPASSWD:/bin/cp /home/$LOGNAME/file_source /var/www/$LOGNAME_file_dest
パスワードを入力するように求められますので、正しく機能しませんが、入力しないsudo
でください。$LOGNAME
sudoerファイルや同様の内容で説明されていない変数の問題のようです。
私は制御光であり、これは非常に厳しい条件でなければならず、*
そうでなければ他の何も受け入れられないということに言及することをほとんど忘れてしまった。
誰でもこのような問題を解決できますか?それとも、痛みを伴う道を進んで、1人のユーザーが自分のファイルをディレクトリcp
に追加できるようにする必要がありますか?/var/www
ベストアンサー1
シェル変数はシェルによって解釈され、sudoまたはそれを使用して開始された他のプログラムでは表示されません。つまり、実行時foo=bar; echo "$foo"
にシェルが実行される前にそれを拡張するecho
ため、渡すデータが「foo」という変数から来るという事実は全くわかりません。echo
したがって、sudoersファイルでシェル変数を透過的に機能させることは不可能です。
また、何でも可能であるため、使用するかどうかにかかわらず、デフォルトで$LOGNAME
実行したいことは、デフォルトで後ろにアスタリスクがあるのと/home
同じです。sudoers
デフォルトでは、ルートとして何でもコピーできるので、これはお勧めできません。これは大きなセキュリティリスクです($LOGNAME
含まれる可能性があるため..
)。結局は使いたくないと言うが*
、取ろうとする行動も同様に危険です。
最善の方法は、これらのユーザーにすべてのものへの読み取りアクセスを許可し、/home/$LOGNAME/file_source
それらへの書き込みアクセスを許可することです/var/www
。www-logs
これらのパスに対してグループ読み取りとグループ書き込みを実行するグループがある可能性があります。