web-dev-qa-db-ja.com

「Apache」ユーザーのSSHキーの生成

Linuxで「Apache」ユーザーのSSHキーを追加するにはどうすればよいですか?

[〜#〜] background [〜#〜]

リポジトリにプッシュしたら、サービスフックをgithubに追加してURLを通知しようとしています。次のphpページを設定しています。

<?php `git pull Origin master`;  

ただし、次の出力が表示されます。

sh: git: Permission denied

これは、githubアクセス用に生成したキーが「root」ユーザーによって生成されたためです。しかし、PHPからコマンドを実行するとき、それを実行するのは「Apache」ユーザーです。

したがって、キーは対応せず、プルする許可が拒否されます。

「Apache」としてキーを生成するために端末からユーザーを切り替えることはできないため、どうすればよいかわかりません。誰でも解決策を提案できますか?

39
Kit

ルートであるため、試してみることができますSudo -u Apache ssh-keygen -t rsa

24
yvan

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
42
Vincent

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ディレクトリに公開/秘密キーを作成することをお勧めします。

14
dav

既存の回答は不完全または安全ではありません。 .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ユーザーはその方法を知っています。

4
josch

同様の問題に遭遇しましたが、もう1つ余分な障害があります。 Apacheユーザーを使用してsshを実行するには、/etc/passwdファイル。これにより、Apacheのディレクティブにシェルが定義されます。

私の場合、私は変更する必要がありました

Apache:x:48:48:Apache:/var/www:/sbin/nologin

Apache:x:48:48:Apache:/var/www:/bin/bash
1
dkinzer

これがredhatで機能するかどうかはわかりません(実行しているのはそれだと思います)が、次を実行することでwww-data(debianのApacheユーザー)にsuすることができました:

Sudo su www-data

実際に動作しましたshrugs go figure

1
Thomas Wright

@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/
1
Jim Howard