Linuxで「Apache」ユーザーのSSHキーを追加するにはどうすればよいですか?
[〜#〜] background [〜#〜]
リポジトリにプッシュしたら、サービスフックをgithubに追加してURLを通知しようとしています。次のphpページを設定しています。
<?php `git pull Origin master`;
ただし、次の出力が表示されます。
sh: git: Permission denied
これは、githubアクセス用に生成したキーが「root」ユーザーによって生成されたためです。しかし、PHPからコマンドを実行するとき、それを実行するのは「Apache」ユーザーです。
したがって、キーは対応せず、プルする許可が拒否されます。
「Apache」としてキーを生成するために端末からユーザーを切り替えることはできないため、どうすればよいかわかりません。誰でも解決策を提案できますか?
ルートであるため、試してみることができますSudo -u Apache ssh-keygen -t rsa
Apacheユーザーの.sshディレクトリにルート生成キーをコピーする必要がある場合があります。
Apacheのhomedirが/ var/www(/ etc/passwdをチェック)で、名前付きキーがid_rsa-gitであると仮定します:
mkdir -p /var/www/.ssh/
cp /root/.ssh/id_rsa-git /var/www/.ssh/id_rsa
公開鍵をコピーする必要はありません。
注:デフォルトで使用されるキーはid_rsaまたはid_dsaです。これに合わせて、コピーしたキーの名前を変更できます。
id_rsaキーおよび。sshディレクトリの所有権を変更することもできます。
chown -R Apache:apache /var/www/.ssh
chmod 0700 /var/www/.ssh
chmod 0600 /var/www/.ssh/id_rsa
Yvanの答えの下で、@ KitCarrauのコメントを投稿するだけで、私にとってはうまくいった
Sudo -u Apache ssh-keygen -t rsa
debian用
Sudo -u www-data ssh-keygen -t rsa
この後、Enterを2回クリックして、パスフレーズをスキップします
また、/var/www/.ssh
にwwwディレクトリがある場合でも、/home/my_user/www
ディレクトリに公開/秘密キーを作成することをお勧めします。
既存の回答は不完全または安全ではありません。 .ssh
ディレクトリをApacheユーザーのホームディレクトリ(/var/www
)に配置すると、そのディレクトリのコンテンツも提供される可能性が高くなり、sshプライベートキーが公開Webに公開されます。これを防ぐには、Apache notを設定して.ssh
ディレクトリを提供する必要がありますが、既存の回答ではその方法は説明されていません。
.ssh
ディレクトリを一般公開のwww-rootのサブディレクトリにすることは、Apache構成にルールを追加した場合でも、サーバーをアップグレードしたり、無関係な他の構成を実行したりする可能性があるため、やはり危険だと主張します気付かないうちにこのルールをオーバーライドしてください。
そのため、キーを他の場所に配置する回答があります。デフォルトでは、Apacheによって提供されません。他の人が苦労しているので、www-data
ユーザーになる必要さえありません。
まず、/etc/passwd
を調べてwww-data
ユーザーを検索するか、ディストリビューションのApacheユーザーが呼び出されるなどして、Apacheユーザーのホームディレクトリを見つけます。ホームディレクトリはおそらく/var/www
です。
次に実行します(/var/www
をセットアップのApacheユーザーのホームディレクトリに置き換えます):
$ mkdir "$HOME/www-data.ssh"
$ ssh-keygen -q -t rsa -f "$HOME/www-data.ssh/id_rsa" -N ""
$ chown -R www-data:www-data "$HOME/www-data.ssh"
$ mkdir /var/www/.ssh
$ cat << END > /var/www/.ssh/config
> Host *
> IdentityFile $HOME/www-data.ssh/id_rsa
> END
$ chown -R www-data:www-data /var/www/.ssh
これで、www-data
ユーザーはすべてのssh接続に$HOME/www-data.ssh/id_rsa
のsshキーを使用し、$HOME
はおそらく/var/www
とは異なるため、そのディレクトリは提供されません。そのため、Apacheにカスタムルールを追加しなくても、ユーザーは.ssh/config
を見ることができますが、それが指す秘密鍵にアクセスすることはできません。それでも、www-data
ユーザーはその方法を知っています。
同様の問題に遭遇しましたが、もう1つ余分な障害があります。 Apacheユーザーを使用してsshを実行するには、/etc/passwd
ファイル。これにより、Apacheのディレクティブにシェルが定義されます。
私の場合、私は変更する必要がありました
Apache:x:48:48:Apache:/var/www:/sbin/nologin
に
Apache:x:48:48:Apache:/var/www:/bin/bash
これがredhatで機能するかどうかはわかりません(実行しているのはそれだと思います)が、次を実行することでwww-data(debianのApacheユーザー)にsuすることができました:
Sudo su www-data
実際に動作しましたshrugs go figure
@Vincentに追加するには、SELinuxを有効にしている場合、新しい.sshフォルダーのコンテキストを設定する必要があります。
RHELで、このファイルに次を追加します。/etc/selinux/targeted/contexts/files/file_contexts.homedirs
/var/www/[^/]*/.+ system_u:object_r:user_home_t:s0
/var/www/[^/]*/\.ssh(/.*)? system_u:object_r:ssh_home_t:s0
そして、コマンドを実行します
# restorcon -Rv /var/www/