그래서이 문제이것은 이전에 요청되었지만 거기에 대한 답변은 환경 변수 문제를 해결하지 못했습니다. pam-systemd
모든 자동 XDG 환경 변수가 호출되고 설정 되도록 사용자를 완전히 전환하는 방법이 있습니까 ?
다음을 비교해보세요
다음 옵션은 먼저 전원이 꺼진 컴퓨터를 켭니다.
옵션 1루트로 로그인하십시오. 셸에 다음을 입력합니다.
su -l username
echo $XDG_RUNTIME_ENV
옵션 2사용자 이름으로 로그인하세요. 셸에 다음을 입력합니다.
echo $XDG_RUNTIME_ENV
차이가 있다는 것을 알 수 있을 것입니다. /run/user/0
사용된 사용자가 변경 su
(사용자 전환) 되었음에도 불구하고 pam_systemd
전환 중에 모듈이 호출되지 않았기 때문에 옵션 1이 계속 발생합니다. 옵션 2의 수익률은 /run/user/$(id -u)
예상과 일치합니다. 이제 exit
원하는 사용자로 다시 로그인하라는 메시지가 나타날 때까지 로그아웃을 입력하기만 하면 됩니다 . 다른 방법이 있나요? sudo
대신 사용해 도 su
도움이 되지 않습니다.
구현된 echo "XDG_RUNTIME_DIR=$(id -u) >> .bash_profile"
대로 이것이 올바른 일입니까 ?.bash_profile
su
답변1
대답은 모듈이 실행되고 변수가 설정되었는지 확인하는 login
대신 그냥 사용하는 것일 수 있다고 생각합니다 . Giacomo가 지적했듯이 한 명의 사용자만( 여러 사용자가 생성된 하위 프로세스 시나리오에서와 같이) 그 내에서 파일을 변경할 수 있는지 확인하십시오. 환경.su
pam_systemd
su
위험은 다음을 사용하여 su
시스템에서 시각적으로 표시될 수 있습니다 .systemd
사용su
root -systemd
root -login # calls pam_systemd and sets XDG_RUNTIME_DIR among others
user1 -bash
user1 -su
user2 -bash # user1 has access to spawned subprocesses?
사용login
root -systemd
root -login # calls pam_systemd and sets XDG_RUNTIME_DIR among others
user2 -bash
하위 프로세스에 의해 캡슐화된 사용자는 에 의해 등록된 적이 없기 때문에 loginctl
등록되지 않습니다 .su/bash
systemd-logind.service
pam_systemd.mod
답변2
루트/sudo 액세스 권한이 있고 비밀번호를 모르거나 변경하지 않고 다른 사용자를 완전히 가장해야 하는 경우, Linux 배포판이 이를 지원할 만큼 현대적이라면 다음을 사용해야 합니다.
sudo machinectl shell --uid usernameGoesHere
이는 본질적으로 세션을 생성하고 $XDG_
사용자의 일반 환경(으로 시작하는 변수 포함)의 로그인 셸을 제공하므로 모든 것이 사용자가 정상적으로 로그인할 때와 똑같이 보이고 작동해야 합니다. 이는 로그인 자격 증명 없이 일반 사용자 로그인의 모든 측면을 복제하는 제가 본 어떤 주문보다 낫습니다 su
.sudo
말할 필요도 없이 시스템 관리자로서 이는 사용자가 직면한 문제를 해결하거나 환경에 따라 다른 사용자를 대신하여 실행하는 데 유용합니다(예: podman
.