LINUX.ORG.RU
ФорумAdmin

Как создать пользователя vsftpd и дать ему доступ к /var/www?

 , ,


0

3

Здравствуйте. Подскажите, какие нужно команды написать, чтобы создать нового пользователя, у которого будет доступ к папке /var/www - это место, где лежат все папки с сайтами. Чтоб пользователь мог создавать, удалять и редактировать папки и файлы. Мне даже лучше, если пользователь будет иметь доступ ко всему серверу, чтобы проще было конфиги редактировать.

Казалось бы, это же базовая потребность FTP, но я не могу найти в сети ни одной инструкции, в которой бы было сказано, как такое реализовать. Там либо: А давайте создадим пользователя и дадим ему доступ к папке ftp, в которой нифига нет и которая никому не сдалась Либо: А давайте создадим пользователя, но чтобы у него не было никаких прав на редактирование, а то удалит что-нибудь лишнее (а н***я он тогда вообще нужен?) извините. бомбит у меня.

У меня Ubuntu 20 и apache.

Напишите пожалуйста, что нужно сделать в консоли или скиньте ссылку на инструкцию пожалуйста

Перемещено alpha из web-development

Ответ на: комментарий от nastya97core

После правки sshd_config нужно снова выдать 770?

Нет. Одного раза достаточно.

меняю Subststem и дописываю...

Попробуйте так:

        Subsystem sftp internal-sftp
        Match group mysite
        ChrootDirectory /var/www/
        ForceCommand internal-sftp -d mysite -u 0007
        X11Forwarding no
        AllowTcpForwarding no

Затем перезапустите сервис: sudo systemctl restart sshd

Что я упустила?

Покажите, пожалуйста, вывод следующей команды: sudo ls -l /var/www.

Скорее всего, изменен владелец и права на каталог /var/www. Владельцем должен быть root.

Выполните следующие команды:

sudo chown root:root /var/www/

sudo chmod 755 /var/www/

Kinlipan
()
Последнее исправление: Kinlipan (всего исправлений: 1)
Ответ на: комментарий от anc

«Уверенны что это всё?»

Учите для начала русский язык, олух …

Владимир

anonymous
()
Ответ на: комментарий от Kinlipan

Я переустановила сервер на всякий пожарный, поэтому там ничего нет кроме mysite2.com

поэтому ls возвращает вот что root@ruvds-oii0x:~# sudo ls -l /var/www sudo: unable to resolve host ruvds-oii0x: Name or service not known total 4 drwxrwx— 3 nobody mysite2 4096 Aug 12 21:41 mysite2.com

в sshd_config я верно указывала mysite2 и mysite2

так, что имею сейчас: пользователя user4 пускает, он сразу же попадает в главную директорию (не /var/www, а просто /) и видит все папки, но ни одну открыть не может. При попытке открыть, условно, /var - выходит сообщение: Ошибка: Directory /var: no such file or directory

root же по прежнему может подключаться куда угодно и никаких проблем у него нет.

Что ему блин ещё нужно?

nastya97core
() автор топика
Ответ на: комментарий от nastya97core

sudo: unable to resolve host ruvds-oii0x

Исправьте эту ошибку. У вас хост отсутствует в /etc/hosts. Выполните следующие команды:

su -

nano /etc/hosts

И добавьте в открывшийся конфигурационный файл /etc/hosts следующую строку:

127.0.0.1 ruvds-oii0x

это?

Да. А в sshd_config что прописали? Каталог mysite2 создали с нужными правами?

Kinlipan
()
Последнее исправление: Kinlipan (всего исправлений: 2)
Ответ на: комментарий от nastya97core

total 4 drwxrwx— 3 nobody mysite2 4096 Aug 12 21:41 mysite2.com

А должен быть root.

Выполните:

su -

chown root:root /var/www/

chmod 755 /var/www/

Затем снова покажите вывод этой команды:

ls -l /var/www

