Olá, estou tentando descobrir por que e como alguns dos processos que o Discourse gera estão sendo executados sob minha conta de usuário Linux normal e não root:
Atualmente estou executando o Discourse sobre o Clear Linux, então não é exatamente um sistema base padrão, mas já vi o mesmo comportamento com uma instalação do Discourse no Debian também. No sistema atual, fiz SSH com minha conta de usuário rahim12 e executei um sudo su antes de instalar e configurar tudo relacionado ao contêiner do Discourse. E em meus testes anteriores no Debian, fiz SSH no sistema diretamente como root. Portanto, é normal que alguns processos, como os workers do Unicorn, sejam executados sob minha conta de usuário normal, e como eles souberam usá-la? Eles são lançados automaticamente sob o UID do Linux de 1000?
O usuário do discourse dentro do contêiner tem UID 1000, então se você olhar a lista de processos fora do contêiner, ela mostrará qual usuário é o UID 1000.
No meu caso, mostraria como claudia, pois esse é o nome de usuário que todos os meus servidores usam para o UID 1000.
Ahh, interessante, então o SO host está fazendo uma consulta do nome de usuário para o UID 1000 no host, mas ele na verdade pertence a um UID diferente 1000 dentro do contêiner?
E isso já me pegou algumas vezes porque em um dos meus servidores de desenvolvimento local eu tenho um contêiner Docker que possui processos que rodam como UID 1001 (o nome de usuário interno do contêiner é WebDev) e no sistema operacional host, ele mostra uma conta que está desativada desde 2019, mas precisa existir por motivos históricos.
Muito obrigado por explicar isso, então essa é uma peculiaridade bastante estranha do Docker. Como um administrador Linux convencional, acostumado a instalar e configurar manualmente cada componente da pilha, não me sinto totalmente confortável com o paradigma opaco de conteinerização e seus scripts de configuração automágica que puxam dependências e configurações de um milhão de fontes diferentes. Mas é difícil argumentar contra a velocidade e a reprodutibilidade da implantação do Discourse e também do servidor de e-mail Dockerizado que estou executando, então não estou reclamando.
Eu provavelmente deveria ter mencionado que é uma peculiaridade do Docker porque é uma peculiaridade dos Contêineres Linux em geral.
Essencialmente, eles são semelhantes às *jails do BSD, mas na verdade muito mais rigorosos em como isolam as coisas.
Pessoalmente, não sou fã deles, mas na verdade entendo perfeitamente por que o Discourse usa o Docker. O isolamento realmente torna muito mais difícil que alterações no host afetem o Discourse. De fato, exceto por uma atualização do kernel que quebrou o Docker brevemente há um tempo, nunca tive uma atualização do host que quebrasse o Discourse.