sudo
라는 사용자가 Amazon Linux 2 EC2 이미지를 다시 로드하려고 할 my-host
때 다음 오류 메시지를 받았습니다 .systemctl
[my-host@ip-12-3-4-56 ~]$ systemctl --user daemon-reload
Failed to get D-Bus connection: Connection refused
이 오류를 해결하고 제거하려면 정확히 무엇을 해야 합니까?
이 오류 메시지에 대해 제가 찾은 다른 게시물은 apt-get
여기에 솔루션이 적용되지 않는 Debian 또는 솔루션이 여기에 적용되지 않는 Docker 이미지에 관한 것입니다.
문제가 사용자 권한과 관련된 경우 문제를 해결하려면 어떤 단계를 수행해야 합니까?
이 컴퓨터에는 systemctl
이와 같은 일부 명령이 sudo
.
@Stewart 및 @JdeBP가 제안한 대로 사용자를 직접 다시 로그인해 보세요.
그런 다음 외부 세계에서 직접 SSH 기능을 갖춘 sudo 사용자를 사용해 보았지만 여전히 다음과 같은 결과를 얻었습니다.
[ssh-login-user@ip-12-3-4-567 ~]$ systemctl --user daemon-reload
Failed to get D-Bus connection: No such file or directory
[ssh-login-user@ip-12-3-4-567 ~]$ echo $XDG_RUNTIME_DIR $UID
/run/user/1001 1001
[ssh-login-user@ip-12-3-4-567 ~]$ systemctl --user status
Failed to get D-Bus connection: No such file or directory
[ssh-login-user@ip-12-3-4-567 ~]$ sudo install -d -o ssh-login-user /run/user/`id -u ssh-login-user`
[sudo] password for ssh-login-user:
[ssh-login-user@ip-12-3-4-567 ~]$ sudo systemctl start user@`id -u ssh-login-user`
Failed to start [email protected]: Unit not found.
[ssh-login-user@ip-12-3-4-567 ~]$ sudo -u ssh-login-user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/`id -u ssh-login-user`/bus systemctl --user
Failed to get D-Bus connection: No such file or directory
상태를 확인하기 위해 systemctl
다음과 같이 다운그레이드된 서비스를 보고하기 위해 다음 작업도 수행했습니다.
● ip-12-3-4-567.aws-region-n.compute.internal
State: degraded
Jobs: 0 queued
Failed: 1 units
Since: Wed 2020-10-28 23:40:50 UTC; 7min ago
CGroup: /
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
├─user.slice
│ └─user-1001.slice
│ └─session-2.scope
│ ├─18736 sshd: ssh-login-user [priv]
│ ├─18738 sshd: ssh-login-user@pts/0
│ ├─18739 -bash
│ ├─18792 sudo systemctl status
│ └─18793 systemctl status
└─system.slice
├─rngd.service
│ └─2692 /sbin/rngd -f
├─amazon-ssm-agent.service
│ ├─3810 /usr/bin/amazon-ssm-agent
│ └─4428 /usr/bin/ssm-agent-worker
├─libstoragemgmt.service
│ └─2694 /usr/bin/lsmd -d
├─systemd-udevd.service
│ └─1968 /usr/lib/systemd/systemd-udevd
├─system-serial\x2dgetty.slice
│ └─[email protected]
│ └─3273 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
├─chronyd.service
│ └─2685 /usr/sbin/chronyd
├─auditd.service
│ └─2646 /sbin/auditd
├─systemd-journald.service
│ └─1931 /usr/lib/systemd/systemd-journald
├─atd.service
│ └─3239 /usr/sbin/atd -f
├─sshd.service
│ └─3486 /usr/sbin/sshd -D
├─crond.service
│ └─3529 /usr/sbin/crond -n
├─gssproxy.service
│ └─2711 /usr/sbin/gssproxy -D
├─rsyslog.service
│ └─3229 /usr/sbin/rsyslogd -n
├─rpcbind.service
│ └─2683 /sbin/rpcbind -w
├─network.service
│ ├─2919 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid eth0
│ └─3034 /sbin/dhclient -6 -nw -lf /var/lib/dhclient/dhclient6--eth0.lease -pf /var/run/dhclient6-eth0.pid eth0
├─lvm2-lvmetad.service
│ └─1953 /usr/sbin/lvmetad -f
├─postfix.service
│ ├─3177 /usr/libexec/postfix/master -w
│ ├─3178 pickup -l -t unix -u
│ └─3179 qmgr -l -t unix -u
├─acpid.service
│ └─3456 /usr/sbin/acpid
├─dbus.service
│ └─2681 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
├─system-getty.slice
│ └─[email protected]
│ └─3274 /sbin/agetty --noclear tty1 linux
└─systemd-logind.service
└─2686 /usr/lib/systemd/systemd-logind
이 문제를 해결하기 위해 우리가 또 무엇을 할 수 있나요?
답변: 서비스가 또는 로 실행되는 대신 지정된 사용자로 실행되도록 파일에 사용자를 지정하는 대신 systemctl
다음으로 실행하기로 결정했습니다 . 아래 답변으로는 문제가 해결되지 않았기 때문에 이 접근 방식을 선택했습니다.sudo
.service
root
sudo
답변1
Stewart는 다른 계정의 명령 사용이 일치하지 않는다는 점에 대해 XDG_RUNTIME_DIR
정확합니다 .UID
su
때때로 사용자 관리자 인스턴스도 사용자에 대해 실행되지 않습니다 UID
(예:[이메일 보호됨]).
따라서 다음과 같은 오류 메시지가 나타납니다.
Failed to get D-Bus connection: No such file or directory
다음 사항이 있는지 확인하세요.
ls -l /usr/lib/systemd/system/user{,-runtime-dir}@.service
그렇다면 사용자 관리자 인스턴스를 시작하십시오.사용자UID루트 사용자로서:
systemctl start user@USER_UID.service
그렇지 않으면 더 읽어보세요매뉴얼 [email protected]
페이지.
유용한 링크:
답변2
어떻게 로그인하나요 my-host
?
와 함께 있으면 생성되지도 않고 업데이트되지도 않는 su
것으로 나타났습니다 ./run/user/$UID
XDG_RUNTIME_DIR
user ~ $ echo $XDG_RUNTIME_DIR $UID
/run/user/1000 1000
user ~ $ su my-host
my-host ~ $ echo $XDG_RUNTIME_DIR $UID
/run/user/1000 1001 <-- Mismatch here!
my-host ~ $ systemctl --user status
Failed to connect to bus: Permission denied
변경된 사항이 없으므로 systemd는 $XDG_RUNTIME_DIR
원래 사용자에게 권한이 없는 사용자로 런타임에 연결을 시도합니다.my-host
~에 따르면시스템 개발자:
"su"는 사용자의 신원과 소수의 다른 프로세스의 자격 증명을 일시적으로 변경하는 데 사용되는 도구입니다. 완전히 새로운 로그인 세션을 여는 도구가 아닙니다. 새 로그인 세션에는 잘 정의된 원래 설정이 있으며 다른 세션에서 아무것도 상속받지 않지만 "su" uid 변경은 실제로 그렇게 하지 않습니다. 대부분의 실행 환경은 MAC 컨텍스트와 같이 실질적이고 명백하지 않은 방식으로 상속됩니다. 감사 컨텍스트, cgroup 컨텍스트, 네임스페이스 컨텍스트, 예약, 타이머 세분성,
대답은 my-host
새로운 세션처럼 로그인하는 것입니다. 방법:
- 재시작
- 디스플레이 관리자를 종료하고 다시 로그인하세요.
machinectl login
ssh [email protected]
환경 변수를 수동으로 설정 하고 설정하는 등의 작업을 수행하는 다른 게시물을 본 적이 있지만 mkdir /run/user/$(id -u)
가장 신뢰할 수 있는 방법은 단순히 로그인 방법을 변경하는 것입니다. 깨끗한 로그인으로 이 모든 작업을 수행할 수 있습니다.XDG_RUNTIME_DIR
DBUS_SESSION_BUS_ADDRESS
답변3
내가 쓴 또 다른 답변은 사용자가 로그인한 경우에 적용됩니다. 이 답변에 대한 귀하의 의견은 귀하가 원격으로 로그인하지 않았음을 나타냅니다. my-host
시스템 사용자 인 것 같습니다 .
우리가 종종 사용자 버스를 사용하려는 이유는 사용자가 자신의 장치를 제어 systemctl
하고 자신의 로그를 볼 수 있기 때문입니다 journalctl
. 사용자가 로그인하지 않은 시스템 사용자라면 누구도 버스를 제어할 수 없으므로 의미가 없습니다.
systemd 사용자 버스를 사용하는 대신 systemd 시스템 버스를 사용하는 것이 좋습니다.
특정 사용자로 애플리케이션을 실행해야 하는 경우 섹션 User=
에 추가하기만 하면 됩니다 [Service]
. 그런 다음 시스템 버스의 일부로 실행되지만 권한이 없는 시스템 사용자로 실행됩니다. 어쩌면 그게 systemctl --user
당신이 처음부터 하고 싶었던 일이었을지도 모릅니다.
<systemd/sd-bus.h>
호출이 포함된 응용 프로그램 이나 호출하는 스크립트를 실행하고 systemctl
이를 다음과 같이 실행하려는 경우 my-host
시스템 버스를 사용하지 않고도 시스템 버스에 대한 액세스 권한을 부여할 수 있습니다 sudo
. 이를 위해서는 몇 가지 폴킷 규칙이 필요합니다.이 답변에 설명되어 있습니다또는이 답변. 시스템도 사용하려면 그룹에 journal
추가하거나 지침을 따르 세요.my-host
systemd-journal
여기.
답변4
사용자에 대해 systemctl 제어를 활성화해야 합니다...
먼저 UID를 얻으십시오.
id
예제 출력:
uid=1001(ocp) gid=1001(ocp) 그룹=1001(ocp),988(libvirt)
그런 다음 sudo 또는 root를 사용하여 권한을 설정합니다.
sudo machinectl shell --uid = 1001
완료되었습니다. 이제 다시 시도해 보세요.