簡體   English   中英

為'apache'用戶生成SSH密鑰

[英]Generating SSH keys for 'apache' user

如何在Linux中為'apache'用戶添加SSH密鑰?

背景

我試圖向github添加服務掛鈎,以便在我推送到我的倉庫后通知URL。 我有以下php頁面設置:

<?php `git pull origin master`;  

但是我得到以下輸出:

sh: git: Permission denied

這是因為我為github訪問生成的密鑰是由我的“root”用戶生成的。 但是,當我從php中執行命令時,運行它的是'apache'用戶。

因此,密鑰不對應,並且拒絕許可。

由於我無法從終端切換用戶生成密鑰為'apache',我不太清楚該怎么做。 誰有人建議解決方案?

您可能必須在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_rsaid_dsa 您可以更改復制密鑰的名稱以與此匹配。

您還可以更改id_rsa密鑰和.ssh目錄的所有權:

chown -R apache:apache /var/www/.ssh
chmod 0700 /var/www/.ssh
chmod 0600 /var/www/.ssh/id_rsa

因為你是root用戶,你可以試試sudo -u apache ssh-keygen -t rsa

只需在yvan的回答下發布@KitCarrau的評論,這對我有用

sudo -u apache ssh-keygen -t rsa

對於debian

sudo -u www-data ssh-keygen -t rsa

在此之后單擊Enter兩次,以跳過密碼

另外,它建議在/var/www/.ssh目錄中創建公鑰/私鑰,即使我在/home/my_user/www有我的www /home/my_user/www ,也沒關系。

現有答案要么不完整,要么不安全。 如果將.ssh目錄放入apache用戶( /var/www )的主目錄中,那么這也很可能會提供該目錄的內容,從而將您的ssh私鑰暴露給公共Web。 為了防止這種情況,您必須配置apache 不要.ssh目錄提供服務,但現有的答案都沒有解釋如何執行此操作。

我還認為將.ssh目錄設置為公開服務的www-root的子目錄仍然很危險,因為即使您向apache配置添加規則,升級服務器或執行不相關的其他配置也可能會覆蓋此規則沒有你注意到。

所以這里有一個答案,將密鑰放在別處,默認情況下不由apache提供。 甚至沒有必要成為www-data用戶,因為其他人正在努力。

首先,找出我們的apache用戶的主目錄,例如查看/etc/passwd並查找www-data用戶,或者調用您的發行版的apache用戶。 主目錄可能是/var/www

然后運行(用你的設置上的apache用戶的主目錄替換/var/www ):

$ 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用戶將使用$HOME/www-data.ssh/id_rsa的ssh密鑰進行所有ssh連接,並且因為您的$HOME可能與/var/www ,所以該目錄將不會被提供。 因此,即使沒有向apache添加任何自定義規則,用戶也可以看到你的.ssh/config但他們將無法訪問它指向的私鑰。 不過,您的www-data用戶將知道如何操作。

我遇到了類似的問題,還有一個額外的問題。 為了使用apache用戶進行ssh,您還需要編輯/etc/passwd文件,以便apache的指令定義了shell。

就我而言,我需要改變

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

apache:x:48:48:Apache:/var/www:/bin/bash

要添加到@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/

我不知道這是否適用於redhat(我假設你正在運行)然而,我能夠通過執行以下操作來su-www-data(apache用戶為debian):

sudo su www-data

它確實起了聳聳肩的作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM