sudo -uでapacheプロセスから他のユーザーとして公開鍵認証scpする
Posted: Updated:
PHPから他のユーザーとして特定のコマンドを実行
本来の公開鍵認証はauthuserに設定してあって,authuserは下記のコマンドをパスワードなしで実行できます.
% scp /path/to/file user@host:/move/to/file
これと同様のscpコマンドをPHPからshell_execやバックティック(`)で実行したいのですが.公開鍵認証はauthuserのモノなので,普通に実行するとコピー先のサーバーに当然認証されず失敗します.
sudoersを編集
$ visudo
apache ALL=(authuser) NOPASSWD: /usr/bin/scp
そこでapacheの実行ユーザに,sudoを使ってauthuserの/usr/bin/scpをパスワードなしで実行可能にしてあげます.
shell_execで実行
PHPからscpコマンドを実行します.authuserのもつ公開鍵で認証するのでscpをするっと行えます.
<?php
$filepath = 'mado/homu.dat';
file_put_contents($filepath, $contents);
shell_exec('sudo -u authuser scp '.$filepath.' user@host:/move/to/file');
?>
そんなかんじで,rootになる以外にも委譲的な使い方でsudo便利ですね.