웹사이트 검색

Ubuntu 15.10에서 EncFS로 데이터 암호화


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 우분투 12.10(Quantal Quetzal)

이 페이지에서

  1. 1 서문
    1. Encfs 보안 정보

    EncFS는 사용자 공간에서 암호화된 파일 시스템을 제공합니다. 특별한 권한 없이 실행되며 FUSE 라이브러리와 Linux 커널 모듈을 사용하여 파일 시스템 인터페이스를 제공합니다. 암호화된 블록 장치가 아닌 통과 파일 시스템이므로 기존 파일 시스템 위에 생성됩니다. 이 튜토리얼은 Ubuntu 15.10(Wiley Werewolf)에서 EncFS를 사용하여 데이터를 암호화하는 방법을 보여줍니다.

    1 서문

    이 튜토리얼에서는 Ubuntu 15.10 시스템에서 사용자 이름 falko를 사용하고 있습니다. 보안 감사에서 현재 encfs 구현에서 몇 가지 문제가 발견되었습니다. encfs를 사용하려는 방식이 이러한 문제의 영향을 받는지 확인하려면 아래의 보안 경고를 참조하세요. encfs의 대안은 다른 자습서에서 다룰 ecryptfs(https://launchpad.net/ecryptfs)입니다.

    Encfs 보안 정보

    "Taylor Hornby(Defuse Security)의 보안 감사에 따르면 현재 Encfs 구현은 여러 유형의 공격에 취약하거나 잠재적으로 취약합니다. 예를 들어, 암호화된 데이터에 대한 읽기/쓰기 액세스 권한이 있는 공격자는 적법한 사용자가 이를 인지하지 못한 채 이후에 암호화된 데이터에 대한 암호 해독 복잡성 또는 타이밍 분석을 사용하여 정보를 추론할 수 있습니다. 이러한 문제가 해결될 때까지 encfs는 시나리오에서 민감한 데이터의 안전한 집으로 간주되어서는 안 됩니다. 그러한 공격이 가능한 곳."

    2 EncFS 설치

    EncFS는 다음과 같이 설치할 수 있습니다(루트 권한이 필요하므로 sudo를 사용합니다).

    sudo apt-get install encfs

    이제 EncFS 매뉴얼 페이지를 살펴보고 해당 옵션에 익숙해져야 합니다.

    man encfs

    3 EncFS 사용

    이제 내 홈 디렉토리에서 암호화 및 해독된 디렉토리를 생성합니다.

    mkdir -p ~/encrypted
    mkdir -p ~/decrypted

    해독된 디렉터리는 암호화된 디렉터리의 마운트 지점 역할을 합니다. ~/encrypted를 ~/decrypted로 마운트하려면 다음을 실행하십시오.

    encfs ~/encrypted ~/decrypted

    이 명령을 처음으로 실행하면 EncFS 설정이 시작되고 암호화된 볼륨에 대한 암호를 정의해야 합니다.

    :~$ encfs ~/encrypted ~/decrypted
    Creating new encrypted volume.
    Please choose from one of the following options:
    enter "x" for expert configuration mode,
    enter "p" for pre-configured paranoia mode,
    anything else, or an empty line will select standard mode.
    ?> <-- p
    Paranoia configuration selected.
    Configuration finished. The filesystem to be created has
    the following properties:
    Filesystem cipher: "ssl/aes", version 3:0:2
    Filename encoding: "nameio/block", version 4:0:2
    Key Size: 256 bits
    Block Size: 1024 bytes, including 8 byte MAC header
    Each file contains 8 byte header with unique IV data.
    Filenames encoded using IV chaining mode.
    File data IV is chained to filename IV.
    File holes passed through to ciphertext.
    -------------------------- WARNING --------------------------
    The external initialization-vector chaining option has been
    enabled. This option disables the use of hard links on the
    filesystem. Without hard links, some programs may not work.
    The programs 'mutt' and 'procmail' are known to fail. For
    more information, please see the encfs mailing list.
    If you would like to choose another configuration setting,
    please press CTRL-C now to abort and start over.
    Now you will need to enter a password for your filesystem.
    You will need to remember this password, as there is absolutely
    no recovery mechanism. However, the password can be changed
    later using encfsctl.
    New Encfs Password: <-- Enter a secure password here
    Verify Encfs Password: <-- Enter the secure password a second time

    암호를 잊어버리면 암호화된 데이터를 복구할 수 있는 방법이 없으므로 암호를 기억해두십시오!

    이제 다음의 출력에서 EncFS 볼륨을 찾아야 합니다.

    mount
    :~$ mount
    sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
    proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
    udev on /dev type devtmpfs (rw,nosuid,relatime,size=1006420k,nr_inodes=251605,mode=755)
    devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
    tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204480k,mode=755)
    /dev/mapper/server1--vg-root on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
    securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
    tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
    cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
    pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
    cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
    cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
    cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset,clone_children)
    cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
    cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
    cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
    cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
    cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
    cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
    systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=21,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
    mqueue on /dev/mqueue type mqueue (rw,relatime)
    debugfs on /sys/kernel/debug type debugfs (rw,relatime)
    hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
    fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
    /dev/sda1 on /boot type ext2 (rw,relatime)
    tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=204480k,mode=700,uid=1000,gid=1000)
    encfs on /home/falko/decrypted type fuse.encfs (rw,nosuid,nodev,relatime,user_id=1001,group_id=1001)

    그리고

    df -h
    :~$ df -h
    Filesystem Size Used Avail Use% Mounted on
    udev 983M 0 983M 0% /dev
    tmpfs 200M 4.9M 195M 3% /run
    /dev/dm-0 28G 1.7G 25G 7% /
    tmpfs 999M 0 999M 0% /dev/shm
    tmpfs 5.0M 0 5.0M 0% /run/lock
    tmpfs 999M 0 999M 0% /sys/fs/cgroup
    /dev/sda1 236M 51M 173M 23% /boot
    tmpfs 200M 0 200M 0% /run/user/1000
    encfs 28G 1.7G 25G 7% /home/falko/decrypted

    데이터를 암호화된 형식으로 저장하려면 일반 디렉터리에서 하는 것처럼 데이터를 해독된 디렉터리에 넣습니다.

    cd ~/decrypted
    echo "hello foo" > foo
    echo "hello bar" > bar
    ln -s foo foo2

    디렉토리의 내용을 확인하면 암호화되지 않은 형태로 볼 수 있음을 알 수 있습니다...

    ls -l
    :~/decrypted$ ls -l
    total 8
    -rw-rw-r-- 1 falko falko 10 Nov 10 14:57 bar
    -rw-rw-r-- 1 falko falko 10 Nov 10 14:57 foo
    lrwxrwxrwx 1 falko falko 3 Nov 10 14:57 foo2 -> foo

    ... 암호화된 디렉터리에 있는 동안 다음과 같이 암호화됩니다.

    cd ~/encrypted
    ls -l
    :~/encrypted$ ls -l
    total 8
    lrwxrwxrwx 1 falko falko 24 Nov 10 14:57 gIKlbEtIpTfiGOCy,wKFpMFd -> nZgFI3s62v5LtaHOu-V4lUSy
    -rw-rw-r-- 1 falko falko 26 Nov 10 14:57 mEqwt,ssEJhGYpN8HfJMoVxk
    -rw-rw-r-- 1 falko falko 26 Nov 10 14:57 nZgFI3s62v5LtaHOu-V4lUSy

    암호화된 볼륨을 마운트 해제하려면 다음을 실행하십시오.

    cd
    fusermount -u ~/decrypted

    의 출력을 확인하십시오...

    mount

    ... 그리고...

    df -h

    ... 그러면 EncFS 볼륨이 더 이상 나열되지 않는 것을 볼 수 있습니다.

    다시 마운트하려면 다음을 실행하십시오.

    encfs ~/encrypted ~/decrypted

    이전에 정의한 비밀번호를 묻는 메시지가 표시됩니다.

    [이메일 보호됨]:~$encfs ~/encrypted ~/decrypted
    EncFS 비밀번호: <-- yoursecretpassword

    올바른 암호를 지정하면 ~/encrypted 디렉토리가 ~/decrypted에 마운트되어 암호화되지 않은 형식으로 암호화된 데이터에 액세스할 수 있습니다. 암호를 잊어버리면 암호화된 데이터가 손실됩니다!

    비밀번호를 변경하고 싶다면 다음을 사용하여 변경할 수 있습니다.

    encfsctl passwd ~/encrypted

    명령.

    [email :~$encfsctl passwd ~/encrypted
    현재 Encfs 비밀번호 입력
    EncFS 비밀번호: <-- yoursecretpassword
    새 Encfs 비밀번호 입력
    새 Encfs 비밀번호: <-- newsecretpassword
    Encfs 비밀번호 확인: <-- newsecretpassword
    볼륨 키가 성공적으로 업데이트되었습니다.

    4 링크

    • EncFS: http://www.arg0.net/encfs
    • 우분투: http://www.ubuntu.com/