Obrigado user204088 - uma pergunta sobre permissões que descreve um modelo de segurança! (a maioria das pessoas simplesmente reclama que eles não conseguem fazer as coisas funcionarem, e aceitam a resposta que diz mudar as permissões para 0777).
Uma coisa que você não mencionou é como os sites são criados, como são modificados e quanto isolamento deve haver entre sites.
Algumas coisas importantes:
1) Eu recomendaria definir a raiz do documento como uma pasta abaixo da pasta base. Dessa forma, você pode ter um escopo para um diretório de inclusão por site, um diretório de uploads por site e um diretório de dados de sessão por site, nenhum dos quais é exibido como URLs pelo servidor da web. Isso também significa que todo o lixo do / etc / skel também não está acessível.
2) Exceto em circunstâncias muito raras, o seu servidor web não deve ter acesso de gravação a qualquer conteúdo dentro do documentroot.
Para criar usuários (com diretórios home) você precisa ser root - daí eu iria com a criação de um site de template em / etc / skel e escrever um script bash simples para criar um usuário e adicionar um registro vhost para o httpd.conf (na minha caixa PCLinux isso vai em /etc/httpd/conf/vhosts.d - nomeie o arquivo como o nome do host, menos o prefixo www.
Permitir que o acesso de leitura / gravação da conta do site a todo o conteúdo do site seja o local onde ele fica confuso. Você pode configurar um grupo comum e garantir que todos os arquivos / diretórios sejam graváveis em grupo (chmod g + S), mas isso significa que os usuários podem acessar o conteúdo uns dos outros. É provavelmente uma idéia melhor usar o modelo de um grupo por usuário, definir as permissões de arquivo como graváveis pelo grupo e adicionar a conta de 'sites' a cada um dos grupos de usuários únicos.
O Apache obtém acesso de leitura aos arquivos / diretórios através do 'outro' - então lembre-se de definir a umask apropriadamente.
Agrupar tudo isso em um script bash executável apenas pelo root é simples. Você pode fazer coisas como invocar isso via sudo (certifique-se de adicionar outra autenticação) do seu servidor web para colocar um simples front-end na criação de contas / vhosts.
E assim que a conta de usuário é criada, você pode manipular os arquivos usando a conta "sites".