🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> linux-ftp:(以下执行使用root管理员权限) #### 安装vsftpd服务: ~~~ sudo apt-get install vsftpd 安装后查看vsftpd -v版本信息 启动服务 service vsftpd start/restart/stop /etc/init.d vsftpd start/restart/stop 在home下创建ftp用户主目录 mkdir home/uftp 新建ftp用户并设置密码 sudo useradd -d /home/uftp -s /bin/bash uftpd, 回车创建成功 passwd uftp, 回车设置密码(两次) ~~~ > [useradd -d /home/uftp -s /usr/sbin/nologin uftpd 表示创建用户不能使用22端口登录-即不能sftp和ssh登录] 设置权限: > 1、修改/etc/vsftpd.conf > > (添加的前两行意思:指定一个userlist,里面放的是允许ftp登录的本地用户) > > (添加的第三行的意思:记录允许本地登录的用户名文件) > > (添加的第四行的意思:该行不配置可能会导致莫名其妙的530问题) > > (修改的第一行的意思是:允许本地用户登录) > > 添加: > > userlist_deny=NO > > userlist_enable=YES > > userlist_file=/etc/allowed_users > > seccomp_sandbox=NO > > 修改 > > local_enable=YES > > chroot_list_enable=YES > > chroot_list_file=/etc/vsftpd.chroot_list > 2、在/etc/下创建allowed_users文件(要看配置的位置) >> 输入uftp (每行一个用户名) > 3、查看/etc/ftpusers > > 如果有utfp名字就删除,没有就直接退出 > > 此文件中记录的是不能访问FTP服务器的用户清单 > 4、在/etc/下创建vsftpd.chroot_list文件(要看配置的位置) >> 输入uftp (每行一个用户名) 切记重启vsftp服务,然后使用ftp工具登录就会发现只能访问自己的主目录了 此时由于创建目录的是root用户,使用ftp用户登录后无法执行写入操作, > 暂时解决方法: > 1、超级用户root提前上传好项目内容到ftp用户主目录 > 2、超级用户root设置主目录下的所有文件夹及文件所属用户及用户组为ftp用户:chown -R ftpuser:ftpuser /home/ftpdir/* > 3、这样ftp用户拥有主目录下文件的替换与文件夹下子文件和子文件夹的读写执行权限 问题:修改ftp用户主目录所属用户为ftp后无法登陆ftp(显示用户身份认证失败) 存在问题:使用ftp,在21端口下没有问题,但是使用sftp,端口为22的时候登录依旧可以访问所有文件 于是需要禁止该ftp用户ssh登录,切断22端口的通信。 > 打开/etc下的shells文件:vi /etc/shells > 里面内容如下: > ~~~ > /bin/sh > /bin/bash > /sbin/nologin > /usr/bin/sh > /usr/bin/bash > /usr/sbin/nologin > /bin/tcsh > /bin/csh > ~~~ > 如果里面缺少内容就补齐(主要是/sbin/nologin和/usr/sbin/nologin) > 然后执行如下命令: > usermod -s /usr/sbin/nologin username > 这样就限制用户22端口登录了 > 恢复用户的ssh登录,即22端口登录 > usermod -s /bin/bash username ### ftp登录不了的问题存在: 本人测试设置了共享目录为ftp用户主目录结果登录的时候发现总是提醒用户身份验证失败 报错:`500 OOPS: vsftpd: refusing to run with writable root inside chroot()` 所以设置用户主目录的时候要选择合适的正确的目录 #### 重要问题 > 登录报错:`500 OOPS: vsftpd: refusing to run with writable root inside chroot()` > 这个错误,是由于vsftpd升级了的版本安全性验证的缘故: >` [- Add stronger checks for the configuration error of running with a writeable root directory inside a chroot(). This may bite people who carelessly turned on chroot_local_user but such is life.]` > **简而言之,就是说如果开启了chroot来控制用户路径,则用户不能再具有 根目录的写的权限. > `chroot_list_enable=YES` >` # (default follows)` > `chroot_list_file=/etc/vsftpd.chroot_list` > 解决方案: > 在vsftpd.conf中找到下面内容去掉注释,开启写的权限 > `#write_enable=YES` > `#local_umask=022` > 把用户根目录的写权限去掉就可以解决问题了。 > `chmod 511 /etc/home/path` > 其实我觉得这样有点不方便,因为这样需要在用户根目录下建一个文件夹 然后给它赋予 写 的权限, 然后用户登陆进去会发现必须要再进一层目录才能找到自己的文件。。。这样有点不太方便,当然提高了安全性这一点不可否认。 >此时出现新问题,用户不能对自己的主目录进行写入操作