O Ubuntu.com tem ótimos guias de servidor, como o Guia do Apache . Onde você conseguiu seus procedimentos que você tão cuidadosamente escreveu? Eu nunca precisei me preocupar tanto com nenhum dos servidores que configurei, embora esteja aberto à possibilidade de não ter feito tudo certo - também, na verdade, não tenho servidores qualquer coisa que seja muito pública ou muito grande, então pode haver falhas de segurança que eu não conheço.
No entanto, nunca precisei ser membro do grupo www-data e nenhum arquivo fonte em www é de propriedade da www-data. Meu entendimento é que isso é usado pelo Apache apenas para seus próprios arquivos, e não terá permissões de gravação para nenhum dos outros arquivos em si, porque, em teoria, nenhum arquivo importante permitirá que o www-data tenha permissão de gravação. Eu acho que os arquivos pertencentes a www-data dariam permissão somente leitura para todos os outros, e ninguém deveria ter permissão de escrita para seus arquivos. Eu poderia estar totalmente errado, é claro, e se eu for, espero que alguém me diga e me aponte para a documentação real que explica de forma diferente (não para algum fórum onde um usuário aleatório da internet como eu produziu instruções que funcionaram para ele).
Talvez eu esteja sentindo falta de algo, mas seu problema deve ser bastante direto. O usuário que está logado usando o sftp precisa ser um membro do grupo www-data, e os arquivos que você está tentando modificar devem ter permissões de gravação para o grupo www-data. Não faz sentido para mim que você possa modificar os arquivos usando ssh, mas não usando o sftp; Você tem certeza de que está fazendo login na mesma conta para ambos? No sftp, você pode inserir comandos como !groups
para listar seus grupos ou !whoami
para verificar o nome de login que você está usando. Os resultados devem corresponder ao que você vê usando ssh (com os mesmos comandos menos o ponto de exclamação).
Você também deve ser capaz de usar chmod, chown, chgrp do sftp se tiver permissão para fazer isso.
A propósito, acho que sua lista tem pelo menos um comando muito ruim:
sudo chmod -R g+rw /var/www
Isso dá ao mundo permissão de gravação para todos os arquivos e pastas em / var / www. Isso soa como uma má ideia. Normalmente, apenas o root tem permissão de gravação para esses diretórios, a menos que os específicos precisem de mais permissões, geralmente apenas diretórios únicos.
Nota: Este foi um erro da minha parte. Obrigado a DonalLafferty por apontar isto, que especifica "g", não "a", por isso só muda permissões de grupo. Meus olhos velhos e cansados (ou uma fonte ruim) devem ter lido como "a".
Edições para esclarecimento
Normalmente, os arquivos criados pelo Apache são somente leitura para o grupo www-data e todos os outros usuários, da mesma forma que os arquivos de propriedade da raiz em / var / www. Portanto, não deve haver motivo para tornar qualquer um membro do www-data. A questão é dar acesso a todos, o que é um caso diferente. Isso deve ser feito disponibilizando diretórios específicos dentro de seu site, e isso é feito simplesmente usando chmod, seja com sudo, já que provavelmente pertence a root, ou fazendo o dono e não usando sudo.
Se você tiver mais desenvolvedores que precisam acessar o site inteiro, é quando você deseja criar um grupo de usuários, como "webmasters", torná-lo o proprietário do site, conceder permissões de gravação a esse grupo e torná-lo todos os membros devs desse grupo. Então, a listagem dos diretórios do site seria algo como:
drwxrwxr-x ## webmasters webmasters #### ####-##-## ##:## mysite.com
Mais edições
Desde então, percebi que você não precisa criar um usuário "webmasters", apenas um grupo. Em seguida, os arquivos podem ser de propriedade de root: webmasters, ou seja, root é o proprietário, mas os webmasters são o grupo.
Em resposta às perguntas abaixo, os arquivos que o Apache escreve serão de propriedade da www-data e do grupo www-data. Esses arquivos normalmente não são algo para o qual você escreve, portanto, os não-membros do www-data podem ter acesso somente leitura - acho que depende das permissões do diretório. Se você precisar de mais do que o acesso ocasional à gravação, adicionar-se ao grupo pode ser útil. Geralmente, você torna o mundo dos diretórios específicos gravável para o conteúdo salvo pelo Apache. Considere também que a maioria dos sites compartilhados que executam o Apache sem acesso ao shell não teria nem mesmo uma maneira de configurar grupos.
Mas o Apache pode ler arquivos que são de propriedade do root. Quase todos os arquivos têm acesso legível ao mundo, mas não são graváveis. Então, a menos que você queira mudar isso, o Apache não precisa estar no grupo de webmasters.
Esta é toda a configuração básica do Linux, não realmente o Apache. O Apache só se preocupa com o acesso de dentro do servidor da web, e isso é definido pelos arquivos de configuração. Por esta razão, o link da documentação do Ubuntu que eu incluí no meu post deve ser considerado uma fonte melhor do que um wiki público.
A propósito, o O'Reilly Apache Cookbook diz que "diretórios de documentos, como htdocs, cgi-bin e ícones, terão que ter permissões definidas de uma maneira que mais sentido para o modelo de desenvolvimento do seu site em particular, mas sob nenhuma circunstância qualquer desses diretórios ou arquivos contidos neles deve ser gravável pelo usuário do servidor web. "
Por fim, o uso de ACLs é uma boa maneira de definir permissões de arquivos se você precisar de mais controle. Pode até ser uma boa maneira de defini-los o tempo todo, e é algo que eu deveria investigar.