Trace: jciftp

搭建 JCI FTP 服务小记

搭建 JCI FTP 服务小记

注:本处的步骤仅供参考,请根据实际需求改动。操作环境为 Debian 9 x86_64。

服务需求

  • HTTP(S) 在线访问服务,但某些目录需要认证。
  • (S)FTP 上传,但不能让用户访问/修改系统并执行系统命令。

步骤

安装必备组件

$ sudo apt install nginx-extras apache2-utils

创建用户并给予权限

创建用户

$ sudo groupadd ftp
$ sudo useradd -g ftp ftpuser
$ sudo usermod -s /sbin/nologin -d /home/ftp -m ftpuser
$ sudo passwd ftpuser

设置登录

首先在 /etc/ssh/sshd_config 找到这段:

Subsystem      sftp    /usr/lib/openssh/sftp-server

将其注释然后添加这一行:

Subsystem sftp internal-sftp

然后在末尾添加:

Match Group ftp
    PasswordAuthentication yes
    ChrootDirectory /home/ftp
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

文件权限

必须要给母目录 root 用户和组的权限,且设置为 755。但下面的目录可随意指定。

$ sudo chown root:root /home/ftp
$ sudo chmod 755 /home/ftp
$ sudo chown ftpuser:ftp /home/ftp/files

设置网页服务器

本处只展示需求的设置。

列出目录

    location / {
        fancyindex on;
        fancyindex_exact_size off;
        fancyindex_localtime on;
        charset utf-8,gbk;
        try_files $uri $uri/ =404;
    }

认证目录

    location /secret {
        fancyindex on;
        fancyindex_exact_size off;
        fancyindex_localtime on;
        charset utf-8,gbk;
        auth_basic "Enter your name and password";
        auth_basic_user_file /var/www/ftp/.htpasswd;
    }

然后设置用户名密码,这里假设用户名为 user:

$ sudo htpasswd -c /var/www/ftp/.htpasswd user