sudo -uでapacheプロセスから他のユーザーとして公開鍵認証scpする

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便利ですね.