Systemd는 Linux 홈 디렉토리 작동 방식을 변경합니다.

systemd 개발팀이 홈 디렉토리를 관리하는 새로운 방식을 도입하려 합니다. ‘새로운 방식’이라고 표현하는 것은 어쩌면 너무 가벼운 표현일 수 있습니다. 이것은 Linux의 근본적인 패러다임 전환입니다. 가까운 시일 내에 Linux 배포판에 적용될 예정인 systemd-homed에 대한 모든 것을 알아보겠습니다.

논란의 중심에 서다

Systemd가 2010년에 처음 등장했을 때, Linux 커뮤니티는 세 개의 진영으로 나뉘었습니다. 일부는 혁신적인 발전이라고 평가했지만, 다른 일부는 유닉스 철학에 어긋나는 결함 있는 설계라고 비판했습니다. 그리고 일부는 특별한 의견이 없었습니다.

반대 의견은 거세고 격렬했으며, 심지어 광신적인 수준에 이르기도 했습니다. systemd의 공동 개발자인 레나르트 포터링Red Hat의 소프트웨어 엔지니어로서 살해 위협까지 받았습니다.

유튜브에는 포터링에 대한 폭력을 조장하는 노래가 올라왔고, 웹사이트에서는 Linux 사용자들에게 systemd를 보이콧하라고 주장하기도 했습니다. 그의 공동 개발자인 케이 시버스 역시 비판과 학대를 받았지만, 포터링이 더 큰 비난을 감수했습니다.

그러나 불과 8개월 만에 Fedora는 systemd를 채택했습니다. 2013년 말까지 Arch, Debian, Manjaro, 그리고 Ubuntu 모두 systemd로 전환했습니다. 물론 오픈 소스의 장점은 마음에 들지 않는 부분이 있으면 소스 코드를 수정하여 자신만의 버전을 만들 수 있다는 것입니다. 실제로 Devuan과 같은 새로운 배포판은 Debian에서 파생되었으며, 오직 systemd를 사용하지 않기 위해 만들어졌습니다.

$HOME 디렉토리의 역할

Linux 디렉토리 구조에서 모든 작업은 “/home” 디렉토리에서 이루어집니다. 데이터 파일, 이미지, 음악 및 전체 개인 디렉토리 트리가 사용자 계정 이름을 딴 디렉토리 내에 저장됩니다.

애플리케이션 설정은 홈 폴더 내의 숨겨진 “도트 디렉토리”에 저장됩니다. 파일 또는 디렉토리 이름의 첫 글자가 마침표(.)이면 숨겨집니다. 이러한 설정은 중앙 레지스트리가 아닌 로컬에 저장되며, 홈 디렉토리 백업에 이러한 숨겨진 파일과 폴더가 포함되므로 설정도 함께 백업됩니다.

백업을 복원하고 LibreOffice나 Thunderbird와 같은 애플리케이션을 실행하면 숨겨진 디렉토리를 찾아 사용자 설정을 읽어옵니다. 문서 기본 설정, 도구 모음 설정 및 기타 사용자 정의가 그대로 복원됩니다. Thunderbird는 이메일 계정 정보와 이메일을 찾습니다. 각 애플리케이션을 다시 설정하는 번거로움을 피할 수 있습니다.

숨겨진 파일 및 디렉토리를 보려면 `ls -a` 명령을 사용하면 됩니다. 먼저 `ls`를 입력하면 일반 파일과 디렉토리를 볼 수 있고, `ls -a`를 입력하면 숨겨진 파일과 디렉토리도 볼 수 있습니다.

설치 시 중요한 부분이기 때문에 “/home” 디렉토리를 별도의 파티션이나 하드 드라이브에 마운트하는 것이 일반적입니다. 이렇게 하면 운영 체제나 해당 파티션에 문제가 발생했을 때 Linux 배포판을 다시 설치하거나 다른 배포판으로 교체할 수 있습니다. 그런 다음 기존 홈 파티션을 “/home”에 다시 마운트할 수 있습니다.

사용자 정보

홈 디렉토리는 단순한 데이터 저장소가 아닙니다. 사용자에 대한 정보, 즉 디지털 신원의 일부 속성도 저장합니다. 예를 들어 “.ssh” 디렉토리는 다른 컴퓨터에 대한 원격 연결 정보와 생성한 SSH 키를 저장합니다.

계정 사용자 이름, 암호 및 고유한 사용자 ID와 같은 시스템 속성은 “/etc/passwd” 및 “/etc/shadow”와 같은 다른 파일에 저장됩니다. 일부 정보는 누구나 읽을 수 있지만, 일부 정보는 루트 권한이 있는 사용자만 읽을 수 있습니다.

“/etc/passwd” 파일의 내용은 다음과 같습니다.

cat /etc/passwd

systemd-homed의 변화

systemd-homed의 목표는 데이터와 Linux 디지털 신원을 모두 담은 완전히 이식 가능한 홈 디렉토리를 제공하는 것입니다. 사용자 UID 및 기타 모든 식별 및 인증 메커니즘이 홈 디렉토리에만 저장됩니다.

홈 디렉토리를 “모든 계란을 한 바구니에 담는” 형태로 설계했기 때문에, 홈 디렉토리는 암호화됩니다. 로그인할 때마다 자동으로 암호가 해제되고 로그아웃할 때마다 다시 암호화됩니다. 기본적으로 LUKS 디스크 암호화를 사용하지만, fscrypt와 같은 다른 방법도 고려됩니다.

