웹사이트 검색

Ubuntu 15.10에서 vsftp + TLS 암호화 및 MySQL을 사용한 가상 호스팅


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

  • 우분투 15.10(Wily Werewolf)
  • 우분투 12.10(Quantal Quetzal)

이 페이지에서

  1. 1 서문
  2. 2 vsftpd, MySQLphpMyAdmin 설치
  3. 3 vsftpd용 MySQL 데이터베이스 생성
  4. 4 vsftpd 구성
  5. 5 TLS용 SSL 인증서 만들기
  6. 6 vsftpd에서 TLS 활성화\n
  7. 7 첫 번째 가상 사용자 생성
  8. 8 데이터베이스 관리
  9. 9 가상 머신 이미지
    1. SSH 로그인
    2. MySQL 로그인

    Vsftpd는 가장 안전하고 빠른 Linux용 FTP 서버 중 하나입니다. 일반적으로 vsftpd는 시스템 사용자와 함께 작동하도록 구성됩니다. 이 문서는 실제 시스템 사용자 대신 MySQL 데이터베이스의 가상 사용자를 사용하는 vsftp 서버를 설치하는 방법을 설명합니다. 이것은 훨씬 더 성능이 좋으며 단일 시스템에서 수천 명의 ftp 사용자를 가질 수 있습니다.

    MySQL 데이터베이스 관리를 위해 이 하우투에서도 설치될 phpMyAdmin과 같은 웹 기반 도구를 사용할 수 있습니다. phpMyAdmin은 편안한 그래픽 인터페이스로, 명령줄을 복잡하게 다룰 필요가 없습니다.

    이 튜토리얼은 Ubuntu 15.10을 기반으로 합니다. 당신은 이미

    이 하우투는 실용적인 가이드를 의미합니다. 그것은 이론적 배경을 다루지 않습니다. 그들은 웹의 다른 많은 문서에서 처리됩니다.

    이 문서는 어떤 종류의 보증 없이 제공됩니다! 나는 이것이 그러한 시스템을 설정하는 유일한 방법이 아니라고 말하고 싶습니다. 이 목표를 달성하는 방법에는 여러 가지가 있지만 이것이 제가 취하는 방법입니다. 나는 이것이 당신에게 효과가 있을 것이라는 어떠한 보증도 하지 않습니다!

    1 서문

    이 자습서에서는 호스트 이름 server1.example.com을 IP 주소 192.168.1.100과 함께 사용합니다. 이러한 설정은 사용자에 따라 다를 수 있으므로 적절하게 교체해야 합니다.

    루트 권한으로 이 튜토리얼의 모든 단계를 실행해야 하므로 이 튜토리얼의 모든 명령 앞에 sudo 문자열을 추가하거나 다음을 입력하여 지금 바로 루트가 될 수 있습니다.

    sudo su

    2 vsftpd, MySQLphpMyAdmin 설치

    Vsftpd에는 기본 제공 MySQL 지원이 없으므로 PAM을 사용하여 MySQL 데이터베이스에 대해 인증해야 합니다. 따라서 vsftpd, MySQLphpMyAdmin 외에도 libpam-mysql을 설치합니다.

    apt-get -y install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin libpam-ldap

    다음과 같은 질문을 받게 됩니다.

    New password for the MySQL "root" user: <-- yourrootsqlpassword
    Repeat password for the MySQL "root" user: <-- yourrootsqlpassword
    LDAP server Uniform Resource Identifier: <--  ENTER
    Distinguished name of the search base: <-- ENTER
    LDAP version to use: <-- 3
    Make local root Database admin: <-- Yes
    Does the LDAP database require login?  <-- No
    LDAP account for root: <-- ENTER
    LDAP root account password: <-- ldaprootpw
    Web server to configure automatically: <-- Select the option: apache2
    Configure database for phpmyadmin with dbconfig-common? <-- Yes
    Password of the database's administrative user: <-- Enter the MariaDB root password
    MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

    3 vsftpd용 MySQL 데이터베이스 생성

    이제 vsftpd라는 데이터베이스와 vsftpd 데몬이 나중에 vsftpd 데이터베이스에 연결하는 데 사용할 vsftpd라는 MySQL 사용자를 만듭니다.

    mysql --defaults-file=/etc/mysql/debian.cnf
    CREATE DATABASE vsftpd;
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
    FLUSH PRIVILEGES;

    문자열 ftpdpass를 MySQL 사용자 vsftpd에 사용하려는 암호로 바꿉니다. 여전히 MySQL 셸에서 필요한 데이터베이스 테이블을 만듭니다(예, 테이블이 하나만 있습니다!).

    USE vsftpd;
    CREATE TABLE `accounts` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `username` VARCHAR( 30 ) NOT NULL ,
    `pass` VARCHAR( 50 ) NOT NULL ,
    UNIQUE (
    `username`
    )
    );
    quit;

    알다시피, 종료와 함께; 명령 우리는 MySQL 셸을 떠났고 Linux 셸로 돌아왔습니다.

    BTW, (FTP 서버 시스템의 호스트 이름이 server1.example.com이라고 가정) http://server1.example.com/phpmyadmin/에서 phpMyAdmin에 액세스할 수 있습니다(server1.example 대신 IP 주소를 사용할 수도 있음). .com)을 열고 vsftpd 사용자로 로그인합니다. 그런 다음 데이터베이스를 볼 수 있습니다. 나중에 phpMyAdmin을 사용하여 vsftpd 서버를 관리할 수 있습니다.

    4 vsftpd 구성

    먼저 nogroup 그룹에 속하는 vsftpd(homedir /home/vsftpd 포함)라는 권한이 없는 사용자를 만듭니다. 이 사용자로 vsftpd를 실행하고 가상 사용자의 FTP 디렉토리는 /home/vsftpd 디렉토리(예: /home/vsftpd/user1, /home/vsftpd/user2 등)에 있습니다.

    useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

    그런 다음 원본 /etc/vsftpd.conf 파일을 백업하고 직접 생성합니다.

    cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
    cat /dev/null > /etc/vsftpd.conf
    nano /etc/vsftpd.conf

    파일에는 다음 내용이 있어야 합니다.

    listen=YES
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    nopriv_user=vsftpd
    chroot_local_user=YES
    secure_chroot_dir=/var/run/vsftpd
    pam_service_name=vsftpd
    rsa_cert_file=/etc/ssl/certs/vsftpd.pem
    guest_enable=YES
    guest_username=vsftpd
    local_root=/home/vsftpd/$USER
    user_sub_token=$USER
    virtual_use_local_privs=YES
    user_config_dir=/etc/vsftpd_user_conf

    구성 옵션은 http://vsftpd.beasts.org/vsftpd_conf.html에 설명되어 있습니다. 가상 설정의 중요한 옵션은 chroot_local_user, guest_enable, guest_username, user_sub_token, local_root 및 virtual_use_local_privs입니다.

    user_config_dir 옵션을 사용하면 전역 설정의 일부를 재정의하는 사용자별 구성 파일의 디렉터리를 지정할 수 있습니다. 이것은 완전히 선택 사항이며 이 기능을 사용하려는 경우 귀하에게 달려 있습니다. 그러나 지금 해당 디렉터리를 만들어야 합니다.

    mkdir /etc/vsftpd_user_conf

    이제 /etc/passwd 및 /etc/shadow 대신 MySQL 데이터베이스를 사용하여 가상 FTP 사용자를 인증하도록 PAM을 구성해야 합니다. vsftpd에 대한 PAM 구성은 /etc/pam.d/vsftpd에 있습니다. 원본 파일을 백업하고 다음과 같이 새 파일을 만듭니다.

    cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
    cat /dev/null > /etc/pam.d/vsftpd
    nano /etc/pam.d/vsftpd
    auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
    account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

    그런 다음 vsftpd를 다시 시작합니다.

    service vsftpd restart

    5 TLS용 SSL 인증서 생성

    TLS를 사용하기 위해서는 SSL 인증서를 생성해야 합니다. /etc/ssl/private에 생성합니다. 디렉토리가 존재하지 않으면 지금 생성합니다::

    mkdir -p /etc/ssl/private
    chmod 700 /etc/ssl/private

    그런 다음 다음과 같이 SSL 인증서를 생성할 수 있습니다.

    openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

    국가 이름(2자리 코드) [AU]: <-- 국가 이름(예: "DE")을 입력하세요.
    주 또는 도 이름(전체 이름) [Some-State]:<-- 국가 이름을 입력하세요. 시/도 이름.
    지역 이름(예: 도시) []:<-- 도시를 입력하세요.
    조직 이름(예: 회사) [Internet Widgits Pty Ltd]:<-- 조직 이름을 입력하세요( 예: 회사 이름).
    조직 단위 이름(예: 섹션) []:<-- 조직 단위 이름(예: "IT 부서")을 입력합니다.
    일반 이름(예: 귀하 name) []:<-- 시스템의 정규화된 도메인 이름을 입력합니다(예: "server1.example.com").
    이메일 주소 []:<-- 이메일 주소를 입력합니다.

    6 vsftpd에서 TLS 활성화

    vsftpd에서 TLS를 활성화하려면 /etc/vsftpd.conf...를 엽니다.

    nano /etc/vsftpd.conf

    ... 그리고 다음 옵션을 추가합니다.

    # Turn on SSL
    ssl_enable=YES
    
    # Allow anonymous users to use secured SSL connections
    allow_anon_ssl=YES
    
    # All non-anonymous logins are forced to use a secure SSL connection in order to
    # send and receive data on data connections.
    force_local_data_ssl=YES
    
    # All non-anonymous logins are forced to use a secure SSL connection in order to send the password.
    force_local_logins_ssl=YES
    
    # Permit TLS v1 protocol connections. TLS v1 connections are preferred
    ssl_tlsv1=YES
    
    # Permit SSL v2 protocol connections. TLS v1 connections are preferred
    ssl_sslv2=NO
    
    # permit SSL v3 protocol connections. TLS v1 connections are preferred
    ssl_sslv3=NO
    
    # Disable SSL session reuse (required by WinSCP)
    require_ssl_reuse=NO
    
    # Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla)
    ssl_ciphers=HIGH
    
    # This option specifies the location of the RSA certificate to use for SSL
    # encrypted connections.
    rsa_cert_file=/etc/ssl/private/vsftpd.pem
    [...]

    force_local_logins_ssl=YES 및 force_local_data_ssl=YES를 사용하는 경우 TLS 연결만 허용됩니다(TLS 지원이 없는 이전 FTP 클라이언트를 사용하는 모든 사용자가 잠김). force_local_logins_ssl=NO 및 force_local_data_ssl=NO를 사용하면 FTP 클라이언트가 지원하는 항목에 따라 TLS 및 비 TLS 연결이 모두 허용됩니다.

    나중에 vsftpd를 다시 시작합니다.

    service vsftpd restart

    그게 다야. 이제 FTP 클라이언트를 사용하여 연결을 시도할 수 있습니다. 그러나 TLS를 사용하도록 FTP 클라이언트를 구성해야 합니다.

    7 첫 번째 가상 사용자 생성

    데이터베이스를 채우려면 MySQL 셸을 사용할 수 있습니다.

    mysql --defaults-file=/etc/mysql/debian.cnf
    USE vsftpd;

    이제 비밀 번호(MySQL의 PASSWORD 기능을 사용하여 암호화되어 저장됨)로 가상 사용자 testuser를 생성합니다.

    INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
    quit;

    testusers homedir은 /home/vsftpd/testuser입니다. 불행히도 vsftpd는 해당 디렉토리가 존재하지 않는 경우 자동으로 생성하지 않습니다. 따라서 지금 수동으로 생성하고 vsftpd 사용자와 nogroup 그룹이 소유하도록 합니다.

    mkdir /home/vsftpd/testuser
    chown vsftpd:nogroup /home/vsftpd/testuser
    chmod a-w /home/vsftpd/testuser

    이제 워크 스테이션에서 FTP 클라이언트 프로그램(FileZilla 또는 FireFTP와 같은 것)을 열고 연결을 시도하십시오. 호스트 이름으로 server1.example.com(또는 시스템의 IP 주소)을 사용하고 사용자 이름은 testuser이고 비밀번호는 secret입니다.

    8 데이터베이스 관리

    대부분의 사람들에게는 MySQL에 대한 그래픽 프런트 엔드가 있으면 더 쉽습니다. 따라서 phpMyAdmin(이 예에서는 http://server1.example.com/phpmyadmin/ 아래)을 사용하여 vsftpd 데이터베이스를 관리할 수도 있습니다.

    사용자를 생성하거나 수정할 때마다 MySQL의 PASSWORD 기능을 사용하여 해당 사용자 암호를 암호화해야 합니다. 또한, 새로운 가상 사용자를 생성할 때 이전 장의 마지막에 표시된 것처럼 쉘에 해당 사용자 homedir을 생성하는 것을 잊지 마십시오.

    9 가상 머신 이미지

    이 튜토리얼은 Howtoforge 구독자를 위해 OVA/OVF 형식의 가상 머신을 사용할 준비가 된 상태로 제공됩니다. VM 형식은 VMWare 및 Virtualbox 및 이 형식을 가져올 수 있는 기타 도구와 호환됩니다. 상단 오른쪽 메뉴에서 다운로드 링크를 찾을 수 있습니다. 파일 이름을 클릭하면 다운로드가 시작됩니다.

    VM의 로그인 세부 정보는 다음과 같습니다.

    SSH 로그인

    사용자 이름: administrator
    비밀번호: howtoforge

    관리자 사용자에게는 sudo 권한이 있습니다.

    MySQL 로그인

    사용자 이름: root
    비밀번호: howtoforge

    최초 부팅 후 암호를 변경하십시오.

    VM은 정적 IP 192.168.1.100에 대해 구성되며 IP는 /etc/network/interfaces 파일에서 변경할 수 있습니다.

    10 링크

    • vsftpd: http://vsftpd.beasts.org/
    • 우분투: http://www.ubuntu.com/