prática recomendada para permissão de acesso aos usuários do apache tomcat

22

Eu tenho uma caixa Linux sendo compartilhada por vários desenvolvedores. Eles querem implantar seus arquivos de guerra no apache tomcat, que em local compartilhado (/ opt / tomcat).

Como eles não têm acesso ao sudo, preciso alterar a permissão da pasta para o diretório tomcat.

estrutura de diretórios em /opt/tomcatis -

bin/

conf/

lib/

logs/

temp/

webapps/

work/

Quais são as melhores práticas na situação acima - permissão de acesso mais adequada ao usuário? Por enquanto, mudei a permissão para 777 para aplicativos e logs da web.

obrigado

Kunal
fonte

Respostas:

32

Eu faço assim:

Colocamos o usuário do tomcat como proprietário da pasta do tomcat:

# chown -R tomcat:tomcat /opt/tomcat

Os usuários não podem modificar a configuração do tomcat:

# chmod -R g+r /opt/tomcat/conf

Os usuários podem modificar as outras pastas:

# chmod -R g+w /opt/tomcat/logs
# chmod -R g+w /opt/tomcat/temp
# chmod -R g+w /opt/tomcat/webapps
# chmod -R g+w /opt/tomcat/work

Ative o sticky-bit para novos arquivos, mantenha as permissões definidas:

# chmod -R g+s /opt/tomcat/conf
# chmod -R g+s /opt/tomcat/logs
# chmod -R g+s /opt/tomcat/temp
# chmod -R g+s /opt/tomcat/webapps
# chmod -R g+s /opt/tomcat/work

Por fim, adicionamos o grupo tomcat que queremos usuários que possam usar o tomcat:

# usermod -a -G tomcat MIUSER
intropedro
fonte
4
Se feito sem a tag -a, você adicionará o usuário ao grupo tomcat, mas removerá o MIUSER de todos os outros grupos aos quais eles pertencem (isso significa que não há mais grupo sudo). Eu apenas tive que agir rapidamente para recuperar meus grupos na conta principal em um dos meus servidores, recuperando-os de uma sessão antiga em que eu ainda mantinha esses grupos. Uma palavra de aviso para outros usuários que estão lendo esta resposta.
Axoren
Eu adicionei a opção à resposta. Obrigado
intropedro
Como ter o Tomcat começando como um usuário do tomcat? O meu é iniciado como um daemon e, a partir de agora, é executado como raiz.
Stephane
11
Olá Stephane, No Ubuntu, o Tomcat está executando com um usuário do tomcat e está no arquivo / etc / default / tomcat8 com as variáveis ​​TOMCAT8_USER e TOMCAT8_GROUP. Em outros linux eu não sei.
intropedro 3/07
Não está +sdefinido o ID do usuário / grupo? A página de manual diz que +té um pouco complicado.
bmaupin
13

A Non-Tomcat settingsseção do howto de segurança do Tomcat fornece informações úteis sobre este tópico. Veja aqui:

O Tomcat não deve ser executado no usuário root. Crie um usuário dedicado para o processo do Tomcat e forneça a esse usuário as permissões mínimas necessárias para o sistema operacional. Por exemplo, não deve ser possível fazer logon remotamente usando o usuário do Tomcat.

As permissões de arquivo também devem ser adequadamente restritas. Tomando como exemplo as instâncias do Tomcat no ASF (onde a implantação automática está desativada e os aplicativos da Web são implantados como diretórios explodidos), a configuração padrão é ter todos os arquivos do Tomcat pertencentes ao root com o grupo Tomcat e enquanto o proprietário tem privilégios de leitura / gravação , o grupo tem apenas leitura e o mundo não tem permissões. As exceções são os logs, temp e diretório de trabalho que pertencem ao usuário do Tomcat e não à raiz . Isso significa que, mesmo que um invasor comprometa o processo do Tomcat, ele não poderá alterar a configuração do Tomcat, implantar novos aplicativos da Web ou modificar aplicativos da Web existentes. O processo do Tomcat é executado com uma umask de 007 para manter essas permissões.

Jack
fonte
Gostaria de saber se a abordagem descrita pode ser adotada não apenas no Tomcat, mas também com outros serviços (banco de dados, proxy reverso etc.). Você acha que é viável / sábio?
Paolo
1

Você precisa seguir o princípio do menor privilégio . O servidor (provavelmente www-data, mas você precisará verificar) precisa poder ler a maioria dos arquivos (digamos todos) e gravar apenas nos logs. Os desenvolvedores da Web podem escrever onde precisam. Defina a parte adesiva nos diretórios para que somente o proprietário de um arquivo possa excluí-lo.

Na prática, você precisa criar um grupo (por exemplo webdev) e adicionar todos os desenvolvedores e o servidor a ele ( usermod -aG webdev <user>ou usermod -A webdev <user>dependendo do seu sabor Linux). chowntodos os arquivos e diretórios para o usuário do servidor da web, chmod todos os diretórios para 500 e todos os arquivos para 400 (exceto binonde os executáveis ​​também precisam ser 500).

Conceda permissões de gravação /opt/tomcatao grupo (que seria 570) e defina o bit adesivo para que eles possam remover apenas os arquivos que possuem (chmod 1570). Conceda ao servidor permissão de gravação nos logs e permissões de leitura para os desenvolvedores (0740 para a pasta, 0640 para os arquivos, o bit adesivo provavelmente não é necessário e nunca conceda a um arquivo, apenas as pastas, pois possui um significado diferente (execute com as permissões do proprietário quando o arquivo for executável)).

Você precisará conceder permissões de gravação (1570) para webdevalguns dos diretórios. Você precisará de algumas tentativas e erros aqui e pode ser dependente do aplicativo. Essas pastas devem ser 1570, enquanto outras podem ser 0500).

Os desenvolvedores precisarão conceder acesso de leitura em seus arquivos ao grupo para que o servidor possa lê-los (que é 640) e também execute nos diretórios (que são 750).

Calimo
fonte
1

Acho que a resposta aceita da @ intropedro é boa. Vale ressaltar que o uso de um instalador de pacotes pode economizar muitas dores de cabeça - pelo menos para o Tomcat 7 no Ubuntu apt-get install tomcat7produz um conjunto de diretórios de instalação mais "padrão":

  • /etc/tomcat7 para arquivos de configuração,
  • /var/lib/tomcat7 para bibliotecas principais e
  • /usr/share/tomcat7 para recursos compartilhados.

Todas as permissões são configuradas corretamente com o princípio do menor privilégio, de forma que adicionar usuários ao grupo tomcat7seja suficiente para permitir a implantação. Além disso, o servidor tomcat é configurado como um serviço que pode ser iniciado e parado como outros (por exemplo, sudo service tomcat startou alternativamente /etc/init.d/tomcat start). O Tomcat inicia na reinicialização automaticamente e há um comando "restart". Tenho certeza de que há um pacote yum equivalente para usuários do RHEL / CentOS. (E sim, há um instalador de homebrew para instalações locais do OSX).

Se você estiver tendo problemas, é /usr/share/binchamado um utilitário interessante configtest.shque informa se há permissões ou outros erros. Observe que há um erro aberto que sugere adicionar alguns links simbólicos .

Ainda estamos executando o Ubuntu trusty(14.04); para aqueles que executam versões mais recentes, acredito que exista um repositório Tomcat 8 apt-get.

Tom Harrison Jr
fonte