How do I give www-data user to a folder in my home folder?
I have a folder: /home/myuser/folderA I want to give the www-data user write access to the above, while ‘myuser’ continues to have normal access (as it is myuser’s home folder anyway). Which commands do I need to use? Note: I don’t want www-data to have access to any other folders in /home/myuser/ . Thanks in advance.
2 Answers 2
First, add yourself into the group www-data
usermod -a -G www-data (your username)
chgrp www-data /home/myuser/folderA chmod g+rwxs /home/myuser/folderA
Should do the trick unless the permissions on your /home/myuser do not permit other users access.
The first command changes the group ownership of the folder to that of the webserver. The second command gives members of the www-data group read, write, enter-directory rights, and the group s flag will ensure that any files that get created inside that directory take www-data as the group — so if you create a file as myuser the www-data user will have access.
Nb. this also depends on the umask settings of both your user account and the webserver: you need to make sure that files created in folderA have group rw access (and directories created within need group rwx )
If your webserver does not have enter rights into your /home/myuser dir (quite sensible) then it’s not going to get in there unless you do something else. Two solns:
- sudo mount —bind /home/myuser/folderA /var/www/mysite/folderA (this is an ugly hack and would have to be repeated after reboot. But a powerful trick, also can be used to make folders accessible inside SSH jails.)
- Simply move the shared folder somewhere else, e.g. /home/shared-stuff/folderA .
The 2nd option is nicest. Let’s say the stuff in folderA is really public and you don’t care who sees it, you can set it up like
sudo mkdir -m777 /home/shared-stuff
Then you can put inside that, say, folderA with permissions as above, and folderB that www-data should not have access to with different permissions, e.g.
$ 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
Пользователь и группа www-data
После установки Apache нужно установить правильные права доступа для пользователей и групп. В этом нам помогут команды chown (изменить владельца) и chmod (изменить права доступа). Рассмотрим эти команды, а потом установим владельца для директории /var/www и права доступа к ней.
В Linux существует всего три вида прав — право на чтение ( read ), запись ( write ) и выполнение ( execute ), а также три категории пользователей, к которым они могут применяться — владелец файла ( user ), группа владельца ( group ) и все остальные ( others ).
Команда chmod
Изменяет прав доступа к файлу или директории.
chmod [опции] ВладелецГруппаДругие файл(ы)Копировать
- Опция -R позволяет рекурсивно изменять права доступа для каталога
- Владелец — права доступа в числовом виде для владельца
- Группа — права доступа в числовом виде для группы
- Другие — права доступа в числовом виде для других
Команда chown
Изменяет владельца и/или группу файла или директории.
chown [опции] владелец[:группа] файл(ы)Копировать
Опция -R — позволяет рекурсивно изменять владельца каталога.
Исходные данные
После установки web-сервера
- Apache запущен под пользователем и группой www-data
- Директории виртуальных хостов расположены в /var/www
Нам нужно обеспечить минимальные права для web-сервера (чтение директорий и файлов), чтобы он мог работать. И предоставить необходимые права на создание, редактирование и удаление файлов и директорий разработчику.
Создадим пользователя developer и назначим ему основную группу www-data :
$ sudo useradd -m -s /bin/bash -g www-data developerКопировать
Зададим пароль для нового пользователя:
$ sudo passwd developer Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлёнКопировать
Изменяем владельца
Устанавливаем владельца и группу для всех директорий /var/www :
$ sudo find /var/www -type d -exec chown developer:www-data <> \; -print /var/www /var/www/html /var/www/host1.loc /var/www/host2.locКопировать
Устанавливаем владельца и группу для всех файлов /var/www :
$ sudo find /var/www -type f -exec chown developer:www-data <> \; -print /var/www/html/index.html /var/www/host1.loc/index.php /var/www/host2.loc/index.phpКопировать
Здесь можно обойтись одной командой (но с двумя нагляднее):
$ sudo chown -R developer:www-data /var/wwwКопировать
Устанавливаем права
Устанавливаем права для всех директорий /var/www :
$ sudo find /var/www -type d -exec chmod 755 <> \; -print /var/www /var/www/html /var/www/host1.loc /var/www/host2.locКопировать
- Пользователь developer (разработчик) имеет право на чтение и запись директорий, потому что является их владельцем
- Пользователь www-data (web-сервер) имеет право на чтение директорий, потому что принадлежит к группе www-data
Устанавливаем права для всех файлов /var/www :
$ sudo find /var/www -type f -exec chmod 644 <> \; -print /var/www/html/index.html /var/www/host1.loc/index.php /var/www/host2.loc/index.phpКопировать
- Пользователь developer (разработчик) имеет право на чтение и запись файлов, потому что является их владельцем
- Пользователь www-data (web-сервер) имеет право на чтение файлов, потому что принадлежит к группе www-data
Для наглядности посмотрим на права всех файлов и директорий:
$ cd /var/www $ ls -laR .: итого 20 drwxr-xr-x 5 developer www-data 4096 ноя 15 14:54 . drwxr-xr-x 15 root root 4096 ноя 11 09:32 .. drwxr-xr-x 2 developer www-data 4096 ноя 11 09:32 html drwxr-xr-x 3 developer www-data 4096 дек 4 17:50 host1.loc drwxr-xr-x 2 developer www-data 4096 ноя 15 14:56 host2.loc ./html: итого 20 drwxr-xr-x 2 developer www-data 4096 ноя 11 09:32 . drwxr-xr-x 5 developer www-data 4096 ноя 15 14:54 .. -rw-r--r-- 1 developer www-data 10918 ноя 11 09:32 index.html ./host1.loc: итого 16 drwxr-xr-x 3 developer www-data 4096 дек 4 17:50 . drwxr-xr-x 5 developer www-data 4096 ноя 15 14:54 .. -rw-r--r-- 1 developer www-data 78 дек 4 17:34 index.php ./host2.loc: итого 12 drwxr-xr-x 2 developer www-data 4096 ноя 15 14:56 . drwxr-xr-x 5 developer www-data 4096 ноя 15 14:54 .. -rw-r--r-- 1 developer www-data 46 ноя 15 14:56 index.php
Читайте также
Big Data & Brews Набрёл на странный канал: ребята пьют крафтовое илитное певко и обсуждают Big Data технологии. Как же я сам до такого не…
Как узнать что пользователь находится в Online в Laravel 5.6 Как можно определить, находится ли сейчас пользователь в Online или нет? Решение подходит для последних версий Laravel. Но пример создавался…
Интересные решения с HighLoad Cup В августе 2017 года Mail.Ru Group провёл чемпионат для backend-разработчиков HighLoad Cup. Суть конкурса проста: используя любой стек технологий написать как можно…
default permissions for /var/www
now I want to set the permissions for /var/www to the default.
what are the default permissions for /var/www ?
I am not a member of serverfault so I could not comment or upvote the answer. But this post really nails it: serverfault.com/questions/357108/…
5 Answers 5
The default permission for /var/www itself is a pretty standard one: owner root:root and mod 755 .
As for anything inside /var/www , that is one of the rare directories where you have the privilege of deciding for yourself what to put in it and what permissions everything in it should have. But what makes the most sense is:
- Most files should be writable by whichever user or group is going to be writing to them most. You can set them to be owned by your user account. Or set up a custom group for your developers. Or if the files will be modified rarely and you want good security, you can go with root:root and just sudo in on the rare occasions they’ll be modified.
- Most files should not be world-writable. So, 644 for files, and 755 for directories is appropriate (or 664 and 775 if you want to give a group write access).
- It is not recommended to set any of it to be writable by the web server, ie www-data , except for any specific files your web scripts to be able to write to. If so, it’s better to set the user or group of those files to www-data than to make them world-writable. Note that any time the www-data user can write to any file within the web root, whether it’s by setting the user or group on those files, or making them world-writable, it’s a potential security problem. World-writable is just the worse of the two.
Как задать права для linux user и www-data?
Я понимаю, что в идеале нужно закидывать пользователя в группу www-data и использовать 775 и 664 настройки прав.
Но при создании одним юзером файла. Создается 644 и у www-data Нет прав. Также и наоборот
Я вижу что на хостингах, мы заходим под юзером и редактируем файлы и параллельно www-data может их редактировать.
Как сделать так на локалке?
Простой 2 комментария
В линуксе достаточно прав для разграничения любой сложности, ваша сложность минимальна, вы просо не точно понимаете возможности прав а так же возможности веб серверов.
Как правила в таком случае апачь у каждого юзера запускается от имени юзера, вот и все.
Но решений милион
На хостинге веб сервер тоже работает с правами пользователя. Если это Apache используют apache2-mpm-itk если это Nginx+php-fpm то настраивают php-fpm соответствующим образом.
Доступ по FTP осуществляется так же с правами этого пользователя.
Доступ по SSH/SFTP тоже. Ну вы поняли. Вот и весь секрет.
Про пользователя user в группе www-data все верно.
Теперь необходимо выставить правильный umask для пользователя user.
Таким образом, чтобы при создании файла права выставлялись 0664.
Базовые права для директорий, это 0777 (rwxrwxrwx) и для файлов 0666 (rw-rw-rw).
umask позволяет формировать права при создании для каждого пользователя отдельно.
Пример создания файла с маской 0022:
Права по умолчанию: 0666
Вычитаемое значение umask: 0022 (-)
Итоговые права: 0644
Чтобы получились правильные права, необходимо установить маску равной 0002
Пример создания файла с маской 0002:
Права по умолчанию: 0666
Вычитаемое значение umask: 0002 (-)
Итоговые права: 0664