vsftp作为FTP服务,创建单用户访问多个目录的方法
需求:公司在内网有一台权限认证服务器,用于做安全功能、渗透的验证。接入的项目比较多,经常有项目组需要取日志定位问题,日志分散在三个不同的目录,需要实时的获得日志。思路是想建一个FTP账号,同时有三个目录的只读权限,可以下载文件,不能上传或删除文件。
- 使用默认的配置文件,查看vsftpd.conf是否支持单用户多目录的配置,很可惜,没发现
- 使用Serv、FileZilla等FTP服务端搭建FTP Server,然后通过其他手段,将Linux服务器上的日志实时同步到指定目录。有一些方案,一般都需要借助第三方的软件,或者另外的共享服务器,比较繁琐。
- 使用软链接或硬链接的方式,将多个目录的日志文件指向FTP账号有操作权限的文件。但是考虑到日志文件和日志目录都有可能被删除(如日志文件过大删除、升级操作等)造成死链接,所以也不太合适。
使用mount进行整个目录的挂载是否可行
一般日志的上级目录不会被删除,mount是个非常强大的命令,有很多参数可用,以前用过–bind参数,而且mount –bind跟ln是不同的,ln是链接,并且对外“声称”自己是链接,而mont –bind类似于实际操作了原始文件。(具体原理及区别请大家百度)
创建FTP用户操作步骤
操作系统版本为Redhat Enterprise Sever 6.8,其他版本的配置文件可能略有区别。操作前,相关配置文件一定要备份。
创建FTP账号,首先创建用户组,或者是用已有的用户组,这里创建了FTP单独的用户组:
groupadd ftpgroup
确认FTP用户的默认目录,创建FTP用户:
useradd -d /usr/local/ftpfile -s /sbin/nologin -g ftpgroup -G root public_19
使用root账号修改密码:
passwd public_19
配置vsftp服务,编辑/etc/vsftpd/vsftpd.conf文件,修改以下配置:
anonymous_enable=NO
userlist_enable=NO
去掉以下两行的注释:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
编辑user_list文件,把ftp用户名添加到最后一行:
public_19
新建chroot_list文件,输入以下内容:
public_19
重启vsftp服务:
service vsftpd restart
使用mount –bind添加多目录访问权限
首先日志文件有三个,分别在三个不同的目录,而且文件名有重复,所以考虑在FTP用户的默认目录下建三个子目录,分别对应三个日志文件所在的目录。
mkdir /usr/local/ftpfile/0_22000
mkdir /usr/local/ftpfile/1_22001
mkdir /usr/local/ftpfile/2_22002
执行mount --bind命令:
mount --bind /home/weblogic/xxx/xxx/xxx/logs/ /usr/local/ftpfile/0_22000/
使用public_19账号登录,发现无法进入0_22000,应该是没有权限,因为子目录虽然在FTP默认目录下,但是由root账号创建的,因此修改目录权限:
chmod 755 0_22000
再次登录,成功访问目录且可以看到日志文件,并且仅可以下载,不支持上传及删除操作。
同样操作其他两个目录,最终可以在FTP用户登录后,默认仅能下载指定不同路径的三个目录下的文件,且不支持删除、上传等更新操作。
其他相关命令:
直接使用mount,不加任何参数,可以列出当前所有的mount文件和分区信息。
umount /usr/local/ftpfile/0_22000
上述命令可以取消bind。
使配置重启后依然生效。mount命令执行挂载的结果都是临时的,如果想重启后依然自动挂载,需修改fstab文件。
如: /home/weblogic/xxx/xxx/xxx/logs/ /usr/local/ftpfile/0_22000/ none rw,bind 0 0
由于服务器暂时无法重启,所以上述命令未经过验证。
疑问:在执行mount命令时,发现我bind的路径的权限都是rw,但是实际上使用FTP账号登录时,并没有写权限,难道是因为手工设置目录权限不包括写的原因?