
LWN.net - GNOME, Wayland 및 환경 변수
Strode는 환경 변수에 대한 "현대적인" 솔루션으로 나아가고 싶어하지만 손상된 시스템이 더 광범위하게 노출되는 데서 오는 압박감을 분명히 느끼고 있습니다. 따라서 이 글을 쓰는 시점에서 버그에 대한 그의 가장 최근 의견은 다음과 같습니다. "예, 나는 이것에 대해 고민하고 있습니다." 따라서 Fedora 25에서는 로그인 셸을 로그인 프로세스로 복원하는 업데이트가 나타날 가능성이 높습니다. "적절한 수정"은 나중에 기다릴 것입니다.
이제 Fedora 28이 나왔습니다. "적절한 수정" 측면은 어디에 있습니까? 사용자가 세션에 대한 환경 변수를 설정할 수 있는 미래 지향적인 방법이 아직 있습니까?
~/.bash_profile
즉, Fedora와 다른 곳에서도 작동하는 대체품입니다 .
답변1
그놈 3.24의 경우 Strode되돌린 그놈 세션로그인 쉘을 실행하여 환경 변수를 로드합니다.
같은 의견에는 이러한 세션 환경 변수를 시스템 사용자 서비스에 푸시하기 위한 gnome-session 패치가 포함되어 있습니다. 여기에는 가 포함되므로 gnome-terminal
상당히 중요합니다 :).
GDM 세션 실행 프로그램은 이미패치됨3.22에서는 systemd --user
. 따라서 systemd 환경을 세션으로 가져온 다음 로그인 셸에 의해 수정되고 결과도 systemd --user
.
괜찮게 작동해야 합니다... Fedora 28에서의 테스트를 제외하고는 gdm 세션 실행 프로그램이 시스템 환경 변수가 기존 환경을 덮어쓰는 것을 허용하지 않기 때문에 PATH 등에서는 제대로 작동하지 않습니다.GNOME 이슈 트래커에 보고했습니다..
그것은동의했다login
(텍스트 콘솔용 )~할 수 있었다사용자 셸을 시작하기 전에 환경 구성을 로드하기 위해 일부 패치를 수락했지만 지금까지는 변경 사항이 없습니다.유틸리티 리눅스 v2.32.
나는 SSH 패치를 찾는 데 신경 쓰지도 않았습니다 :).
systemd 환경은 이미 .NET에서 구성 가능했습니다 user.conf
. 이러한 노력의 일환으로 systemd v233얻은environment.d/
예를 들어 기존 목록 PATH
이나 LD_LIBRARY_PATH
검색 목록 에 추가 디렉터리를 추가하는 기능을 지원하는 형식 입니다.
나는 사용자 로그인을 위한 환경 변수를 설정하는 가장 좋은 장소는 PAM 모듈이 될 것이라고 생각했습니다. 우리는 이미 PAM 모듈을 가지고 있습니다 pam_env
. 논리는
로그인, gdm, sshd(절대 발생하지 않음) 등을 요청하는 것은 실제로 좋지 않은 솔루션입니다.
불행하게도 배포판 사이의 구성은 pam_env
짜증스러울 정도로 일관성이 없으며, 거기에는 그럴 만한 이유가 있을 것 같습니다. 특징~/.pam_environment
보안을 위한 큰 "발총"으로 간주됩니다.. 또한보십시오CVE-2010-4708.
pam_exec
예를 들어보세요 . 시스템 관리자가 이를 사용하여 로그인 후 구성 등을 수행하는 것을 상상할 수 있지만 사용자는 LD_PRELOAD를 설정하여 루트를 얻을 수 있습니다. 또는 pam_selinux는 실제로 pam_getenv를 직접 사용하므로 사용자가 이를 조작할 수 있습니다. 그러나 내 요점은 실제로 이러한 구체적인 예가 아니라 루트로 수행하면 위험이 있다는 것을 설명하기 위한 것입니다. 그리고 조금 나중에 수행하면 이러한 위험을 완전히 우회하여 잠재적인 보안 버그 전체 클래스를 제거할 수 있습니다. 로그인 프로세스. 일반적으로 루트로 실행하는 데 코드가 필요하지 않으면 루트로 실행하면 안 됩니다! 물론 논리적으로 나중에 하는 것이 더 어색하기 때문에 여전히 고민이지만, 루트로 하는 것이 사용자로 하는 것보다 더 위험하다는 점에는 의심의 여지가 없습니다.pam_exec 매뉴얼에는 다음과 같이 명시되어 있습니다. "pam_exec에 의해 호출되는 명령은 사용자가 환경을 제어할 수 있다는 점을 인식해야 합니다."
답장. pam_env, 참고 fedora는 이를 pam 스택의 맨 위에 놓고 기본적으로 ~/.pam_environment를 비활성화합니다.
스택 맨 위에 배치하는 것은 버그이며 이렇게 하지 말라는 명시적인 경고를 위반합니다. "PAM 환경 변수 설정은 다른 모듈에 부작용을 일으킬 수 있으므로 이 모듈은 스택의 마지막 모듈이어야 합니다."
[...] 혼란을 감안할 때 이것은 분명히 풋건입니다.
이를 위해 쉘 구성을 사용하는 일반적인 아이디어는 예를 들어 Ubuntu Desktop 16.04 그래픽 로그인에서도 작동하는 것으로 보입니다. 그러나 한 가지 차이점이 있습니다. Fedora는 ~/.bash_profile
기본적으로 생성되며 (bash의 경우) ~/.profile
무시됩니다. 대신 Ubuntu 및 기타 Debian 기반 배포판은 ~/.profile
기본적으로 생성됩니다. (즉, 이 파일은 에서 새 사용자를 생성할 때 제공됩니다 /etc/skel
.)
(최근 Ubuntu에서 이것을 사용했습니다. Ubuntu는 GUI 세션에 대한 로그인 셸을 실행하면서 시간이 지남에 따라 변경된 것 같습니다. 예: 참조https://superuser.com/questions/183870/difference-between-bashrc-and-bash-profile/183980#183980,https://askubuntu.com/questions/40287/etc-profile-not-being-sourced,"gnome-terminal이 로그인 쉘이 아닌 이유는 무엇입니까?", 그리고"쉘 로그인의 의미('bash -l')").