Один мой друг размещает несколько веб-сайтов, которые он создал для своих клиентов. Как-то он испортил разрешения, из-за чего на всех клиентских сайтах при загрузке выдается ошибка 403.
Когда я ssh на его сервер и вхожу в систему со своей учетной записью (у меня также есть 2 веб-сайта, работающих на его сервере), первое сообщение, которое я получаю:
Последний вход: вторник, 24 января, 11:54:37 2012 от 82.168.36.207 Не удалось выполнить chdir в домашний каталог / home / michiel: Permission denied -bash: /home/michiel/.bash_profile: Permission denied
Затем я sudo и chdir в / home /. Я (рекурсивно) изменил папку michiel на michiel: michiel и изменил ее (рекурсивно) на 755.
Я по-прежнему получаю ту же ошибку при входе в систему, а веб-сайт по-прежнему выдает ошибку 403.
Я попытался выяснить, вызывает ли SELinux проблемы, но "найти selinux" выводит, что такого файла или папки нет.
Есть идеи, как решить эту проблему?
Из комментариев видно, что в разрешениях на / home не установлен бит выполнения:
drw-r--r-- 26 root root 4.0K Jan 24 03:17 home
Для входа в каталог вам нужен установленный бит выполнения. Итак, «chmod a + x / home».
Хитрость в том, что ваш друг мог рекурсивно взорвать бит выполнения во всех подкаталогах. Если пользователей не так много, я могу просто перейти к каждому домашнему каталогу и проверить разрешения визуально. Если пользователей много, есть способы более эффективно запустить chmod, например:
chmod -R a+x /home/*/public_html
Будьте осторожны (в отличие от вашего друга!)
Первая команда дает разрешение на вход в каталог другим пользователям, кроме владельца или его группы (hattip @cjc). Второй дает права на чтение файлов:
find "/path" -type d | xargs chmod o+x
find "/path" -type f | xargs chmod o+r
Это минимальный набор разрешений для публикации файлов. Если кто-то полагался на DirectoryIndex, каталогам потребуется o+rx
вместо просто o+x
.
Мой обычный набор разрешений:
$ ls -ld /var/www/me.example.com
drwx-----x 12 me-example-com users 4096 Oct 4 16:44 /var/www/me.example.com
$ id me-example-com
uid=1000(me-example-com) gid=100(users)
Этот трюк, который я узнал в Интернете, означает, что другие участники группы users
не смогут просматривать файлы друг друга, но по умолчанию остальная часть системы позволит www-data
(пользователь Apache работает под управлением Debian), чтобы войти в каталог.