Kinlipan
()
Последнее исправление: Kinlipan (всего исправлений: 1)
Ответ на: комментарий от Kinlipan

После каждого пука я перезапускаю sshd. Нет ошибок.

Мне всё не даёт покоя эта статья: https://wiki.dieg.info/sftp

 
addgroup –system sftpusers
nano /etc/ssh/sshd_config

#там я пишу
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
ForceCommand internal-sftp -u 0007
AllowTcpForwarding no
X11Forwarding no

#далее продолжаем
useradd -d /var/www/mysite.com -s /bin/false -g sftpusers user4 
passwd user4

mkdir /var/www
mkdir /var/www/mysite.com

find /var/www/mysite.com -type f -exec chmod 660 {} ;
find /var/www/mysite.com -type d -exec chmod 770 {} ;
chown -R user4:sftpusers /var/www/mysite.com;
chmod 755 /var/www/mysite.com;
chown root:root /var/www/mysite.com;

systemctl restart sshd

#в статье не писали про замену UMASK
nano /etc/login.defs

systemctl restart sshd

chown root:root /var/www/
chmod 755 /var/www/

systemctl restart sshd

Вот этот код меня закидывает непосредственно в mysite.com, НО я не могу ничего там ни создать, ни отредактировать

nastya97core
() автор топика
Ответ на: комментарий от nastya97core

ChrootDirectory %h

Можно и так, но придется назнать chroot-каталог домашним каталогом пользователя (-ей).

ForceCommand internal-sftp
ForceCommand internal-sftp -u 0007

Два раза? Зачем?

в статье не писали про замену UMASK

А вы поняли для чего это нужно? Надеюсь, что вы не бездумно копируете определенные команды.

useradd -d /var/www/mysite.com -s /bin/false -g sftpusers user4

Эта опция устанавливает /var/www/mysite.com домашним каталогом пользователя user4.

chown root:root /var/www/mysite.com

Вы сделали root владельцем каталога mysite.com.

я не могу ничего там ни создать, ни отредактировать

Неудивительно.

Kinlipan
()
Ответ на: комментарий от Kinlipan

А я сразу сказал: ничего не выйдет. Но вы продолжайте, я потом еще зайду.

anonymous
()
Ответ на: комментарий от Kinlipan

я плакать сейчас начну. блин... чего ему нужно?

Неудивительно, потому что я сделала владельцем mysite.com root? Так user4 и до этого не мог ничего «добавлять» или «удалять».

UMASK, если я правильно поняла, завязан на session optional pam_umask.so . И в случае его отсутствия его нужно прописывать. Однако, чтобы я не написала 022, либо 007 - плевать. Править каталог не могу

Что нужно ещё сделать?

nastya97core
() автор топика
Ответ на: комментарий от nastya97core

чего ему нужно?

Сделать все правильно.

Неудивительно, потому что я сделала владельцем mysite.com root?

Да.

user4 и до этого не мог ничего «добавлять» или «удалять»

А вы точно все правильно сделали?

UMASK, если я правильно поняла, завязан на session optional pam_umask.so . И в случае его отсутствия его нужно прописывать

Верно.

чтобы я не написала 022, либо 007 - плевать. Править каталог не могу

UMASK 007 в данном случае нужен только лишь для того, чтобы пользователь (-и) мог (-ли) загружать на sFTP-сервер файлы сразу с правильными правами (770).

Что нужно ещё сделать?

У вас так ничего не выйдет. Анонимный пользователь прав. Нужен онлайн-чат, чтобы в реальном времени настройка проходила, и вы сразу могли ответить. Иначе мы по кругу можем бесконечно ходить.

Kinlipan
()
Ответ на: комментарий от nastya97core

Я не специалист, но я попробовал, с твоими инструкциями из этого поста на который отвечаю.

Вобщем, да, ты права, у меня тоже не создаётся директория внутри /var/www/mysite.com. Собственно, теми командами это и очевидно, после chown root:root /var/www/mysite.com то! Я удивлён что так пишут «в интернетах», и советуют здесь.

