Eu quero executar um servidor shell da velha escola para algumas pessoas, ou seja. aquele em que os usuários obtêm acesso ssh para que possam executar o software (próprio ou fornecido). Minha preocupação é a separação adequada entre os usuários.
Não quero que eles vejam os processos, acessem os arquivos uns dos outros (a menos que seja explicitamente permitido) etc. Seria bom não ser mordido por todos os erros de escalonamento de privilégios ou reiniciar o servidor com todas as atualizações menores do kernel. Seria perfeito manter a opção de executar serviços comuns (como hospedagem na web e e-mail) com essas medidas de segurança em vigor.
Antigamente eu usava o grsec, mas isso requer permanecer em um kernel mais antigo e lidar com o incômodo de compilá-lo. Existe uma maneira mais moderna e mais Ubuntu de garantir a separação do usuário em um servidor compartilhado?
Talvez você possa fazer algo com o AppArmor nesse sentido? Ou talvez haja um repositório de kernels pré-configurado para ambientes compartilhados? Ou uma solução baseada em contêineres? Estes estão em voga ultimamente.
Respostas:
hidepid
procfs
no Linux agora suporta ahidepid
opção. Deman 5 proc
:Portanto, montar
/proc
comhidepid=2
é suficiente para ocultar os detalhes dos processos de outros usuários no Linux> 3.3. O Ubuntu 12.04 vem com 3.2 por padrão, mas você pode instalar kernels mais recentes. O Ubuntu 14.04 e superior correspondem facilmente a esse requisito.ACLs
Como primeira etapa, remova as
rwx
permissões de outras pessoas de todos os diretórios pessoais (e também de grupos, se necessário). Suponho, é claro, que as pastas que contêm os diretórios pessoais não têm permissão de gravação para ninguém, exceto o root.Em seguida, conceda serviços como o servidor da Web e o servidor de correio aos diretórios apropriados usando ACLs. Por exemplo, para conceder ao processo do servidor da Web acesso às home pages do usuário, assumindo que
www-data
é o usuário e~/public_html
é onde a home page é mantida:Da mesma forma, adicione ACLs para os processos de email e os diretórios da caixa de correio.
As ACLs são ativadas por padrão no ext4 pelo menos no Ubuntu 14.04 e superior.
/tmp
eumask
Outro problema é
/tmp
. Definaumask
para que os arquivos não sejam legíveis por grupo ou pelo mundo, para que os arquivos temporários dos usuários não sejam acessíveis a outros usuários.Com essas três configurações, os usuários não devem conseguir acessar os arquivos de outros usuários nem examinar seus processos.
fonte
/tmp
é o pacotelibpam-tmpdir
: ele cria um diretório/tmp/user
de propriedade raiz e não legível ao mundo e diretórios de propriedade do usuário, legíveis ao mundo e não passíveis de mundo/tmp/user/$UID
para todos os usuários (após o primeiro log-in) e define a variável de ambienteTMP_DIR
para apontar para a última. A maioria dos programas funciona bem e coloca seus arquivos temporários dentro,$TMP_DIR
se definidos.