"su"와 함께 "systemctl --user"를 실행하지 않으면 왜 문제가 발생합니까?

"su"와 함께 "systemctl --user"를 실행하지 않으면 왜 문제가 발생합니까?

최근 Lubuntu 22.04 설치에서 systemctl --user사용자 1000으로 실행하면 다음을 얻습니다.

❯ systemctl status --user
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
❯ eval $(dbus-launch --sh-syntax)
❯ systemctl status --user
Failed to read server status: Process org.freedesktop.systemd1 exited with status 1

그러나 다른 사용자(1001)나 동일한 사용자를 사용할 때는 via가 정상적으로 su $user작동합니다 .systemctl status --user

데이터:

  • 사용자 1001이 활성 tty 세션을 갖고 있는 경우(를 통해 su해당 세션이 활성 상태임을 ls /run/user표시 1001하고 표시합니다.systemctl status user-1001.slice
  • journalctl -u user-1000.slice오류가 표시되지 않습니다.
  • 문제는 새로 생성된 사용자에게도 동일합니다.
  • 사용자 1000은 "델타"이며 su delta(델타의 ssh 세션에서) 실행되고 나면 systemclt --user모든 것이 잘 작동합니다. 어떻게 든 su필요한 환경이 생성되지만 SSH는 생성되지 않습니다.

문제를 디버깅하려면 또 무엇을 할 수 있나요? systemd 상태 구성을 새 상태로 복원할 수 있나요? 아니면 1002에서 1001까지 복사하시겠습니까?

답변1

다음에서 빌림:

D-Bus 연결을 얻을 수 없습니다: 연결이 거부되었습니다.

가 같지 않을 Failed to connect to bus때 얻을 수 있습니다 . 이는 한 사용자로 로그인한 다음 다른 사용자로 로그인하는 경우 발생할 수 있습니다.$XDG_RUNTIME_DIR$UIDsu

사용자로 로그인한 것 같습니다 1000. 그러면 su그것을 사용할 수 있습니다 1001. 사용자로 버스를 사용하려고 systemctl --user하지만 다시 동일하게 수행할 때까지는 작동하지 않습니다 1001.su 1000 ...$UID$XDG_RUNTIME_DIR

이 상황에 빠질 수 있는 다른 방법이 있을 수 있습니다.

su해결책은 그것을 전혀 사용하지 않는 것입니다. ~에 따르면시스템 개발자:

"su"는 사용자의 신원과 소수의 다른 프로세스의 자격 증명을 일시적으로 변경하는 데 사용되는 도구입니다. 완전히 새로운 로그인 세션을 여는 도구가 아닙니다. 새 로그인 세션에는 잘 정의된 원래 설정이 있으며 다른 세션에서 아무것도 상속받지 않지만 "su" uid 변경은 실제로 그렇게 하지 않습니다. 대부분의 실행 환경은 MAC 컨텍스트와 같이 실질적이고 명백하지 않은 방식으로 상속됩니다. 감사 컨텍스트, cgroup 컨텍스트, 네임스페이스 컨텍스트, 예약, 타이머 세분성,

대신 전체 세션으로 로그인했는지 확인하세요. 이를 수행하는 몇 가지 방법:

  • 새 TTY를 열고 로그인하세요.
  • machinectl login또는machinectl shell [email protected]
  • ssh [email protected]
  • 디스플레이 관리자를 종료하고 다시 로그인하십시오.

답변2

UsePAM yes내 SSHD 구성에서 누락되었습니다.

관련 정보