Как work-around: если создать внутри той директории другую (chown -R user4:sftpusers /var/www/mysite.com, sudo -u user4 mkdir /var/www/mysite.com/qwerty, и обратно chown root:root /var/www/mysite.com), то внутри той (qwerty) всё работает, директории создаются, и файло туда закачивается.

Как по уму сделать – не знаю, надо попробовать-посмотреть ещё. Может ещё кто подскажет.

@Kinlipan: респект за помощь ТС-у, несмотря на переходы на личность в разделе лор (объяснения твоей помощи темой СПВПФ – это переход и есть)

the1 ★★
()
Последнее исправление: the1 (всего исправлений: 1)
Ответ на: комментарий от Kinlipan

Вы спрашиваете «всё ли я правильно сделала»? Я же выше список команд сбросила. Это History был. Если chown root:root /var/www/mysite.com; не делать, то пользователь вообще подключиться не может.

Вы пишите, что неудивительно. Скажите тогда, что мне делать, чтобы заработало? У вас есть весь список команд, которые я ввожу. Я это делаю на чистую систему, поэтому никаких конфликтов с предыдущими записями быть не должно

nastya97core
() автор топика
Ответ на: комментарий от the1

По этой логике можно было бы просто root’у выдать права на /var/www, то mysite.com была бы как раз той папкой qwerty. Только у меня нифига не вышло и я вообще подключиться таким макаром не могу

nastya97core
() автор топика
Ответ на: комментарий от nastya97core

я вообще подключиться таким макаром не могу

Аналогично.

Наверно мой work-around кривой, но почему бы и нет. Просто одна лишняя директория будет.

Или подожди, если не спешно, день-два, наверняка кто-нибудь подскажет.

the1 ★★
()
Ответ на: комментарий от nastya97core

Вы спрашиваете «всё ли я правильно сделала»?

Да.

Я же выше список команд сбросила

Этого недостаточно для того, чтобы оценить корректность настройки.

Если chown root:root /var/www/mysite.com; не делать, то пользователь вообще подключиться не может

Верно. У chroot-каталога должен быть владелец root и права 755. Также chroot-каталог должен быть назначен домашним каталогом всех пользователей группы mysite.

Из /var/www/mysite.com не получится рабочего каталога (с правами изменения и удаления файлов) для пользователей группы mysite, если он (упомянутый каталог) уже назначен chroot-каталогом. В качестве рабочего каталога можно использовать /var/www/mysite.com/public_html с назначением ему группы mysite и прав 770.

SFTP-пользователя можно автоматически подключать сразу к нужному рабочему каталогу при авторизованном соединении с SFTP-сервером. Для этого требуется наличие следующих строк в конфигурационном файле /etc/ssh/sshd_config:

...

Subsystem sftp internal-sftp
Match group mysite
ChrootDirectory /var/www/mysite.com
ForceCommand internal-sftp -d /public_html -u 0007
X11Forwaring no
AllowTcpForwarding no
...

Также я рекомендую создать рядом с public_html другие важные каталоги: logs, mail, ssl, tmp (установить им ту же группу и права). Перечисленные каталоги могут пригодиться при настройке веб-сервера (Apache или Nginx).

Скажите тогда, что мне делать, чтобы заработало?

Определиться. Либо вы следуете только моим инструкциям (до тех пор, пока все не получится), либо вы полностью полагаетесь на одну из интернет-статей. А то как в басне Крылова «Лебедь, рак и щука».

Kinlipan
()
Последнее исправление: Kinlipan (всего исправлений: 3)
Ответ на: комментарий от nastya97core

Подойдем с другой стороны: я покажу настройки с одного своего сервера (Debian 10), где используется sftp для работы с файлами сайта. Настроено для одного пользователя, но ничто не мешает переделать для группы.

# /etc/passwd
site:x:1002:1002:,,,:/:/bin/false

# /etc/group
sftponly:x:999:site
site:x:1002:

