Em um ambiente de hospedagem na Web compartilhado, há alguns problemas que você precisa resolver logo de cara.
Em relação às permissões de diretório e somente poder acessar seus arquivos: o que você quer fazer é configurar as permissões do diretório home de forma que o grupo "outros" não tenha permissão alguma. Lembre-se que a permissão eXecute é necessária para o cd nos diretórios, mas isso por si só não permitirá que você leia o conteúdo deles. Portanto, / home deve ser de propriedade do root e ter rwxr-x - x, assim os usuários podem apenas "às cegas" ir para sua pasta de casa, mas não têm uma olhada ao redor e saber quantos usuários estão em seu sistema. Seria algo parecido com isto (data, tamanho etc omitido para maior clareza):
# ls -la /home
drwxr-x--x root root .
drwxr-xr-x root root ..
drwxr-x--- usr1 usr1 usr1
drwxr-x--- usr2 usr2 usr2
...
Se você realmente não quiser que os usuários possam ler o conteúdo de diretórios como /bin
, etc., simplesmente remova o bit de permissão "read" para o grupo "outros". Isso não afetará sua capacidade de usar os binários contidos, desde que conheçam a rota completa antecipadamente.
Para acesso SSH e FTP, se você configurar as permissões do sistema de arquivos corretamente, qualquer implementação SSH ou FTP decente já estará segura. Eu recomendo o vsftpd para FTP, é claro, o OpenSSH para SSH, mas não significa que eles sejam as únicas opções corretas disponíveis. Lembre-se de ajustar as opções de configuração para esses serviços (em particular, desabilitar o login de root através do SSH, provavelmente proibir o login de senha para qualquer pessoa com capacidade para sudo, etc.)
A parte complicada é configurar seu servidor da Web corretamente, especialmente se você tiver que executar scripts CGI para sites dinâmicos. Todo mundo e sua avó querem PHP hoje em dia, e você realmente não pode ter /home/dumbuser/public_html/php_shell.php
rodando como o mesmo usuário que gerou seu Apache / Nginx, certo?
Uma possível solução aqui, se você estiver executando o servidor web Apache, é usar a suexec módulo , que terá seu script CGI executado como o usuário que possui o arquivo executável (pense bit setuid). Para permitir o acesso ao servidor HTTP para os arquivos reais, considere adicionar o usuário do servidor é executado como (típico. www-data
) para cada grupo de usuários no sistema ( "cada grupo de usuários", significando cada usuário que está usando seu ambiente compartilhado, nem todos conta de usuário no sistema).
Note que isto é apenas coçando a superfície de tudo o que deve ser feito para configurar e fortalecer adequadamente um servidor compartilhado. Os arquivos de configuração para cada serviço em execução devem ser completamente compreendidos e você provavelmente precisará modificá-los para atender às suas necessidades. Em particular, você provavelmente terá que passar uma boa semana lendo as opções de configuração do seu servidor web e testando-o em um ambiente de desenvolvimento / teste.