JSON 형식의 사용자 레코드가 “~/.identity” 디렉토리에 저장됩니다. 이 레코드에는 모든 식별 정보가 들어 있으며, 사용자가 제어할 수 없는 키로 암호화 서명됩니다.

각 사용자의 홈 디렉토리는 스냅 애플리케이션이 마운트되는 방식과 유사하게 루프백 장치에 마운트됩니다. 이를 통해 홈 디렉토리의 디렉토리 트리가 운영 체제의 디렉토리 트리와 자연스럽게 통합된 것처럼 보이도록 합니다. 마운트 지점의 기본값은 “/home/$USER.homedir”입니다. ($USER는 사용자의 계정 이름으로 대체됩니다.)

어떤 장점이 있을까?

홈 디렉토리는 모든 데이터를 안전하게 캡슐화하기 때문에 이동식 장치에 저장하여 사용할 수 있습니다. 예를 들어 USB 드라이브를 사용하여 직장과 집 컴퓨터 또는 다른 시스템에서 같은 홈 디렉토리를 사용할 수 있습니다.

이것이 Poettering이 말하는 “완전히 이식 가능한 홈 디렉토리”의 의미입니다. 휴대용 장치에서 홈 디렉토리를 옮길 필요가 없더라도 업그레이드와 마이그레이션이 더 쉬워지고 보안이 강화될 것이라고 그는 말했습니다.

또한 Poettering은 “사이드카 데이터베이스”라고 불리는 불필요한 데이터를 제거하고자 합니다. “/etc/passwd” 및 “/etc/shadow” 파일에는 인증 정보와 해시된 암호가 들어 있지만, 기본 셸과 같은 정보도 포함되어 있습니다. 심지어 GECOS 필드까지도 들어 있습니다.

Poettering은 이러한 메타데이터를 합리화하고 각 사용자 홈 디렉토리의 JSON 레코드 내에 의미 있는 그룹으로 저장해야 한다고 생각합니다.

새로운 $HOME 관리

systemd-homed 서비스는 새로운 `homectl` 명령줄 도구를 통해 제어됩니다.

사용자와 홈 디렉토리를 생성하고, 각 사용자에 대한 저장 제한을 설정하는 옵션을 제공합니다. 또한 비밀번호를 설정하거나, 다른 사용자의 계정을 잠그거나, 계정을 완전히 삭제할 수도 있습니다. 사용자를 조사하고 JSON 사용자 레코드를 읽을 수 있습니다.

시간대와 같은 위치 기반 정보도 각 사용자에 대해 설정할 수 있습니다. 기본 셸을 지정하고, 사용자가 로그인할 때마다 특정 상태가 되도록 환경 변수를 설정할 수도 있습니다.

“/home” 디렉토리를 살펴보면 사용자 이름에 “.homedir”가 추가된 systemd-homed 관리 항목이 다음과 같이 표시됩니다.

/home/dave.homedir

이것은 마운트 지점일 뿐입니다. 실제 암호화된 홈 디렉토리는 다른 곳에 있습니다.

제약 조건 및 문제점

systemd-homed는 사용자 계정에서만 사용할 수 있습니다. UID가 1,000 미만인 사용자 계정은 처리할 수 없습니다. 즉, root, daemon, bin 등은 새로운 방식으로 관리할 수 없습니다. 이러한 시스템 계정을 관리하는 표준 방법은 계속 필요합니다. 따라서 systemd-homed는 완전한 해결책은 아닙니다.

해결해야 할 딜레마도 있습니다. 앞서 언급했듯이 사용자의 홈 디렉토리는 로그인할 때마다 암호가 해제됩니다. 그러나 누군가 SSH를 통해 원격으로 컴퓨터에 액세스하는 경우, 홈 디렉토리의 SSH 키는 해당 사용자가 로그인해야만 사용할 수 있습니다. SSH 키는 로그인하기 전에 인증을 위해 필요한데 말입니다.

systemd-homed 개발팀이 이 문제를 인지하고 있지만 아직 명확한 해결책은 없는 것 같습니다. 곧 해결책을 찾을 수 있기를 바랍니다. 그렇지 않으면 큰 문제가 될 것입니다.

누군가가 자신의 홈 디렉토리를 새 시스템으로 전송한다고 가정해 봅시다. 다른 사람이 새 컴퓨터에서 해당 UID를 이미 사용 중인 경우, 새 UID가 자동으로 할당됩니다. 그러면 모든 파일의 소유권을 새 UID로 다시 할당해야 합니다.

현재는 `chown -R` 명령을 사용하여 자동으로 처리됩니다. 앞으로 더 나은 해결책이 개발될 것으로 예상됩니다. 이 방식은 다른 사용자로 실행되는 데몬 및 프로세스를 고려하지 않습니다.

언제쯤 사용 가능할까?

이미 사용 가능한 부분이 있습니다. 코드 변경 사항은 2020년 1월 20일에 제출되었으며, Ubuntu 20.04와 함께 2020년 4월에 출시된 systemd 빌드 245에 포함되었습니다.

사용 중인 버전을 확인하려면 다음 명령을 입력하면 됩니다.

systemd --version

그러나 `homectl` 명령은 아직 존재하지 않습니다. Ubuntu 20.04는 기존의 `/home` 디렉토리를 사용하고 systemd-homed를 사용하지 않습니다.

systemd-homed 및 `homectl`을 도입할 시기는 각 배포판이 결정할 문제입니다.

따라서 너무 걱정할 필요는 없습니다. 사용자와 홈 디렉토리를 관리하는 표준 방법은 여전히 사용할 수 있으며, 선택의 여지는 우리에게 남아 있습니다.