Làm cách nào để định cấu hình systemd để kích hoạt tệp hoán đổi được mã hóa?


7

Câu hỏi trước đây của tôi đã tạo ra các lệnh để thêm tệp hoán đổi được mã hóa:

# One-time setup:
fallocate -l 4G /root/swapfile.crypt
chmod 600 /root/swapfile.crypt

# On every boot:
loop=$(losetup -f)
losetup ${loop} /root/swapfile.crypt
cryptsetup open --type plain --key-file /dev/urandom ${loop} swapfile
mkswap /dev/mapper/swapfile
swapon /dev/mapper/swapfile

Nhưng Arch Linux sử dụng systemd và tôi gặp khó khăn khi tìm ra cách tốt nhất để systemd tự động kích hoạt tệp hoán đổi của mình. systemd.swap gợi ý rằng tôi nên có một dev-mapper-swapfile.swapđơn vị trông giống như:

[Unit]
Description=Encrypted Swap File

[Swap]
What=/dev/mapper/swapfile

Điều đó sẽ thực thi swaponlệnh. Nhưng tôi không chắc cách thực hiện các lệnh để chuẩn bị /dev/mapper/swapfile. Tôi tập hợp dev-mapper-swapfile.swapnên khai báo một phụ thuộc vào một số đơn vị khác, nhưng tôi không chắc đơn vị đó sẽ trông như thế nào.

Câu trả lời:


5

Bạn có thể muốn có một cái nhìn tại:

  • tiền điện tử (5)
  • systemd-cryptsetup @ .service (8)
  • systemd-cryptsetup-tạo (8)

Những người làm việc cho khối lượng mã hóa được hỗ trợ bởi các thiết bị khối. Họ cũng nên làm việc cho khối lượng tập tin được hỗ trợ.

Cập nhật:

Điều này không làm việc cho tôi:

# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:systemd-cryptsetup@.service(8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=umount.target
Before=cryptsetup.target
After=systemd-random-seed-load.service

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'swap2' '/swap.test'     '/dev/urandom' 'swap'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'swap2'
ExecStartPost=/sbin/mkswap '/dev/mapper/swap2'

Các bước để có được tệp này:

  • Tạo một mục trong / etc / crypttab: swap2 /swap.test /dev/urandom swap
  • Chạy lệnh này: /usr/lib/systemd/system-generators/systemd-cryptsetup-generator Điều này tạo ra các tập tin đơn vị trong /tmp/thư mục.
  • Tìm kiếm tệp đơn vị được tạo.
  • Mở nó và loại bỏ các mục swap.test.devicetừ After=BindsTo=chỉ thị. Điều này rất quan trọng, vì theo định nghĩa, không có thiết bị nào cho hoán đổi. Điều này ngăn chặn sự bắt đầu của unitfile.
  • Sao chép tập tin vào /etc/systemd/system/
  • Kích hoạt nó cho mục tiêu yêu thích của bạn.

Bạn có thể đúng, nhưng tôi không hiểu làm thế nào để áp dụng chúng cho một tập tin được hỗ trợ. Đặc biệt, /dev/loopNđược sản xuất bởi losetup -fkhông nhất thiết phải phù hợp giữa các đôi giày.
cjm

cryptsetup nên phân bổ thiết bị loopback. cryptsetup open /swap.test swap. Tôi không thể làm cho nó hoạt động khi khởi động (chỉ sử dụng / etc / crypttab). Một đơn vị tự làm mọi thứ với ExecStartchỉ thị sẽ hoạt động. Có lẽ điều này nên báo cáo cho dev hệ thống.
t-8ch

Tôi nghĩ vấn đề có thể là nó đã không thực thi mkswap. Bởi vì tôi đang sử dụng một khóa ngẫu nhiên, tệp hoán đổi phải được khởi tạo lại mỗi lần khởi động. Nhưng tôi không chắc làm thế nào để thiết lập nó.
cjm

3

Đây là kết quả cuối cùng tôi đưa ra dựa trên câu trả lời của t-8ch .

Đặt cái này vào /etc/systemd/system/systemd-cryptsetup@swapfile.service:

# Automatically generated by systemd-cryptsetup-generator
# then manually tweaked

[Unit]
Description=Cryptography Setup for %I
Documentation=man:systemd-cryptsetup@.service(8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=umount.target
Before=cryptsetup.target
After=systemd-random-seed-load.service

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'swapfile' '/root/swapfile.crypt' '/dev/urandom' 'swap,cipher=aes-cbc-essiv:sha256,size=256'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'swapfile'
ExecStartPost=/sbin/mkswap '/dev/mapper/swapfile'

Đặt cái này vào /etc/systemd/system/dev-mapper-swapfile.swap:

[Unit]
Description=Encrypted Swap File
Requires=systemd-cryptsetup@swapfile.service
After=systemd-cryptsetup@swapfile.service
Before=swap.target

[Swap]
What=/dev/mapper/swapfile

[Install]
WantedBy=swap.target

Thiết lập một lần (với quyền root) để tạo tệp hoán đổi, kích hoạt nó để khởi động trong tương lai và bắt đầu sử dụng ngay lập tức:

fallocate -l 4G /root/swapfile.crypt
chmod 600 /root/swapfile.crypt
systemctl enable dev-mapper-swapfile.swap
systemctl start dev-mapper-swapfile.swap

Kích thước trong fallocatelệnh xác định mức độ hoán đổi của bạn sẽ lớn như thế nào.

Các /etc/crypttabentry là không cần thiết; nó chỉ là một cách để tạo ra systemd-cryptsetup@swapfile.service. Khi đã xong, bạn không cần nó nữa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.