- Пользователь и группа www-data
- Команда chmod
- Команда chown
- Исходные данные
- Изменяем владельца
- Устанавливаем права
- Как валидно настроить права для nginx и php-fpm?
- How to test your PHP code as the www-data user
- Why the user important
- How do you execute commands via the shell?
- root vs. www-data user
- What is the PHP exec function?
- What is the PHP shell_exec function?
- How to determine the user shell_exec() or exec() is running as?
- How do run your code using sudo or su as the www-data user?
- Latest Posts
- Scan Your Docker Images and Containers with VirusTotal: A Step-by-Step Guide
- Bitbucket for Newbies: Mastering Basic Commands and Collaborating on Code
- Accelerate Your Performance Testing on Ubuntu with k6 and Postman-to-k6
- Solve the “Cannot read properties of undefined (reading ‘type’)” error with these simple fixes
- Solving the ‘tail: inotify resources exhausted’ Error on Ubuntu
- ubuntu linux Как работать с www-data (права для работы с файлами через php apache) — для машины разработчика. Рекомендуемые
- Добавляем своего пользователя в группу www-data
- Видео-пояснения
Пользователь и группа 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
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
- 1С:Предприятие (31)
- API (29)
- Bash (43)
- CLI (100)
- CMS (139)
- CSS (50)
- Frontend (75)
- HTML (66)
- JavaScript (150)
- Laravel (72)
- Linux (147)
- MySQL (76)
- PHP (125)
- React.js (66)
- SSH (27)
- Ubuntu (68)
- Web-разработка (509)
- WordPress (73)
- Yii2 (69)
- БазаДанных (95)
- Битрикс (66)
- Блог (29)
- Верстка (43)
- ИнтернетМагаз… (84)
- КаталогТоваров (87)
- Класс (30)
- Клиент (27)
- Ключ (28)
- Команда (69)
- Компонент (60)
- Конфигурация (62)
- Корзина (32)
- ЛокальнаяСеть (28)
- Модуль (34)
- Навигация (31)
- Настройка (140)
- ПанельУправле… (29)
- Плагин (33)
- Пользователь (26)
- Практика (99)
- Сервер (74)
- Событие (27)
- Теория (105)
- Установка (66)
- Файл (47)
- Форма (58)
- Фреймворк (192)
- Функция (36)
- ШаблонСайта (68)
Как валидно настроить права для nginx и php-fpm?
Но если я захожу в папку сайта как пользователь jack и создаю файл или папку, или запускаю git pull то соотвественно созданное имеет юзер и группу jack. Ну и nginx не имеет доступа.
Скажем у меня рабочий пользователь jack
Могу назначить владельца и группу jack на папку сайта а www-data добавить в группу jack и вроде бы решение. Но php-fpm будет создавать файлы под www-data и как то часть файлов будет с разными владельцами.
Как то не могу разобраться до конца как с этим работать правильно?
Буду благодарен если поделитесь опытом?
[>] user = > group = > listen = /var/run/php/php>-fpm->.sock listen.owner = www-data listen.group = www-data pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 chdir = / ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com ;php_flag[display_errors] = off php_admin_value[error_log] = /var/www/>/logs/fpm-php.>.log ;php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 32M php_admin_value[upload_max_filesize] = 100M php_admin_value[post_max_size] = 100M php_admin_value[open_basedir] = /var/www/>/ php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source,stream_set_write_buffer,stream_socket_sendto,highlight_file,com_load_typelib php_admin_value[upload_tmp_dir] = /var/www/>/tmp php_admin_value[soap.wsdl_cache_dir] = /var/www/>/tmp
server < listen 80; #listen [::]:80 default_server ipv6only=on; root /var/www/>/www; index index.php index.html index.htm; server_name >; location / < try_files $uri $uri/ =404; if (!-e $request_filename) < rewrite ^/(.*)$ /index.php?q=$1 last; >> location ~ \.php$ < include snippets/fastcgi-php.conf; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php>-fpm->.sock; include fastcgi_params; > client_max_body_size 100M; >
How to test your PHP code as the www-data user
Apart from running web applications, PHP can execute commands via a shell. But testing your shell script can be tricky, especially when running it as a different user. This post will look at how you can sudo or su as the www-data user to test your PHP code.
Why the user important
For example, running an Apache user will produce different results from the root user. Note that the Apache user is also known as the www-data user. And, the www-data user does not have the same privileges as the root user.
How do you execute commands via the shell?
The exec() function is one of the popular functions for executing system-related commands. You can also use the shell_exec() function. Both functions execute commands via the shell. But the response from each is slightly different.
root vs. www-data user
A root user in any system is the primary user with all the permissions to read, write and execute commands. A www-data user is a user that web servers make use of by default for any operation. The web server can only access the files that the www-data user can access. Of course, Linux allows you to sudo or us as the www-data user. So naturally, this post will show you how to do that.
What is the PHP exec function?
The exec() function is a PHP inbuilt function that executes an external program. It returns the last line of the output as a string or FALSE if the command fails.
exec($command, $output, $return_var ) : string|false
- $command – This is the command that the exec() function will execute.
- $output – This is the parameter that specifies the array that will be filled with the command output.
- $return_var – This parameter returns the status of the executed command.
What is the PHP shell_exec function?
The shell_exec() function executes an external program. It returns the complete output as a string. Shell exec will also return false if no pipe could be established. Finally, it can return null if an error occurs or if the command produces no output.
shell_exec(string $ command): string|false|null
How to determine the user shell_exec() or exec() is running as?
This script will output the username of the running PHP process owner:
The output for the above code will be something like this:
Returned with status 0 and output: Array ( [0] => Santo )
You could also use PHP’s get_current_user() function:
How do run your code using sudo or su as the www-data user?
Login in as the Apache (www-data) user on your Linux box using the following SSH command:
sudo su -s /bin/bash www-data
This will, in turn, create temporary access as the www-data user for testing shell commands. You can now run your PHP script as the www-data user and test it. Finally, type ‘exit’ to return to your logged-in user.
Latest Posts
Scan Your Docker Images and Containers with VirusTotal: A Step-by-Step Guide
Bitbucket for Newbies: Mastering Basic Commands and Collaborating on Code
Accelerate Your Performance Testing on Ubuntu with k6 and Postman-to-k6
Solve the “Cannot read properties of undefined (reading ‘type’)” error with these simple fixes
December 19, 2022 May 1, 2023
Solving the ‘tail: inotify resources exhausted’ Error on Ubuntu
December 18, 2022 May 1, 2023
Copyright 2018-2022 Anto Online.
All rights reserved. Please consider the information, scripts and instructions carefully before using it yourself. Make sure you have ample backups! The information, scripts and instructions are provided without warranty. Consult a professional if you are unsure. Anto does not speak on behalf of any company and our opinions are our own.
The feature images have been provided by pexels.com and unsplash.com.
ubuntu linux Как работать с www-data (права для работы с файлами через php apache) — для машины разработчика. Рекомендуемые
— поэтому перед нами стоит задача как-то сделать так, чтобы с php-кодом могли работать и процессы Апача и программы запущенные от имени нашего пользователя (напр. тестовый редактор файлов кода).
Есть два варианта решения этой проблемы:
- 1) Давать права действия с файлами вообще всем (а не только пользователю и группе)
- 2) Добавить своего пользователя в группу, в которой уже состоит пользователь, под которым работает Apache
Первый вариант — плохая практика, т.к. давать права вообще всем пользователям системы не нужно никогда (это нарушения принципа минимальных необходимых привилегий)
Второй вариант — то, что мы и сделаем в данном случае.
Добавляем своего пользователя в группу www-data
Для локальной машины вполне допустимо добавить себя в группу www-data командой:
sudo usermod -G www-data -a $USER
И прелогиниваемся под нашим пользователем в терминале, чтобы добавление группы вступило в силу:
(для этого способа, применение группы сработает только для текущей вкладки терминала, чтобы изменения применились вообще везде — перезагрузите систему)
(то есть в такую под которой работает Apache, это нужно в случае если ваш php установлен как модуль Апач ).
И тогда вам нужно будет просто делать владельцем ресурсов группу/пользователя www-data:www-data (именно под ними работает апач, и php, если он установлен как модуль апача)
— в этом случае, например NetBeans (или composer или другие программы/утилиты) будет запускаться от имени вашего пользователя, а значит, вам часто достаточно будет давать необходимые права группе (часто на запись g+w) и автоматом за счет общей группы с этими файлами смогут работать и php (от имени www-data) и куча программ, которые запускают вами, а значит работают под вашим пользователем.
Видео-пояснения
Если то, что выше неясно, посмотрите видео-пояснения: