~/.bash_profile 없이 환경변수를 설정한 상태는 어떤가요?

~/.bash_profile 없이 환경변수를 설정한 상태는 어떤가요?

LWN.net - GNOME, Wayland 및 환경 변수

Strode는 환경 변수에 대한 "현대적인" 솔루션으로 전환하기를 원했지만 손상된 시스템에 대한 광범위한 노출로 인한 압박감을 분명히 느꼈습니다. 따라서 이 글을 쓰는 시점에서 버그에 대한 그의 최근 의견은 다음과 같습니다: "예, 이 문제를 삭제하는 것을 고려 중입니다." 따라서 Fedora 25에서는 로그인 프로세스에 대한 "적절한 수정"을 복원하는 업데이트를 보게 될 것입니다. 나중에 기다리세요.

Fedora 28입니다. "올바른 수정" 측면에서 우리는 어디에 있습니까? 사용자가 세션에 대한 환경 변수를 설정할 수 있도록 하는 사전 예방적인 방법이 있습니까?

~/.bash_profile즉, Fedora 와 다른 곳에서도 작동하는 대체품입니다 .

답변1

그놈 3.24의 경우 Strode복원된 그놈 세션로그인 셸을 실행하여 환경 변수를 로드합니다.

같은 의견에는 이러한 세션 환경 변수를 systemd 사용자 서비스에 푸시하기 위한 gnome-session 패치가 포함되어 있습니다. 이것들은 포함되어 있으므로 gnome-terminal매우 중요합니다 :).


GDM 세션 실행 프로그램에는패치됨3.22에서는 systemd --user. 따라서 systemd 환경을 세션으로 가져온 다음 로그인 셸에 의해 수정되고 결과가 다시 복사됩니다 systemd --user.

잘 작동해야 합니다... Fedora 28에서의 테스트를 제외하고는 gdm 세션 실행 프로그램이 시스템 환경 변수가 기존 환경을 재정의하는 것을 허용하지 않기 때문에 예를 들어 PATH에서는 제대로 작동하지 않습니다.그놈 문제 추적기에 문제를 보고했습니다..

그것은동의하다( login텍스트 콘솔의 경우)할 수 있다사용자 셸을 시작하기 전에 환경 구성을 로드하기 위해 일부 패치를 수락했지만 지금까지 변경된 사항은 없습니다.유틸리티Linux v2.32.

나는 SSH 패치를 찾는 데 신경 쓰지도 않았습니다 :).

systemd 환경은 이미 구성 가능합니다 user.conf. 이 작업의 일환으로 systemd v233얻다environment.d/이제 기존 또는 검색 목록에 추가 디렉터리 추가를 지원하는 형식입니다 .PATHLD_LIBRARY_PATH


나는 사용자 로그인을 위한 환경 변수를 설정하는 가장 좋은 장소는 PAM 모듈이라고 생각합니다. 우리는 이미 그렇게 하고 있습니다 pam_env. 논리는

이를 위해 로그인, gdm, sshd(절대 발생하지 않음) 등을 요구하는 것은 정말 나쁜 해결책입니다.

불행하게도 구성은 pam_env배포판 간에 짜증스러울 정도로 일관성이 없으며 여기에는 그럴만한 이유가 있는 것 같습니다. ~/.pam_environment특징안전한 것으로 간주되는 큰 "총". 당신은 또한 볼 수 있습니다CVE-2010-4708.

pam_exec예를 들어 살펴보십시오 . 시스템 관리자가 로그인 후 구성이나 기타 작업을 수행하기 위해 이를 사용한다고 상상할 수 있지만 사용자는 LD_PRELOAD를 설정하여 루트 권한을 얻을 수 있습니다. 또는 pam_selinux는 실제로 pam_getenv를 직접 사용하므로 사용자가 이를 조작할 수 있습니다. 그러나 내 요점은 이러한 구체적인 예가 아니라 루트로 이 작업을 수행하는 데 위험이 있으며 나중에 수행하여 이러한 위험을 완전히 우회하고 잠재적인 보안 버그 전체 클래스를 제거할 수 있다는 점을 설명하기 위한 것입니다. 로그인 프로세스. 일반적으로 코드를 루트로 실행할 필요가 없다면 루트로 실행하면 안 됩니다! 물론 나중에 하는 것이 논리적으로 더 어색하기 때문에 여전히 혼란스럽습니다. 하지만 루트로 하는 것이 사용자로 하는 것보다 더 위험하다는 것은 의심할 여지가 없습니다.

pam_exec 매뉴얼에는 다음과 같이 명확하게 명시되어 있습니다. "pam_exec가 호출하는 명령은 사용자가 [sic] 환경을 제어할 수 있다는 것을 알아야 합니다."

에 대한. 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')").

관련 정보