Как передать пользователя www-data в папку в моей домашней папке?

31

У меня есть папка: /home/myuser/folderA

Я хочу предоставить пользователю www-data право на запись вышеупомянутого, в то время как myuser по-прежнему имеет обычный доступ (так как в любом случае это домашняя папка myuser).

Какие команды мне нужно использовать?

Примечание: я не хочу www-dataиметь доступ к другим папкам в /home/myuser/.

Заранее спасибо.

nLinked
источник

Ответы:

46

Сначала добавьте себя в группу www-data

usermod -a -G www-data (your username)

Затем:

chgrp www-data /home/myuser/folderA
chmod g+rwxs /home/myuser/folderA

Должен делать свое /home/myuserдело, если только ваши разрешения не разрешают доступ другим пользователям.

Первая команда меняет групповую принадлежность папки на принадлежность веб-сервера. Вторая команда дает членам www-dataгруппы чтения, права записи, введите-каталог, и группа sфлаг гарантирует , что все файлы , которые получают создаваемые внутри этого каталога взять в www-dataкачестве группы - так что если вы создаете файл как пользователь будет иметь доступ.myuserwww-data

В северном направлении это также зависит от umaskнастроек как вашей учетной записи пользователя, так и веб-сервера: вам необходимо убедиться, что файлы, созданные в папке A, имеют групповой rwдоступ (и каталоги, созданные в группе потребностей rwx)

Если ваш веб-сервер не имеет прав на вход в ваш /home/myuserкаталог (вполне разумно), он не сможет войти туда, если вы не сделаете что-то еще. Два Солнца:

  1. sudo mount --bind /home/myuser/folderA /var/www/mysite/folderA (Это уродливый хак, и его нужно будет повторить после перезагрузки. Но мощный прием также можно использовать, чтобы сделать папки доступными внутри SSH-тюрем.)

  2. Просто переместите общую папку в другое место, например /home/shared-stuff/folderA.

Второй вариант самый хороший. Допустим, материал в папке A действительно публичный, и вам все равно, кто его видит, вы можете настроить его следующим образом

sudo mkdir -m777 /home/shared-stuff

Затем вы можете поместить в эту, скажем, папку A с разрешениями, как указано выше, и папку B, к которой у www-данных не должно быть доступа с другими разрешениями, например

$ cd /home/shared-stuff ; ls -l
drwxrwsr-x 2 myuser www-data   4096 Jan 17 21:46 folderA
drwxrwx--- 2 myuser myuser     4096 Jan 17 21:46 folderB
artfulrobot
источник
что sвнутри g+rwxs?
Т.Тодуа
«Группа липкая» немного. Этот эффект объясняется в пункте, который начинается с «Первый ...» :-)
artfulrobot
6

Другой способ - изменить имя пользователя непосредственно в конфигурации Apache, если это локальный компьютер, и вы сохраняете изображения откуда-то еще, что нарушает любые разрешения, сделанные для папки. То же самое делать, если у вас всего 1 пользователь и вам нет дела до www-данных!

$ sudo vi /etc/apache2/apache2.conf

Найти пользователя и группу и поставить свой
User <Your User>
Group <Your Group>

$ sudo service apache2 restart
Shadowbob
источник
Это решение не кажется таким безопасным, кто-нибудь знает, какие угрозы безопасности будет вызывать этот параметр?
Fleuv
Я совершенно уверен, что это небезопасно, поэтому я дал точность только для локальной машины.
Shadowbob
Это решение обеспечивает полный доступ apache к вашей папке ...
Loenix