Correr comandos com outro utilizador – runuser
Quando se administra sistemas Linux, é normal que surja a necessidade de correr comandos com outro utilizador. Neste artigo escrevo sobre o runuser.
O runuser é um comando que permite correr comandos com outro utilizador diferente.
Para que possamos usa-lo temos ser root. É necessário ser root, para ele ter permissão de mudar internamente o id e gid para correr o comando que pretendermos, com o utilizador/grupo desejado.
Este comando é diferente de outros comandos como su/sudo entre outros que utilizam setuid, para dar permissão a outros utilizadores.
Ele também não utiliza o PAM para verificar credenciais, pois só pode ser utilizado pelo utilizador root. O que torna o runuser bastante seguro e rápido.
Sintaxe do comando
# runuser -l utilizador -c 'comando'
# runuser -l utilizador -c '/caminho/para/o/comando arg1 arg2 argn'
Opções de linha de comando
Este comando tem algumas opções que podem e devem e até têm de ser usadas em determinados contextos.
Lista de opções disponiveis:
-, -l, –login | Torna a shell uma shell de login, e usa o ficheiro de configuração da PAM runuser-l ao invés runuser. |
-g –group=group | Permite especificar o grupo primário a utilizar. |
-G –supp-group=group | Permite especificar um grupo secundário a utilizar. |
-c, –command=COMMAND | Permite especificar o comando que pretendemos correr. |
–session-command=COMMAND | Permite especificar o comando que pretendemos correr. No entanto não cria uma nova sessão. |
-f, –fast | Passa o parâmetro -f para a shell para ser utilizado com (csh ou tcsh). |
-m, –preserve-environment | Preserva a variáveis de ambiente atuais. |
-p | O mesmo que a opção -m. |
-s, –shell=SHELL | Permite usar outra shell se for permitido por /etc/shells. |
–help | Mostra os parâmetros e sai. |
–version | Mostra a ajuda e sai. |
Exemplos de uso
Este comando é importante em determinados momentos. Eu uso frequentemente, para administrar os meus sistemas e serviços.
User limites
Podemos verificar os limites configurados para o utilizador www-data que é o utilizador que é utilizado no apache no Debian/Ubuntu, desta forma:
# runuser -l www-data -s /bin/bash -c 'ulimit -SHa'
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15634
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15634
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
A opção “-s /bin/bash” é necessária aqui, porque por defeito a conta www-data está configurada com a shell /usr/sbin/nologin.
Correr trabalhos do CRON do wordpress
Eu desenvolvo alguns plugins para wordpress e alguns deles usam o cron para correr tarefas mais demoradas que não podem correr no pedido de uma pagina. Eu uso o Cron do sistema para correr estes trabalhos. No entanto em desenvolvimento necessito de correr manualmente estes comandos para verificar o seu comportamento.
Uso o seguinte comando:
# runuser -l www-data -s /bin/bash -c 'cd /var/www/html/; /usr/bin/php wp-cron.php'
1 site
32,05 MB
0time limit
512SELECT DISTINCT(`hash`), `email`, `def`, `lastModified`, `lastCheck`, `ext`, `optimized` FROM `wp_optimum_gravatar_cache` WHERE `lastCheck` < 1586122785 ORDER BY `lastCheck` ASC LIMIT 100
0resultados das que necessitam ser verificadas
posts to clear
Array
(
)
clear all posts ids cache -------clearPostsIDsOnPageCachePlugins-----------xgdgsdgsdgsdg2
Started on: 6 abril, 2020 at 21:39:45
Finished on: 6 abril, 2020 at 21:39:45
It took 0 seconds
32,05 MB
Conclusão
O runuser é um comando que devemos conhecer bem, pois ajuda bastante em tarefas rotineiras. É um comando simples e fácil de aprender.
Com este artigo pretendo dar a conhecer o runuser a quem não o conhece, para que possa tirar melhor partido do seu sistema.