예전 qmail 을 설정할 때 가상계정으로 mysql 을 사용하였다.
vpopmail 에서 계정확인을 mysql 을 이용하는 방법이었다.

proftpd 도 비슷하게 가상계정으로 사용자 인증을 할 수 있다.
가상계정의 이점은 콘솔상에서 유저를 생성하지 않고, 웹에서 처리할 수 있다.
웹프로그램으로 DB 에 계정정보를 넣으면 된다.

어디를 설정해 줘야 하나?

/etc/proftpd/proftpd.conf 를 수정(추가)한다.

Include /etc/proftpd/sql.conf

그리고 sql.conf 를 생성한다.(이미있는 경우 수정)

<IfModule mod_sql.c>
SQLBackend      mysql

SQLAuthenticate users* groups*

SQLAuthTypes Crypt Plaintext

SQLConnectInfo {디비명}@localhost {유저명} {암호}

SQLUserInfo ftpusers userid passwd uid gid homedir shell
SQLGroupInfo ftpgroups groupname gid members

</IfModule>

그리고, 위의 디비명, 유저명, 암호에 맞게 가상계정정보를 넣을 디비를 설정한다.(자세한 사항 생략)

계정정보를 넣는 테이블 구조는 어떻게 되나?

마지막으로 계정정보를 넣을 테이블을 만들어준다.

CREATE TABLE ftpgroups (
        groupname varchar(16) NOT NULL default '',
        gid smallint(6) NOT NULL default '2001',
        members varchar(16) NOT NULL default '',
        KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';

CREATE TABLE ftpusers (
        id int(10) unsigned NOT NULL auto_increment,
        userid varchar(32) NOT NULL default '',
        passwd varchar(32) NOT NULL default '',
        uid smallint(6) NOT NULL default '2001',
        gid smallint(6) NOT NULL default '2001',
        homedir varchar(255) NOT NULL default '',
        shell varchar(16) NOT NULL default '/bin/false',
        count int(11) NOT NULL default '0',
        accessed datetime NOT NULL default '0000-00-00 00:00:00',
        modified datetime NOT NULL default '0000-00-00 00:00:00',
        PRIMARY KEY (id),
        UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';

가상계정용 공통 유저/그룹을 생성한다.

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

uid/gid 는 적절하게 바꿔서 넣어줘도 된다.
shell 의 경우  /bin/false 로 했는데, Centos 의 경우는 디폴트인 /sbin/nologin 으로 해주면 된다.

테스트로 계정을 만들고 접속을 시도해 본다.

INSERT INTO `ftpgroups` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');

INSERT INTO `ftpusers` (`id`, `userid`, `passwd`, `homedir`, `count`, `accessed`, `modified`) VALUES (1, 'testuser', 'testpass', '/var/FTPuser/testuser', 0, '', '');

파일질라 등으로 테스트 해본다.
접속해서 파일을 업로드 해보면, 설정한 uid/gid 로 파일이 생성된다.
웹상의 파일로 연동을 시키기 위해 아파치계정인  apache 나 www-data 등으로 uid/gid 를 설정해 주어도 될 것이다.

[추가]
기본 ftpuser / ftpgroup 은 고정인 것 같다. 아파치계정과 연동을 시킬려고 시도 해봤는데, 안되네.
proftpd 쪽에서 바꾸지 않고, 아파치쪽에서 바꿔야 겠다.(퍼미션 조정으로..)

[추가2] ubuntu 에서 sql / mysql mod 적용

apt-get install proftpd-mod-mysql

/etc/proftpd/modules.conf 에서 모듈 활성화

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

 

[추가3] Invalid shell: '/bin/false'

로그인시 위와 비슷한 메시지가 나오는 경우 /etc/shells 에 등록해준다.

# cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/false

 

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,