blog.stackframe.dev

systemd-homed로 USB에 이동식 리눅스 계정 만들기

노트북이나 컴퓨터를 여러 대 가지고 있다면 계정 하나만 만들어두고 로그인만 하면 어디서든지 내 파일들을 보고 작업할 수 있었으면 하는 생각이 든다. 이럴 때 systemd-homed를 사용하면 USB에 계정의 홈 디렉토리를 만들어 두고 다른 컴퓨터에 연결만 하면 어디서든지 동일한 설정과 데이터들을 사용할 수 있다. 거기다 LUKS2로 암호화하기 때문에 USB를 잃어버리더라도 데이터가 누출될 가능성이 낮다.

이 기능을 사용하기 위해서 systemd-homed가 실행되어야 한다. 다른 모든 장치에서도 이게 활성화가 되어 있어야 사용가능하다:

# systemctl start systemd-homed
# systemctl enable systemd-homed

그 다음 계정을 만들어야 하는데 여기서는 homectl이란 명령을 사용한다:

# homectl -G wheel --fido2-device=auto --image-path=/dev/sda --storage=luks create stackframe

나는 stackframe이란 계정을 만드는데 -G 옵션으로 계정이 wheel 그룹에 추가로 속하고 --fido2-device=auto로 FIDO2 인증을 사용하도록 설정했다. 이것들은 그냥 내가 추가적으로 넣은 옵션이므로 넣지 않아도 상관없다. 다만 --image-path는 어떤 장치에 설치할 것인지 설정하므로 무조건 넣어야 한다. 여기서 알아야 할 점은 현재 systemd-homed는 USB 전체를 사용하도록 하지 않으면 계정 생성이 불가능하다. 그러므로 /dev/sda1 같이 파티션을 넣으면 에러가 발생하고 /dev/sda처럼 장치 자체를 넣어야한다. 그리고 --storage=luks는 USB에 설치하기 위해 필수로 적어야한다.

실행하면 아래와 같이 진행된다:

# homectl -G wheel --fido2-device=auto --image-path=/dev/sda --storage=luks create stackframe
Requested to lock with PIN, but FIDO2 device /dev/hidraw5 does not support it, disabling.
Initializing FIDO2 credential on security token.
👆 (Hint: This might require confirmation of user presence on security token.)
Generating secret key on FIDO2 security token.
👆 In order to allow secret key generation, please confirm presence on security token.
🔐 Please enter new password for user stackframe: ********
🔐 Please enter new password for user stackframe (repeat): ********
👆 Please confirm presence on security token.
#

이제 계정이 USB에 설치되었고 생성한 계정으로 로그인하면 된다.

이 계정을 다른 장치에서도 사용하기 위해서는 한가지 작업을 더 해줘야 한다. 계정을 만든 장치의 /var/lib/systemd/home/local.public 파일을 다른 장치의 동일한 디렉토리에 local 부분만 다른 이름으로 바꿔서 저장하면 된다. 주의해야 할 점은 이 파일의 권한은 무조건 root:root 0600으로 설정해야 한다. 그렇지 않다면 systemd-homed에서 이 파일을 로드하기를 거부한다.

여기까지 따라했다면 이제 다른 장치에 USB를 연결한 후 로그인이 가능해진다. 참고로 계정 자체의 설정(비밀번호 같은 정보)은 생성한 기기에서만 수정이 가능하다. 계정 정보가 local.private으로 서명이 되어 있고 이 서명과 local.public으로 무결성과 생성된 기기를 증명하기 때문에 그렇다.

댓글