Unix chown / дает разрешения www-data и пользователю

1825
joe_young

У меня есть пользователь 'joe', которому я хотел бы предоставить разрешения (для /var/www/html/), чтобы я мог использовать ftp (с vsftpd)

Итак, я запускаю эту команду:

sudo chown -R joe /var/www/html/ 

И это хорошо, теперь я могу читать, писать, удалять и т.д. файлы через FTP.
Однако теперь любая страница на моем сайте возвращает ошибку 403 Forbidden.

Это потому, что я дал «joe» право собственности на эти каталоги, поэтому, чтобы сделать мой сайт снова доступным, я запускаю:

sudo chown -R www-data /var/www/html/ 

Но это означает, что joe не может получить доступ к этим файлам с помощью ftp.

Можно ли как-нибудь разрешить Джо читать и писать файлы, в то же время позволяя доступ к файлам через www-данные, чтобы мои веб-страницы не были запрещены?


Я попытался создать группу:

sudo addgroup users sudo add user joe users sudo add user www-data users 

Но я не знаю, как накормить целую группу, я знаю только, например:

sudo chown -R joe:users /var/www/html 

Однако это представляет ту же проблему.


Я использую Ubuntu 14.04 x64 с apache2, и у Джо есть права root ( ALL=(ALL:ALL) ALL)

2

2 ответа на вопрос

2
moonpoint

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

$ ls -ld /var/www/html drwxr-xr-x. 2 joe joe 23 Mar 12 11:08 /var/www/html 

В приведенном выше примере учетная запись joe владеет каталогом и принадлежит группе joe; группа является вторым "Джо" на линии. Группа может содержать только одну учетную запись, Джо, но я мог бы добавить другие группы в группу. Я мог бы создать группу с именем usersи связать каталог с этой группой, как вы это сделали. Вы используете chownкоманду, но есть также chgrpкоманда для изменения группы. Вы можете использовать эту команду для назначения файлов и каталогов группе, или вы также можете изменить группу, как вы это сделали с chown user:group. Например, вы можете использовать приведенную ниже команду, если в системе есть группа www-данных (вы можете увидеть группы и их участников, выполнив команду cat /etc/group):

sudo chgrp www-data /var/www/html

Тогда я мог бы увидеть что-то вроде следующего:

# ls -ld /var/www/html drwxr-xr-x. 2 joe www-data 23 Mar 12 11:08 /var/www/html 

Или, если вы предпочитаете, вы можете сделать группу для каталога новой usersгруппой, которую вы создали, как вы делали с помощью chown -R joe:usersкоманды.

Когда я выполнил ls -ldкоманду для проверки прав доступа к каталогу, я увидел следующее:

drwxr-xr-x

«D» говорит мне, что это каталог. Следующие 3 символа говорят мне, что права доступа для владельца - чтение, запись и выполнение. Следующие 3 символа показывают права доступа для группы, которые в приведенном выше примере считываются и выполняются. Я мог бы предоставить группе разрешение на запись с помощью команды ниже:

chmod g+w /var/www/html

Вы также можете рекурсивно изменять разрешения для указанного выше каталога с помощью параметра -Rили --recursive.

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

2
Alex

I think you can try:

setfacl -R -m u:joe:rw /var/www/html 

You can test the result by doing:

getfacl /var/www/html 

You should see something similar to:

# file: var/www/html # owner: root # group: root user::rwx user:joe:rw- group::r-x mask::rwx other::r-x