AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 423632
Accepted
Jon Skarpeteig
Jon Skarpeteig
Asked: 2018-02-13 08:05:27 +0800 CST2018-02-13 08:05:27 +0800 CST 2018-02-13 08:05:27 +0800 CST

systemctl --user não disponível para usuário www-data

  • 772

systemctl --userparece estar funcionando bem para o usuário de desktop:

dev@dev-VirtualBox:~$ systemctl --user > /dev/null
dev@dev-VirtualBox:~$ echo $?
0

Mas ao executar o mesmo comando no usuário www-data, recebo uma resposta inesperada

dev@dev-VirtualBox:~$ sudo su www-data -s /bin/bash
www-data@dev-VirtualBox:~$ systemctl --user > /dev/null 
Failed to connect to bus: No such file or directory 
www-data@dev-VirtualBox:~$ echo $? 
1

Como habilitar systemctl --useraqui?

Executando o Ubuntu 16.04

systemd not-root-user
  • 4 4 respostas
  • 7772 Views

4 respostas

  • Voted
  1. JdeBP
    2018-02-13T09:08:25+08:002018-02-13T09:08:25+08:00

    A instância por usuário do systemd é iniciada por um gancho no processo de login, um pam_systemdPAM, para login de terminal virtual/real comum e login remoto via SSH e outros.

    Você não está fazendo login. Você está aumentando os privilégios de sua sessão de login existente com sudo su www-data. (A propósito, isso é redundante. sudo -u www-dataIrá direto para www-datasem seus comandos em execução como superusuário.) Você não invocou o gancho.

    Portanto www-data, a instância por usuário do systemd não foi iniciada e systemctl --usernão encontra nada para conversar.

    Você pode iniciá-lo manualmente:

    % sudo install -d -o www-data /run/user/`id -u www-data`
    % sudo systemctl start user@`id -u www-data`

    (Se você fez isso na ordem errada, então pare o serviço e execute-os na ordem correta. Fazê-los na ordem errada acaba em um estado em que o diretório de tempo de execução está vazio e não possui o D-Bus e outros arquivos de soquete , mas o serviço está em execução e nunca se comunicará com os clientes.)

    O único problema é que sua DBUS_SESSION_BUS_ADDRESSvariável precisa ser alterada para que os programas clientes do Desktop Bus systemctlconversem com o corretor do Desktop Bus da outra conta quando você os estiver executando com os privilégios dessa outra conta:

    % sudo -u www-data DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/`id -u www-data`/bus systemctl --user

    Esta é a maneira simples. A maneira mais complexa é ajustar a configuração do PAM para que sudochame o pam_systemdgancho. No entanto, isso tem efeitos colaterais, principalmente com relação à XDG_RUNTIME_DIRvariável de ambiente, que você provavelmente não deseja. Apenas tente esta alternativa se tiver certeza de que está bem com os efeitos da introdução pam_systemdem sudo.

    Leitura adicional

    • Jonathan de Boyne Pollard (2014). Não abuse do su para descartar os privilégios do usuário . Respostas Frequentemente Dadas.
    • Lennart Poettering et ai. (2017). pam_systemd. páginas de manual do systemd . Freedesktop.org.
    • 14
  2. Best Answer
    Jon Skarpeteig
    2018-02-16T00:04:10+08:002018-02-16T00:04:10+08:00

    Então, finalmente consegui descobrir a peça que faltava no quebra-cabeça. Graças a algumas dicas excelentes de @JdeBP, consegui determinar:

    • systemd --user estava executando para www-data
    • DBUS_SESSION_BUS_ADRESS parece ser ignorado no Ubuntu
    • XDG_RUNTIME_DIR NÃO foi definido

    Definir XDG_RUNTIME_DIR para exportar "/run/user/$UID" resolveu meu problema

    Etapas que segui para obter o comportamento pretendido:

    % sudo loginctl enable-linger www-data # Enable systemd --user service to start at boot
    % XDG_RUNTIME_DIR="/run/user/$UID" systemctl --user # Access services as www-data without actually logging in
    
    • 6
  3. rugk
    2021-05-31T13:09:54+08:002021-05-31T13:09:54+08:00

    Todas essas são soluções alternativas bastante feias.

    Como já foi dito, o problema é:

    Você não está fazendo login. Você está aumentando os privilégios de sua sessão de login existente […]

    Como tal, "basta" fazer o login…

    Se você estiver em um servidor, precisará usar o terminal. Eu tive que fazer a mesma pergunta , mas finalmente consegui descobrir. A solução é tão fácil quanto executar este comando para alternar para o usuário (respectivamente, execute um shell adequado com esse usuário):

    $ sudo machinectl shell --uid www-data
    

    Observe que sudo loginctl enable-linger www-dataainda é útil se você pretende iniciar serviços ou algo assim, para que sejam executados na inicialização. Caso contrário, eles só seriam executados no "login" desse usuário.

    • 1
  4. tanius
    2020-06-19T18:19:49+08:002020-06-19T18:19:49+08:00

    Conforme observado em um comentário aqui , você pode estar perdendo os pacotes relevantes do Ubuntu que permitem a execução systemctlcomo usuário. Acabou de acontecer comigo. Consertar:

    1. apt install libpam-systemd

    2. Faça login novamente via SSH como o usuário que deve ser capaz de executar systemctl --user. Portanto, não como root.

    Agora, echo $XDG_RUNTIME_DIRdeve funcionar sem mais etapas, mostrando algo assim:

    $ echo $XDG_RUNTIME_DIR
    /run/user/1012
    

    Ubuntu 18.04 LTS aqui.

    • 0

relate perguntas

  • Níveis diferenciadores no journalctl

  • Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _

  • systemd: como posso executar um script no início de um serviço, sem editar a definição do serviço

  • Use o suporte de watchdog do systemd para reiniciar o aplicativo

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve