本文只记录自己在安装配置过程中对vsftp的简单理解和一些遇到的问题,因此将直接跳过vsftp的安装。
理解:
1. 主要的几个文件:
a. /etc/vsftpd.conf: vsftp的配置文件,需要根据对ftp的需求进行相应的修改。
b. /etc/pam.d/vsftpd: 启用虚拟模式时,使用pam_service时所需的配置
c. /etc/virtual_user: 记录虚拟用户的用户名和密码,奇数行为用户名,偶数行为密码
d. /etc/virtual_user.db: 最后生成的db文件,用于设置 [b.]当中的参数
e. /etc/virtual_user_config/*: 一个虚拟用户对应一个文件,并设置用户的权限
2. vsftp 的基本操作步骤:
a. 创建真实用户并指定用户的root目录,并设置登陆方式
useradd -d /xxx/xxx -s /sbin/nologin account
b. passwd 为用户创建密码
c. 创建[1.c]中的文件,并将要开放的虚拟用户按照[1.c]中的格式加入进去
d. 使用db4 中的 db_load 将[c.]中的文件生成db
db_load -T -t hash -f /etc/virtual_user /etc/virtual_user.db
e. 为[1.e]中的每个用户创建对应的配置文件,并设置权限
guest_enable=YES
guest_username=account
write_enable=YES
anon_world_readable_only=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES(delete)
anon_upload_enable=YES
anon_max_rate=200000(200kb/s)
local_root=/xxx/xxx/xxx (to restrict virtual users' root directory)
f. 将[e.]中的文件路径作为参数加入到[1.a]中的vsftpd.conf中去
user_config_dir=/etc/virtual_user_config
g. 编辑[1.b]中的内容,注释原来的内容,并添加
auth required /lib/security/pam_userdb.so db=/etc/virtual_user
account required /lib/security/pam_userdb.so db=/etc/virtual_user
h. 修改[1.a]中的配置
listen=YES(listen mode)
local_enable=YES(yes to enable local user to login through ftp,no to diable)
anonymous_enable=NO(disallow anonymous user to login through ftp)
write_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list(allow users listed in the file to login to their root)
user_config_dir=/etc/virtual_user_config
allow_writeable_chroot=YES
seccomp_sandbox=NO (if you can not login, you can add this)
遇到的问题:
1. 有2次因为自己的拼写,导致一直有错误发生,所以拼写一定要仔细检查,学会查看系统log来定位问题很重要
2. 在/etc/pam.d/vsftpd中有2个地方曾遇到错误:
a. 由于64位和32位系统的区别,[2.g]中的路径可能会发生变化,由于我的系统是64位,而上述是32位的路径,所以链接会530
在查看了相应的log(/var/log/***.log)后,发现有 No such directory or directory not found
b. 由于拼写account的时候掉了一个n,而导致同样的530,也是通过排查log后才发现问题 --- 2017.05.22
c. 今天按照上述思路重新配置vsftpd的时候,成功实现了下面所述的“待解决问题”,通过挂在目录实现了不同组别的用户目录分离,但又可以彼此共享特定文件。
目前遇到的问题是所有的用户都可以正常登陆并按照计划可以访问指定的文件夹,却都不能进行上传操作。最后通过尝试发现创建这些用户时为他们所指定的/root
目录的“所有者和组别”都是“root” 利用 chown来更改来解决这个问题 -2017.05.23
待解决的问题:
1. 通过目录挂载的方式(或其他办法)来实现不同用户对不同目录的权限控制 (解决)
:实现两个部门单独有各自的文件夹,只能访问自己的文件夹且具有上传下载的权限,但两个部门间可以互相共享文件
另有一个管理员账户,对所有部门具有 上传,下载,删除 等权限
方案:
创建3组账户, admin depart1 depart2, 为他们指定的/root目录都为 /home/ftp
然后在/home/ftp下创建2个文件夹:depart1 depart2, 默认情况下这些目录的所有者和组别 都为 root:root
在/home目录下 sudo chown -R admin:root ftp 使得该目录及下面所有子目录都归admin所有(实现admin账户的功能)
此时仍然对于depart1 和 depart2 账户来说,由于权限原因,仍然无法进行相应的操作。
cd /etc ---> sudo vi passwd 在最后可以发现刚刚创建的几个账户, 如:
admin:1001:1001::/home/ftp
depart1:1002:1002::/home/ftp
depart2:1003:1003::/home/ftp
将depart1 和 depart2 后面都更改为 1001:1001,这样一来,depart1 depart2账户的权限已经相当于admin了
那么问题来了,所有的账户都是admin的权限了 ? of course not!
通过[2.e]中的参数,为所对应为admin depart1 depart2(local users)的虚拟账户(virtual users)配置不同的权限,
并通过local_root=/xxx/xxx/xxx 参数来限制虚拟用户登陆到ftp后所在的目录,例如:
对于对应为depart1的虚拟用户配置来说, local_root=/home/ftp/depart1
~~~~ depart2~~~~~~ , local_root=/home/ftp/depart2
这样不同部门的虚拟用户登陆上去之后只能访问自己的文件夹, 对与admin来说则应该为 local_root=/home/ftp
接下来,部门之间如何共享呢?
在/home/ftp/depart1 /home/ftp/depart2 下面同时建立一个"share"文件夹
然后 sudo mount --bind /home/ftp/depart1/share /home/ftp/depart2/share,每个用户在自己的root目录下都可以访问share文件夹,
且都具有上传,下载权限,且访问的share里面的内容是同样的。
现在大功告成了! 感触最大的是,这样的一些操作和理解,真的是需要对linux系统有一个全面的理解,反过来说摸索的过程也让我对linux系统有了一个新的认识!
理解:
1. 主要的几个文件:
a. /etc/vsftpd.conf: vsftp的配置文件,需要根据对ftp的需求进行相应的修改。
b. /etc/pam.d/vsftpd: 启用虚拟模式时,使用pam_service时所需的配置
c. /etc/virtual_user: 记录虚拟用户的用户名和密码,奇数行为用户名,偶数行为密码
d. /etc/virtual_user.db: 最后生成的db文件,用于设置 [b.]当中的参数
e. /etc/virtual_user_config/*: 一个虚拟用户对应一个文件,并设置用户的权限
2. vsftp 的基本操作步骤:
a. 创建真实用户并指定用户的root目录,并设置登陆方式
useradd -d /xxx/xxx -s /sbin/nologin account
b. passwd 为用户创建密码
c. 创建[1.c]中的文件,并将要开放的虚拟用户按照[1.c]中的格式加入进去
d. 使用db4 中的 db_load 将[c.]中的文件生成db
db_load -T -t hash -f /etc/virtual_user /etc/virtual_user.db
e. 为[1.e]中的每个用户创建对应的配置文件,并设置权限
guest_enable=YES
guest_username=account
write_enable=YES
anon_world_readable_only=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES(delete)
anon_upload_enable=YES
anon_max_rate=200000(200kb/s)
local_root=/xxx/xxx/xxx (to restrict virtual users' root directory)
f. 将[e.]中的文件路径作为参数加入到[1.a]中的vsftpd.conf中去
user_config_dir=/etc/virtual_user_config
g. 编辑[1.b]中的内容,注释原来的内容,并添加
auth required /lib/security/pam_userdb.so db=/etc/virtual_user
account required /lib/security/pam_userdb.so db=/etc/virtual_user
h. 修改[1.a]中的配置
listen=YES(listen mode)
local_enable=YES(yes to enable local user to login through ftp,no to diable)
anonymous_enable=NO(disallow anonymous user to login through ftp)
write_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list(allow users listed in the file to login to their root)
user_config_dir=/etc/virtual_user_config
allow_writeable_chroot=YES
seccomp_sandbox=NO (if you can not login, you can add this)
遇到的问题:
1. 有2次因为自己的拼写,导致一直有错误发生,所以拼写一定要仔细检查,学会查看系统log来定位问题很重要
2. 在/etc/pam.d/vsftpd中有2个地方曾遇到错误:
a. 由于64位和32位系统的区别,[2.g]中的路径可能会发生变化,由于我的系统是64位,而上述是32位的路径,所以链接会530
在查看了相应的log(/var/log/***.log)后,发现有 No such directory or directory not found
b. 由于拼写account的时候掉了一个n,而导致同样的530,也是通过排查log后才发现问题 --- 2017.05.22
c. 今天按照上述思路重新配置vsftpd的时候,成功实现了下面所述的“待解决问题”,通过挂在目录实现了不同组别的用户目录分离,但又可以彼此共享特定文件。
目前遇到的问题是所有的用户都可以正常登陆并按照计划可以访问指定的文件夹,却都不能进行上传操作。最后通过尝试发现创建这些用户时为他们所指定的/root
目录的“所有者和组别”都是“root” 利用 chown来更改来解决这个问题 -2017.05.23
待解决的问题:
1. 通过目录挂载的方式(或其他办法)来实现不同用户对不同目录的权限控制 (解决)
:实现两个部门单独有各自的文件夹,只能访问自己的文件夹且具有上传下载的权限,但两个部门间可以互相共享文件
另有一个管理员账户,对所有部门具有 上传,下载,删除 等权限
方案:
创建3组账户, admin depart1 depart2, 为他们指定的/root目录都为 /home/ftp
然后在/home/ftp下创建2个文件夹:depart1 depart2, 默认情况下这些目录的所有者和组别 都为 root:root
在/home目录下 sudo chown -R admin:root ftp 使得该目录及下面所有子目录都归admin所有(实现admin账户的功能)
此时仍然对于depart1 和 depart2 账户来说,由于权限原因,仍然无法进行相应的操作。
cd /etc ---> sudo vi passwd 在最后可以发现刚刚创建的几个账户, 如:
admin:1001:1001::/home/ftp
depart1:1002:1002::/home/ftp
depart2:1003:1003::/home/ftp
将depart1 和 depart2 后面都更改为 1001:1001,这样一来,depart1 depart2账户的权限已经相当于admin了
那么问题来了,所有的账户都是admin的权限了 ? of course not!
通过[2.e]中的参数,为所对应为admin depart1 depart2(local users)的虚拟账户(virtual users)配置不同的权限,
并通过local_root=/xxx/xxx/xxx 参数来限制虚拟用户登陆到ftp后所在的目录,例如:
对于对应为depart1的虚拟用户配置来说, local_root=/home/ftp/depart1
~~~~ depart2~~~~~~ , local_root=/home/ftp/depart2
这样不同部门的虚拟用户登陆上去之后只能访问自己的文件夹, 对与admin来说则应该为 local_root=/home/ftp
接下来,部门之间如何共享呢?
在/home/ftp/depart1 /home/ftp/depart2 下面同时建立一个"share"文件夹
然后 sudo mount --bind /home/ftp/depart1/share /home/ftp/depart2/share,每个用户在自己的root目录下都可以访问share文件夹,
且都具有上传,下载权限,且访问的share里面的内容是同样的。
现在大功告成了! 感触最大的是,这样的一些操作和理解,真的是需要对linux系统有一个全面的理解,反过来说摸索的过程也让我对linux系统有了一个新的认识!