내 아치 서버에서는 홈 디렉토리의 사용자로 제한되도록 설정했습니다. 난 달린다:
useradd -m -s /bin/bash username
그리고passwd username
나는 읽었다이 위키 기사...
각 사용자가 시작 시 노드 서버를 실행하도록 하려면 systemd 사용자 서비스를 사용해야 한다고 생각합니다. 그래서 사용자 계정에 로그인 su username
하고 다음을 포함하는 파일을 만들었습니다 ~/.config/systemd/user/serve.service
.
[Unit]
Description=One of the servers
[Service]
ExecStart=/usr/bin/node /home/username/server.js
[Install]
WantedBy=default.target
그런 다음 나는 달렸고 systemctl --user enable serve.service
그 응답은 다음과 같습니다.Failed to connect to bus: Permission denied
내가 이해한 systemctl --user ...
바로는 루트가 아닌 사용자로 명령을 실행해야 합니다.
그렇다면 이 구성에서 내가 놓치고 있는 것은 무엇입니까?
답변1
그래서 사용자 계정에 로그인했습니다.
su username
아니요, 그렇지 않습니다.
로그인하지 않으셨습니다. 특권을 강화하고 있습니다.기존 로그인 세션그리고 su username
.
systemctl
이 --user
옵션은 사용자별 데스크탑 버스를 찾고, 사용자별 데스크탑 버스 데몬에 의해 관리되며, systemd
이 버스를 통해 사용자별 서비스를 관리하는 사용자별 인스턴스와 통신합니다.
su
로그인 메커니즘이 아님. 효과가있다기존에대화형 로그인 세션. 해당 세션 내에서 프로세스에는 사용자별 런타임 디렉터리의 위치( XDG_RUNTIME_DIR
), 사용자별 데스크톱 버스의 위치( ) 및 X 서버의 위치( ) DBUS_SESSION_BUS_ADDRESS
와 같은 기타 정보를 알려주는 환경 변수가 있습니다 .DISPLAY
특히 동일한 경로를 DBUS_SESSION_BUS_ADDRESS
암시적으로 참조하거나 명시적으로 이름을 지정할 수 있습니다 . XDG_RUNTIME_DIR
경로는 일반적으로 /run/user/1001/bus
Desktop Bus Agent의 액세스 소켓과 유사합니다(예: 사용자 ID가 1001이라고 가정).
이러한 변수는 변경되지 않습니다 su
. .pkexec
결과적으로 su
로그인 세션에서 두 번째 사용자에 연결하는 경우 systemctl
해당 두 번째 사용자로 실행하면 첫 번째 사용자의 개인 디렉터리에 있는 Desktop Bus Agent 액세스 소켓에 연결을 시도하게 됩니다. 사용자 1002(예를 들어 두 번째 사용자에 대한 사용자 ID 선택)는 /run/user/1001
그 안에 있는 어떤 것도 액세스할 수 없습니다. xe가 디렉터리에 대한 읽기+실행 액세스 권한을 갖고 있더라도 xe는 /run/user/1001/bus
사용자 1001 권한에만 액세스 권한을 부여하므로 해당 디렉터리에 액세스할 수 없습니다.
물론, 이것은아니요올바른 데스크탑 버스 브로커와 상담하여 시작하십시오. 너랑 소통하고 싶니?두번째사용자의 데스크탑 버스는 이를 통해 프록시되고 두 번째 사용자의 사용자별 인스턴스에 도달합니다 systemd
.
간단한 해결책은 su
이러한 환경 변수를 두 번째 사용자 계정에 적합한 환경 변수로 설정하여 두 번째 사용자의 데스크탑 버스를 가리키는 것입니다.
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1002/bus su 사용자 이름 -c 'systemctl --user'
물론 이 경우 편리한 도구를 사용하여 설정하면 userenv
해당 버스 주소를 수동으로 입력할 필요가 없습니다.
su 사용자 이름 -c 'userenv --set-dbus systemctl --user'
추가 읽기
- https://unix.stackexchange.com/a/407863/5132
- https://unix.stackexchange.com/a/423648/5132
- 조나단 데보인 폴라드(2014).사용자 권한을 제거하기 위해 su를 남용하지 마십시오.. 일반적인 답변.
- 조나단 드 보인 폴라드.
userenv
. nosh 도구 세트 매뉴얼 페이지. 소프트웨어. - https://unix.stackexchange.com/a/427917/5132