====== 搭建 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