Я полный апач-новичок, и после долгого выдергивания волос и скрежета зубов наконец-то получил SFTP-доступ к новому экземпляру EC2 в пассивном режиме. Можно войти только как «ec2-user» или «root» без пароля, но не с моим именем пользователя и / или паролем ... Я создал файл .htaccess в / home / admin, / home / ec2-user, и каталоги / home / myusername ... Я настроил /etc/httpd/conf/httpd.conf, /etc/vsftpd/vsftpd.conf, а также изменил настройки группы безопасности AWS и порты / протоколы в соответствии с этими настройками, и создал файл .ssh / authorized_keys для каждого из указанных выше пользовательских каталогов. Я не могу перетаскивать / перетаскивать с локального компьютера на экземпляр EC2 через FTP-клиент (Filezilla), поэтому, очевидно, хотя я могу войти в систему как пользователь ec2, у меня нет прав на запись. Подозреваю, мне нужно поесть ... что-нибудь?

Я использую настройку vsftpd, рекомендованную здесь

Есть идеи, что мне нужно изменить, чтобы 1) войти в систему через Filezilla как «myusername», а не «ec2-user» или «root»?

PS: У меня установлено и работает большинство подходящих инструментов командной строки AWS ...

answer

Вы упомянули (и, возможно, запутали) несколько разных вещей, поэтому ваша цель, к сожалению, не совсем ясна.

  1. SFTP - не существует такого понятия, как `` пассивный SFTP '' - протокол SFTP полностью отличается от FTP и обрабатывается / usr / libexec / openssh / sftp-server (установлен в / etc / ssh / sshd_config), а не vsFTPd
  2. Файлы Apache .htaccess не имеют ничего общего с FTP - они определяют правила того, как ваш веб-сервер будет доставлять контент (то есть посетителю вашего сайта).
  3. Вы пытаетесь использовать FTP для SFTP?
  4. Вы пытаетесь обслуживать веб-сайты из / home / admin, / home / ec2-user и т. Д.? В Linux от Amazon корневой веб-каталог по умолчанию для Apache - / var / www / html. Обычно вы добавляете туда свой контент или вам нужно изменить DocumentRoot в httpd.conf.

vsFTPd можно настроить для использования локальных пользователей. Для этого:

  • установите local_enable = YES и chroot_local_user = YES (vsftpd.conf)
  • создайте своего системного пользователя (useradd) (с / sbin / nologin в качестве оболочки) - пользователь будет ограничен своим домашним каталогом (директива chroot выше)
  • установить пароль (passwd)
  • Перезапустите vsftpd, чтобы изменения конфигурации вступили в силу.
  • Вход через FTP (не SFTP)

Для SFTP (без vsftpd!):

  • Добавьте / usr / libexec / openssh / sftp-server в / etc / shells
  • Создайте нового пользователя с оболочкой / usr / libexec / openssh / sftp-server
  • Установите пароль для вашего нового пользователя
  • Войдите через SFTP. Здесь вы не будете ограничены своим домашним каталогом, но не сможете писать туда, где у вашего пользователя нет разрешений.

Теперь о проблеме с разрешениями, с которой вы столкнулись:

  • Во-первых, НЕ переходите и не изменяйте разрешения или права собственности на файлы только потому, что вы не можете писать в каталог. Большинство каталогов принадлежат пользователю root и доступны для записи только владельцу.
  • Для веб-сервера держите свои разрешения ограниченными - 644 (rw-r - r--) или меньше - (группа и другие не должны нуждаться в разрешениях на запись; и в большинстве случаев никому не нужны разрешения на выполнение)
  • Установите право собственности на файл так же, как пользователя, запущенного на вашем веб-сервере, как если бы вы использовали динамические файлы (например, PHP).

Поэтому ваши варианты:

  • Обслуживайте файлы из домашнего каталога вашего пользователя (вместо / var / www / html) - держите вашего пользователя в chrooot и установите DocumentRoot в httpd.conf так, чтобы он указывал на правильный путь. Это хороший (безопасный) подход, но типичное изменение, которое вносится, заключается в установке домашнего каталога пользователя на путь в / var / www / html (например, для нескольких человек с их собственными сайтами, / var / www / html / ИМЯ ПОЛЬЗОВАТЕЛЯ - с соответствующим установленным DocumentRoot)
  • Предоставьте своему пользователю Apache доступ по FTP / SFTP - это звучит разумно, но особенно использование FTP небезопасно.
  • Используйте SCP и переключите своего пользователя на root (sudo) - он имеет свои применения, но не для сохранения файлов в каталог веб-сервера - все созданные файлы принадлежат пользователю root

Я бы порекомендовал SFTP с сертификатом, а ваши домашние каталоги в / var / www / html


Конкретные команды для добавления пользователя SFTP в Linux от Amazon:

Отказ от ответственности: использовать сертификаты гораздо безопаснее, чем пароли, и вам следует отключить аутентификацию с помощью пароля.

#Add the shell
echo /usr/libexec/openssh/sftp-server >> /etc/shells

#Create a user with the shell, I have not setup a home folder
useradd -M -s /usr/libexec/openssh/sftp-server USERNAME

#Set the password
passwd USERNAME

Edit /etc/ssh/sshd_config:
Change: PasswordAuthentication no to PasswordAuthentication yes (line 69), save and quit

#Restart SSH
service sshd restart


Чтобы ограничить пользователя одним каталогом (например, chroot):

Поскольку sftp-сервер не будет в вашем chroot-пути, нам нужно изменить его: Изменить (в sshd_config):

Subsystem      sftp    /usr/libexec/openssh/sftp-server

К:

Subsystem     sftp   internal-sftp

Добавьте следующее в конец sshd_config (замените путь, например, / var / www):

Match User USERNAME
    ChrootDirectory /path/to/restrict/to
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp
Match

Перезапустите SSH:

service sshd restart