На моем веб-сервере у меня есть каталог «www», который имеет разрешение drwxrwxr--
и user: group root:www-data
, чтобы Apache мог получить к нему доступ.
Теперь я добавил свой аккаунт в группу www-data с
sudo usermod -g www-data myuser
, и если я сделаю groups
, то среди них будет www-data
, но когда я пытаюсь просто войти в него, получить «Отказано в доступе».
Если я изменю пользователя на «myuser» или назначу группу другой группой, членом которой я являюсь, я могу войти.
Я что-то упустил?
Для вашего процесса список групп установлен во время входа в систему, поэтому вам нужно будет снова войти в систему, чтобы изменения вступили в силу.
Я бы также предложил добавить www-data
в качестве дополнительной группы, а не основной группы (которая настроена на группу, членом которой вы являетесь. Вы должны быть в состоянии сделать это с помощью следующих команд:
# Reset to your original primary group
sudo usermod -g myuser myuser
# Add an extra supplementary group
sudo usermod --append -G www-data group
Если вы хотите, чтобы файлы, которые вы создаете, были доступны для чтения другим членам группы www-data
, настройте ваш umask соответствующим образом:
umask 002
Поскольку ваша основная группа - это личная группа, это не должно влиять на безопасность создаваемых вами файлов.
Также стоит установить бит setgid
для каталогов, в которых вы будете создавать файлы: это приведет к тому, что файлы будут наследовать владение группой родительского элемента каталог:
chmod g+s www/
Для меня это была другая вещь, приводящая к этой ошибке
Мне настроили пользователя "апач" локально с UID=123 и в каталоге NIS с тем же именем ("апачский") но другой UID=456. В зависимости от порядка запуска и сервисной зависимости, мог бы использоваться локальный пользователь, прежде чем пользователь NIS avaiable. Это также означает при отображении имен пользователей это будет сбивать с толку, оба появятся как "апач". Только, когда Вы смотрите на числовой UIDs (например, путем выполнения ls -ln
Вы будете видеть различие. Пример: [root@mymachine]# ls -l drwxr-x--- 4 apache ggg1 88 May 31 17:12 file1 drwxr-x--- 4 apache ppp2 88 May 31 17:12 file2
посмотрите, что UID отличается для file2 (456 вместо 123): [root@mymachine]# ls -ln drwxr-x--- 4 123 48 88 May 31 17:12 file1 drwxr-x--- 4 456 48 88 May 31 17:12 file2
Другая проблема, которую я имел с пользовательским несоответствием и получающейся ошибкой разрешения, состояла в том, когда я ограничивал доступ к файлам при помощи группы "httpd". Это было основной группой пользователя "апач" (который был отображен с помощью id
или getent
) Apache запускается как корень, затем переключается на настроенного пользователя и отбрасывает разрешение. Пользователь, на которого это переключается, определяется в /etc/httpd/conf/httpd.conf
User
параметр. Вот проблема, хотя - группа (GID), который процесс будет выполнять как, НЕ является основной группой того пользователя. Группа определяется в том же файле конфигурации Group
параметр.
Таким образом в моем случае это было (/etc/httpd/conf/httpd.conf): User apache Group apache
И каталог был предоставленным доступом как это: drwxr-x--- 4 someuser httpd 88 May 31 17:12 mydir
Поскольку httpd (GID=444) был основной группой того пользователя: [root@somemachine]# id apache uid=48(apache) gid=444(httpd) groups=444(httpd)
Это закончилось в некоторое время, проведенное, отладив, пока я не понял это Group
в файле конфигурации было "апачским" не "httpd".
Ошибка от/var/log/httpd/error_log: [Fri May 31 17:13:40.070343 2019] [authz_core:debug] [pid 2527] mod_authz_core.c(809): [client 11.22.32.21:53824] AH01626: authorization result of Require all granted: granted [Fri May 31 17:13:40.070367 2019] [authz_core:debug] [pid 2527] mod_authz_core.c(809): [client 11.22.32.21:53824] AH01626: authorization result of <RequireAny>: granted [Fri May 31 17:13:40.070396 2019] [core:error] [pid 2527] (13)Permission denied: [client 11.22.32.21:53824] AH00132: file permissions deny server access: /var/www/html/somedir/otherdir/css/file1.txt
Я надеюсь, что это помогает.