# /etc/ssh/sshd_config
Subsystem sftp /usr/lib/openssh/sftp-server
Match group sftponly
        ChrootDirectory /home/%u # или в случае одного каталога для группы /home/site
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp

# настройки каталога /home/site/
drwxr-xr-x  5 root     root    site

# внутри /home/site/ каталоги для рабочих нужд
drwxrwsr-x 2 site site    log
drwxrwxr-x 2 site site    tmp
drwxrwxr-x 5 site site    www
gruy ★★★★★
()
Ответ на: комментарий от nastya97core

Тут Kinlipan предлагает эксклюзивную помощь. Попробуй тихонечко что я сейчас напишу. Если не пойдёт – не отвечай мне, и соглашайся на его условия. Редко так помогают, персонально. Я например не буду вести тебя за руку так, как он готов вести.

Вобщем, я вбил в поисковик (использую ддг) «configure sftp access to web-server», вот первая же ссылка. Пробуешь – работает! (как надо, «по уму»). Сравниваешь со своей инструкцией, и видишь два отличия:

  • убрать chown root:root /var/www/mysite.com (это вообще криминал кмк)
  • в /etc/ssh/sshd_config вместо %h (ChrootDirectory) написать явно /var/www (без mysite.com). С текущей проблемой – всё! :)

Твою конечную задачу тоже решить легко: вместо chmod 755 /var/www/mysite.com (из твоей инструкции) можно поставить chmod 700 .... Вводишь второго юзера (user5, с …mysite5.com), ставишь для него тоже пёмишены… ок! Сейчас проверил: перейти в директорию к соседу можно, но посмотреть что там – нет. Совсем всё :)

И ещё я бы присоединился к оптимизму gruy:

…готовые статьи из сети. Твои вопросы там разжеваны и переварены. … и все получится.

(всё получится, тока надо уметь отсеивать мусор из этих ваших интернетов… ну на этот раз я дал рабочую ссылку)

the1 ★★
()
Ответ на: комментарий от Kinlipan

Спасибо. 200%, что я буду использовать именно этот вариант, но вот чисто из любопытства:

  1. почему мы не можем редактировать именно ту папку, к которой мы подключаемся? Зачем нужно мастерить этот «костыль»* из /public_html?
  2. можно ли не выдавать отдельно каждому пользователю его домашнюю папку, а назначать её с помощью группы? Это вообще возможно в linux, чтобы папка была у группы, а не у пользователя?
  3. чёт ещё хотела спросить, но забыла…

ЕЩЁ РАЗ СПАСИБО!

*Костыль в кавычках, потому что это не костыль, а действительно верное решение, потому что в папке будет ещё условный log, и условный tmp

nastya97core
() автор топика
Ответ на: комментарий от nastya97core
  1. Можно. Смотри usermod -d. Главное, чтобы права были правильно настроены.
gruy ★★★★★
()
Ответ на: комментарий от nastya97core

почему мы не можем редактировать именно ту папку, к которой мы подключаемся? Зачем нужно мастерить этот «костыль»* из /public_html?

У chroot-каталога должен быть владелец root и права 755. При этом изменение, удаление или создание файлов обычным пользователем становится невозможным.

Вы же сами писали:

Если chown root:root /var/www/mysite.com; не делать, то пользователь вообще подключиться не может

Помните?

можно ли не выдавать отдельно каждому пользователю его домашнюю папку

Да, но лучше выдавать.

а назначать её с помощью группы?

Можно переназначить домашний каталог для имеющего пользователя при назначении ему пользовательской группы. Например, вот так:

sudo usermod -g mysite -d /var/www/mysite.com user1.

При выполнении вышеуказанной команды сеанс пользователя user1 должен быть завершен.

ЕЩЁ РАЗ СПАСИБО!

Получилось? :-)

Kinlipan
()
Последнее исправление: Kinlipan (всего исправлений: 3)
Ответ на: комментарий от Kinlipan

