공유 환경에서 ProFTPd를 안전하게 구성

공유 환경에서 ProFTPd를 안전하게 구성

현재 공유 웹 호스팅을 위한 LAMP 스택이 있고 ProFTP를 사용하고 있습니다.

현재 ProFTP 구성은 상당히 고정되어 있습니다 ~. 사용자는 현재 기본 사용자/그룹으로 실행됩니다. 우리는 가상 사용자가 아닌 시스템 사용자만 사용합니다.

우리는 SuPHP를 사용하여 각 PHP 프로세스를 적절한 사용자/그룹으로 실행합니다.

내가 정말로 원하는 것은 ProFTP가 user:group로그인하는 사람에게 업로드된 파일을 자동으로 설정하도록 하는 것입니다. 따라서 "customer-a"로 FTP에 로그인하면 업로드된 모든 파일을 "customer-a"가 소유하게 되기를 원합니다.

이것의 주된 이유는 내가 지금 누군가로 로그인하면 그 사람은 자신의 홈 디렉토리에 쓸 수 있는 권한이 없기 때문인 것 같습니다. ProFTP가 권한을 완화하는 대신 사용자 컨텍스트를 적절하게 전환하기를 원합니다.

가능한 해결책

제가 고려한 것 중 하나는 각 고객 도메인에 대해 가상 호스트를 선언하는 것이었습니다.사용자그리고그룹별도의 지침.

1) 이것은 고통스러운 일이므로 생성된 각 사용자에 대해 구성을 추가하는 것을 피하고 싶습니다. 2) ProFTP는 지원하지 않는 것 같습니다.이름 기반 가상 호스팅.

또는 다음을 사용할 수 있습니다.사용자 소유자그리고그룹 소유자지시문을 작성하고 <Directory>구성의 각 고객에 대해 새 블록을 생성합니다.

나는 다음과 같은 것이 효과가 있을 것이라고 생각했습니다.

<Directory /home/customer-a/>
    UserOwner customer-a
    UserGroup customer-a
</Directory>

%u하지만 로그에 기록되는 변수와 같은 보다 일반적인 방법으로 수행할 수 있다면 좋을 것입니다.여기. 그러나 나는 이것이 UserOwner에게는 효과가 없다고 생각합니다.

몇 가지 세부 사항

  • 우분투 사용
  • ProFTP 1.3.4a
  • 아파치 2.2
  • PHP-CGI와 함께 SuPHP를 사용하세요.

답변1

더 나은 해결책은 각 클라이언트에 대해 시스템 계정을 갖는 대신 MySQL 인증을 사용하는 것입니다. 이를 통해 디렉터리 위치, 사용자 ID 및 보안이 향상되는 유연성이 향상됩니다.

이를 수행하려면 mysql 지원을 사용하여 proftpd를 빌드하십시오.

그런 다음 mysql에 테이블("사용자"라고도 함)을 만듭니다.

  CREATE TABLE users (
    userid VARCHAR(30) NOT NULL UNIQUE,
    passwd VARCHAR(80) NOT NULL,
    uid INTEGER UNIQUE,
    gid INTEGER,
    homedir VARCHAR(255),
    shell VARCHAR(255),
    active BOOLEAN DEFAULT true
  );

  CREATE INDEX users_userid_idx ON users (userid);

그런 다음 사용자를 추가하십시오. 비밀번호는 proftpd.conf의 SQLAuthTypes 지시문에 따라 다양한 형식이 될 수 있지만 기존의 암호화된 비밀번호를 여기에 넣을 수 있어야 합니다.

   INSERT INTO users (username,password, uid, homedir) VALUES ('username','APassWord', 77, '/home/sftpcustomers/custname/')

proftpd.conf에는 다음이 있어야 합니다.

     SQLBackend            mysql
     SQLAuthenticate       users
     AuthOrder             mod_sql.c
     SQLAuthTypes          OpenSSL Plaintext Crypt
     SQLConnectInfo        dbname@localhost:3306 db_username db_password

     SQLUserInfo     users username password uid NULL homedir NULL
     SQLUserWhereClause "Active = 1"

관련 정보