Gostaria de saber como systemd
inicia os serviços, especificamente com qual usuário o serviço é iniciado e gostaria de usar o Jenkins em execução no meu PC com Linux como exemplo.
Eu sei que init
é pid 1
, a mãe de todos os processos no Linux e, no meu caso, pid 1
pertence a systemd
, que posso ver executando top
:
$ top
Tasks: 646 total, 1 running, 645 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.6 sy, 0.0 ni, 97.0 id, 1.3 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 257826.8 total, 198695.4 free, 28529.6 used, 30601.7 buff/cache
MiB Swap: 262012.0 total, 262012.0 free, 0.0 used. 227579.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 171284 11196 7904 S 0.3 0.0 31:49.54 systemd
Eu presumi ingenuamente que, porque systemd
é executado como root
, todos os serviços executados por ele seriam executados como root.
Mas acho que Jenkins está rodando como admin
no meu PC.
Tentei usar systemctl
para determinar qual usuário Jenkins estava executando, mas não vi nenhuma informação do usuário no stdout:
user@linux_box:~$ systemctl status jenkins
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Fri 2023-05-05 11:50:06 PDT; 3 days ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 4915)
Memory: 0B
CGroup: /system.slice/jenkins.service
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
user@linux_box:~$
... então eu tentei ps aux
:
user@linux_box:~$ ps aux | grep jenkins
admin 2042 0.0 0.0 14164 196 ? S May05 0:00 /usr/bin/daemon --name=admin --inherit --env=JENKINS_HOME=/home/admin/jenkins --output=/var/log/jenkins/jenkins.log --pidfile=/var/run/admin/admin.pid -- /usr/bin/java -Djava.awt.headless=true -jar /home/admin/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
admin 2043 1.7 5.3 48146100 14118144 ? Sl May05 83:41 /usr/bin/java -Djava.awt.headless=true -jar /home/admin/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
admin 29932 0.0 0.0 6204 892 pts/1 S+ 20:37 0:00 grep jenkins
...Acho que a coluna mais à esquerda está dizendo que Jenkins está sendo executado como admin
, não?
Alguém pode explicar a relação entre systemd
, o usuário que o executa e o usuário que executa os serviços? Seria ótimo se a resposta pudesse vincular isso ao que está acontecendo especificamente com o Jenkins neste PC com Linux.
O usuário padrão que o systemd usa para executar os serviços do sistema é de fato
root
, mas é claro que isso pode ser personalizado usando aUser
opção. Deman 5 systemd.exec
:No seu caso Jenkins, o systemd está usando uma unidade gerada com base no script sysv init
/etc/init.d/jenkins
, portanto, não está usando aUser
opção (as unidades geradas são muito básicas: como o systemd usa os scripts /etc/init.d? ). O script init parece estar chamando/usr/bin/daemon
para iniciar o Jenkins e deman 1 daemon
:No entanto, esta opção não está presente na
ps
saída, portanto, pode estar usando alguma outra maneira de alterar o UID. Confira o/etc/init.d/jenkins
roteiro para descobrir.