ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ### **制定目标** 1、两个虚拟用户:ftpadmin、ftpguest;ftpadmin有读写(上传、下载、删除、重命名)的权限,ftpguest账号只有读(下载)的权限。 2、两个用户登录后都定位到目录`/data/ftp`下。 说明,FTP的用户有三种类型: * 匿名用户:在登录FTP时使用默认的用户名,一般是ftp或anonymous。 * 本地用户:即主机上的用户,在`/etc/passwd`中。 * 虚拟用户:不是主机用户,但是可以用来登录FTP的用户。 ### **操作步骤** **1、安装vsftpd** vsftpd的全称是 “very safe ftp daemon”,是linux上一种常用的ftp服务器软件。 ``` $ sudo yum -y install vsftpd ``` 在虚拟用户的鉴权中,需要用到下面这一系列软件 ``` $ sudo yum -y install pam* ``` 然后确认下`/lib64/security/pam_userdb.so`文件已存在,由于我的主机操作系统是64位的,所以是`/lib64`目录,32位系统用`/lib`。 **2、创建FTP根目录** 创建目录`/data/ftp`,作为FTP服务器的根目录,并且将目录的拥有者设置为主机的某个用户(假设我们把它设置给`peng`用户与`peng`用户组,注意该主机用户与用户组要存在,且该用户最好能ssh到主机上) ``` $ sudo mkdir -p /data/ftp $ sudo chown peng:peng /data/ftp ``` 这里要注意: 第一,我们把该目录的拥有者设置为了主机用户`peng`,那么在后面配置`/etc/vsftpd/vsftpd.conf`文件时,一定要把虚拟用户映射到主机用户`peng`。这是因为,虚拟用户登录上FTP后,对目录`/data/ftp/`下的操作,相当于是主机用户`peng`对它们的操作,所以要想让虚拟用户有权限操作(比如增删改查)这个目录,那么主机用户`peng`必须要有权限操作这个目录。 第二,上面我们推荐用户`peng`最好能ssh到主机上,这是因为,有时候我们需要ssh到ftp主机上,然后从另一台linux主机上scp一个文件到ftp目录下,如果使用其他主机用户(比如root)拷贝到`/data/ftp`目录下,那么主机用户`peng`对这个文件是没有写权限的(也有可能没有读权限),那么虚拟用户登录上FTP后,对这个文件也可能没法读(下载)和写。 **3、设置登录ftp的虚拟用户文件** 创建文件`/etc/vsftpd/virtual_user`,内容如下: ``` ftpadmin Admin@123 ftpguest Guest@123 ``` 格式依次是:第一行是账户名,次行是该账号的密码;即奇数行是账户名,偶数行是对应上一行的账户密码)。 这个虚拟账号是不需要手动创建的,它不是真实存在于主机操作系统中的,即`/etc/passwd`文件里没有的,它是借助于宿主账号peng **4、生成虚拟用户口令认证的db文件** 生成虚拟用户口令认证的db文件 ``` $ sudo db_load -T -t hash -f /etc/vsftpd/virtual_user /etc/vsftpd/virtual_user.db ``` **5、设置虚拟用户权限** 接下来设置虚拟用户的权限,创建目录`/etc/vsftpd/vuser_conf` ``` $ sudo mkdir /etc/vsftpd/vuser_conf ``` 然后在该目录下创建文件`ftpadmin`与`ftpguest`(虚拟用户的用户名),文件内容分别如下: * ftpadmin ``` # 虚拟用户登录后的根目录 local_root=/data/ftp/ # 允许虚拟用户有写权限,这个只有设置为YES,后面的upload、mkdir、delete、rename才会有效 write_enable=YES # 允许虚拟用户上传 anon_upload_enable=YES # 允许虚拟用户新建目录的写权限 anon_mkdir_write_enable=YES # 允许虚拟用户其他的写权限(删除、重命名) anon_other_write_enable=YES # 只读权限无法浏览目录,所以要设置为NO anon_world_readable_only=NO # 上传与创建目录的掩码 anon_umask=022 ``` * ftpguest ``` # 虚拟用户登录后的根目录 local_root=/data/ftp/ # 禁止虚拟用户的写权限 write_enable=NO # 只读权限无法浏览目录,所以要设置为NO anon_world_readable_only=NO ``` **6、配置pam文件** 编辑文件`/etc/pam.d/vsftpd`,没有则新建,用下面内容覆盖 ``` # 这个virtual_user根据的是virtual_user.db auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_user account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_user ``` **7、修改配置文件`/etc/vsftpd/vsftpd.conf`** 直接用下面的内容覆盖配置文件 ``` ### ------------global------------------------ # 允许本地用户访问,允许虚拟用户访问也必须打开此开关 local_enable=YES # 可写可上传。这个参数是全局配置,否则上传和下载都会报错550! write_enable=YES # 只监听IPv4地址 listen=YES # 同时监听IPv4与IPv6 listen_ipv6=NO # 监听的端口(命令端口),默认21 listen_port=21 # 允许开放数据端口 connect_from_port_20=YES # 数据端口 ftp_data_port=20 # 被动模式下的最大端口与最小端口,只允许100个连接 pasv_min_port=10000 pasv_max_port=10099 # 鉴权所使用的文件:/etc/pam.d/vsftpd pam_service_name=vsftpd # 其他配置 dirmessage_enable=YES xferlog_enable=YES xferlog_std_format=YES ascii_upload_enable=YES ascii_download_enable=YES tcp_wrappers=YES ### ---------------virtual user----------------------- # 启用虚拟用户 guest_enable=YES # 虚拟用户映射到本地用户的peng guest_username=peng # 虚拟用户的权限配置目录 user_config_dir=/etc/vsftpd/vuser_conf # 虚拟用户使用本地用户的权限 virtual_use_local_privs=YES ### ---------------anonymous user--------------------- # 禁止匿名用户访问 anonymous_enable=NO ### --------------local user------------------------- ``` **8、启动** ``` $ sudo systemctl start vsftpd && sudo systemctl enable vsftpd ``` ### **Reference** * https://www.cnblogs.com/kevingrace/p/5587140.html * https://blog.51cto.com/liwenjia/2140382 * https://blog.51cto.com/spv999/800503