неа))))) теперь сайт не работает. Пишет ошибку You don’t have permission to access this resource.Server unable to read htaccess file, denying access to be safe и вот это пишет: PHP Fatal error: Failed opening required ‘/var/www/cloudsite/public_html/index.php’ (include_path=‘.:/usr/share/php’) in Unknown on line 0

в интернетах пишут: сделать chown user:user -R /home/user/public_html

я делаю, только вместо user написала www-data (там нужен был какой-то пользователь аффилированных с apache). Если так сделать - сайт работает. sftp - нет.

Тут либо дудочка, либо кувшинчик

nastya97core
() автор топика
Ответ на: комментарий от nastya97core

Тут либо дудочка, либо кувшинчик

Попробуйте так:

# Устанавливаем владельца, группу и права на рабочий каталог

chown -R www-data:tut_gruppa_saita /var/www/cloudsite/public_html
chmod -R 770 /var/www/cloudsite/public_html

Если у www-data после этого все еще не будет доступа:

# Добавляем пользователя www-data в дополнительную группу (пользовательскую группу сайта cloudsite)

usermod -a -G tut_gruppa_saita www-data

Kinlipan
()
Последнее исправление: Kinlipan (всего исправлений: 5)

Этот комментарий будет удален за оффтоп.

Есть же для таких юзкейсов неинтересные, но относительно юзабельные вещи типа https://www.hestiacp.com/ или платные альтернативы.

Если уж тебе лень по контейнерам всех раскидать, то хотя б с этого можно начать и не изобретать велосипед.

Твой подход - это плохо, твои юзеры через скрипты залезут к соседям и зальют им вредный код. После этого ты придешь спрашивать как настроить open_basedir и прочее ненужно, которое не спасет от проблем.

Бери готовую панель или разложи юзеров по контейнерам, другого пути нет.

Ну и да, фтп - ненужно.

p.s. странно смотреть на советы с правами - т.к. если юзер, от которого работает веб-сервер, не будет иметь прав rx, то на вашем апаче (который кстати тоже не нужен, т.к. есть nginx) ничего не запустится.

tfeartx
()
Последнее исправление: tfeartx (всего исправлений: 3)
Ответ на: комментарий от Kinlipan

простой IT-инженер
chown -R www-data:tut_gruppa_saita /var/www/cloudsite/public_html
Если у www-data после этого все еще не будет доступа

Нормальные теперь инженеры, лайк. Это не наезд, но я почитал тред и все это выглядит как копипаст без понимания сути.

Вот например ты делаешь владельцем директории юзера www-data, но после этого возможно (!)

у www-data после этого все еще не будет доступа

Это на свежей системе без доп acl.

Мне чет очень жаль автора треда, она потратила очень много времени на простые задачи. Надеюсь, ее это от линукса не отвратит.

tfeartx
()
Ответ на: Этот комментарий будет удален за оффтоп. от tfeartx

твои юзеры через скрипты залезут к соседям и зальют им вредный код. После этого ты придешь спрашивать как настроить open_basedir и прочее ненужно, которое не спасет от проблем. вечер в хату.

А как? У меня другие пользователи не видят даже, какие сайты кроме его сайта есть. Да даже если бы и знал. Как бы он залил?

nastya97core
() автор топика
Ответ на: комментарий от nastya97core

Как?

tfeartx просто score набивает на этом форуме. Ему нужно 50 очков, чтобы до раздела Talks докачаться. Очередной залетный хочет, например, понацполить.

Скорее всего, он даже пишет сюда из под Windows.

Да даже если бы и знал. Как бы он залил?

Пользователи не могут выйти за пределы своего chroot-каталога. Если shell отключен (опцией /bin/false или /sbin/nologin), тогда и команды никакие по SSH выполнить не могут.

Остаются еще PHP-скрипты, которые они могут загружать на сервер. Могут быть попытки залить вредоносный PHP-скрипт, но при правильной настройке веб-сервера и PHP (в том числе — вышеупомянутый open_basedir) все будет нормально.

Kinlipan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.