sezavasasilov
@sezavasasilov

Как выставить права доступа apache?

Всем привет!
Знаю, что этот вопрос поднимался неоднократно в интернетах, но ни одно решение мне не помогло.
Поставил на систему Ubuntu 16.04 apache2 из репозитория - версия Apache/2.4.18 (Ubuntu).
Установил скрипт управления виртуальными хостами. Он немного изменен мной, в отличии от оригинала, но в свою защиту скажу, что именно такой листинг у меня работал на других машинах. Вот сам скрипт (оставил только создание и удаление хоста):
#!/bin/bash
projects="/home/user/web/www";
hosts="/home/user/web/hosts";
enabled_hosts='/etc/apache2/sites-enabled';
user=$(whoami);
action=$1;
name=$2
db=$3;

add_folders() {
    mkdir -p "$projects/$name/www";
    mkdir -p "$projects/$name/logs"
    mkdir -p "$projects/$name/tmp"
    chown -R $user\: "$projects/$name/"
    chmod -R 777 "$projects/$name";
    mkdir -p $hosts
}

add_host() {
    echo "
<VirtualHost *:80>
    ServerName $name
    ServerAlias www.$name
    DocumentRoot $projects/$name/www
    <Directory $projects/$name/www>
        Options Indexes FollowSymlinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog $projects/$name/logs/error.log
    CustomLog $projects/$name/logs/access.log combined
</VirtualHost>" > $hosts/$name
    
    ln -s $hosts/$name $enabled_hosts/$name.conf
#    a2ensite $name.conf
    
    echo "127.0.0.1        $name" >> /etc/hosts
}

add_index_file() {
    echo "<html>
<body>
    <h1>$name works!</h1>
</body>
</html>" > $projects/$name/www/index.html
    chown $user\: "$projects/$name/www/index.html"
    chmod 777 "$projects/$name/www/index.html"
}

create_host() {
    if [ -z $name ]; then
        echo 'No name for vhost given.';
        exit 1;
    fi
    
    if [ -f "$hosts/$name" ]; then
        echo 'Virtual host already exists.';
        exit 0;
    fi
    
    echo 'All is ok, fast forward -->';
    add_folders;
    echo '* Folders created';
    add_host;
    echo '* Host created';
    add_index_file;

    reload_apache;
}



delete_all() {
    if [ -z $name ]; then
        echo 'No name for vhost given. Exit.';
    exit 1;
    fi
    
    if [ -f "$hosts/$name" ]; then
        echo "Remove vhost $name?";
        echo "This action will remove all files and directories from this project (y/n)";
    read confirm;
    
    if [ $confirm = 'y' ]; then
        echo "* Removing files and directories from $projects/$name";
    rm -rf $projects/$name
    
    echo "* Removing vhost file from $hosts/$name";
    rm $hosts/$name
    
    echo "* Removing link from $enabled_hosts/$name"
    rm $enabled_hosts/$name.conf
    
    echo "* Cleaning up /etc/hosts"
    sed "/$name/d" /etc/hosts > /tmp/tmp-hosts;
    mv -f /tmp/tmp-hosts /etc/hosts
    
    echo "* Done. The matrix has project $name";
    
    reload_apache;
    else
        echo "Skipped.";
    fi
    else
        echo 'No such vhost.';
    exit;
    fi
}



reload_apache() {
    service apache2 restart
}

if [ $(whoami) != "root" ]; then
    echo 'You must be root.'
    exit 1;
fi
    
case $action in
    add)
        create_host;
    ;;
    delall)
        delete_all;
    ;;


    *)
        echo "Usage: `basename $0` (create|delete|enable|disable) vhostname";
        exit 0;
    ;;
esac


В итоге не могу попасть на созданный хост. В ответ получаю:
e33dc505259a46038f066a0dadb46522.png
Права на директорию как только не менял. Целый день сижу.

Вот что выдает эрор лог хоста:
[Wed Sep 21 21:32:52.550133 2016] [core:error] [pid 20651:tid 140047573829376] (13)Permission denied: [client 127.0.0.1:41466] AH00035: access to / denied (filesystem path '/home/user/web') because search permissions are missing on a component of the path
[Wed Sep 21 21:33:10.450348 2016] [core:error] [pid 20651:tid 140047582222080] (13)Permission denied: [client 127.0.0.1:41476] AH00035: access to /favicon.ico denied (filesystem path '/home/user/web') because search permissions are missing on a component of the path

Не понятно, почему апач останавливается на полпути. Повторюсь, менял руками права на папку ~/web и глубже как только можно.
  • Вопрос задан
  • 333 просмотра
Решения вопроса 1
sezavasasilov
@sezavasasilov Автор вопроса
Решение нашел тут.
Не знаю, почему и как это работает. Может кто-нибудь объяснит, зачем домашнюю директорию делать исполняемой? =/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Daemon23RUS
@Daemon23RUS
Посмотрите в сторону SELinux
у меня команда выглядит примерно так
chcon -t httpd_sys_rw_content_t путь -R
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы