/etc/environment 에 관해서(전역환경변수)
Linux /etc/environment
완벽 가이드
1. 개요
/etc/environment
는 리눅스 시스템 전역에서 사용하는 환경변수를 설정하는 파일입니다.
주요 특징:
- 로그인 세션 전체에 적용 (PAM 기반)
- 쉘 종류와 무관 (bash, zsh, GUI 로그인, SSH 등)
- 간단한 문법 (
KEY=value
) - 스크립트 기능 없음 (
export
, 변수 확장 불가)
목적: PATH, 로케일, 프록시 설정 등 공통 환경변수를 한 곳에서 관리.
2. 문법 및 제약
- 형식:
KEY=value
(공백 포함 시"쌍따옴표"
로 감싸야 함) export
키워드 사용 불가$HOME
,~
, 명령 치환($(...)
) 동작 안 함- 주석은 보장되지 않으므로 가급적 피할 것
예시 문법
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
LANG="ko_KR.UTF-8"
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
HTTP_PROXY="http://192.168.0.10:3128"
HTTPS_PROXY="http://192.168.0.10:3128"
NO_PROXY="localhost,127.0.0.1,10.96.0.0/12,10.244.0.0/16,.svc,.cluster.local"
3. 적용 범위와 우선순위
- PAM을 거치는 로그인 세션(TTY, SSH, GUI)에 적용
- 기존 세션에는 반영 안 됨 → 재로그인 필요
- 쉘 초기화 스크립트(
/etc/profile
,~/.bashrc
)에서 동일 변수를 재설정하면 덮어씀 - systemd 서비스는
/etc/environment
를 자동으로 읽지 않을 수 있음
4. 다른 설정 파일과 비교
파일 | 대상 | 특징 |
---|---|---|
/etc/environment | 전역 세션 | 간단한 KEY=value, 스크립트 불가 |
/etc/profile , /etc/bash.bashrc | 로그인 쉘 | export 가능, 조건문 가능 |
/etc/default/<서비스> | 서비스 전용 | Debian/Ubuntu 전통 방식 |
systemd unit 파일 | 서비스 전용 | Environment= , EnvironmentFile= 사용 |
5. 설정 방법
sudoedit /etc/environment
# 또는
sudo nano /etc/environment
변경 후 새 세션에서 확인:
printenv | grep -E 'LANG|JAVA_HOME|HTTP|PATH'
현재 세션에 임시 반영 (테스트용):
export $(grep -v '^#' /etc/environment | xargs -d '\n')
6. 좋은 예시
(A) 로케일 설정
LANG="ko_KR.UTF-8"
LC_ALL="ko_KR.UTF-8"
(B) PATH 표준화
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
(C) 프록시 설정 (K8s 홈랩)
HTTP_PROXY="http://192.168.0.10:3128"
HTTPS_PROXY="http://192.168.0.10:3128"
NO_PROXY="localhost,127.0.0.1,10.96.0.0/12,10.244.0.0/16,.svc,.cluster.local,harbor.home.local"
(D) 개발 도구 경로
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
GOPATH="/home/ubuntu/go"
7. K8s 홈랩 환경에서 주의점
7.1 kubelet, containerd 같은 systemd 서비스
/etc/environment
만으로 적용 안 될 수 있음- systemd drop-in 사용 권장
예) containerd 프록시 설정
sudo mkdir -p /etc/systemd/system/containerd.service.d
cat <<'EOF' | sudo tee /etc/systemd/system/containerd.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.0.10:3128"
Environment="HTTPS_PROXY=http://192.168.0.10:3128"
Environment="NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,10.244.0.0/16,.svc,.cluster.local"
EOF
sudo systemctl daemon-reload
sudo systemctl restart containerd
7.2 파드 환경변수
- 컨테이너 환경변수는 ConfigMap 또는 Secret 사용
/etc/environment
에 비밀 값 저장 금지 (world-readable)
8. 자주 하는 실수
$HOME
같은 변수 확장 사용 → 적용 안 됨- 현재 세션에서 바로 안 보임 → 재로그인 필요
- cron 작업에서 적용 기대 → 별도 설정 필요
- 민감정보 저장 → 보안 취약
- PATH 덮어쓰기 충돌 → 최소한만 설정
9. K8s 운영 체크리스트
-
/etc/environment
에 전역 환경 최소화 (로케일, PATH, 프록시) - 서비스별 환경(systemd drop-in) 별도 관리
- 앱 환경변수는 ConfigMap/Secret 사용
- 변경 시 재로그인/서비스 재시작
- 민감정보 금지 원칙 준수