宿主机已有一个容器 放置了openldap服务器,现需搭建FTP服务器采用LDAP验证用户。
FTP选用vsftpd
Docker Hub搜索fastmaybe/ftp-server,拉取命令docker pull fastmaybe/ftp-server
系统环境:
openldap服务配置
创建容器
docker run -itd 后台运行
--name ftp-server 容器标识
-p 92:80 端口映射
-p 2345:20 -p 2346:21
-p 21100-21110:21100-21110
-v /ftp:/ftp 文件挂载 宿主机路径:容器路径 会自动创建
--privileged 使用该参数,container内的root拥有真正的root权限
centos 镜像
/usr/sbin/init 将dbus等服务启动起来 避免使用systemctl出错
进入容器
docker exec -it ftp-server bash
yum -y install vsftpd pam_ldap
我们使用ldap验证就是:将ldap用户映射到此系统用户 这里我使用的是centos自带的ftp用户 你也可以自己创建,使用 useradd passwd等系列命令。
anonymous_enable=NO //是否允许anonymous登录FTP服务器,默认是允许的.
local_enable=YES /是否允许本地用户登录FTP服务器,默认是允许。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
write_enable=YES //是否允许用户具有在FTP服务器文件中执行写的权限,默认是允许
local_umask=022 //设置本地用户的文件生成掩码为022
* anon_upload_enable=YES # 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES
* anon_mkdir_write_enable=YES # 是否允许匿名用户创建新文件夹
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES //是否设定FTP服务器将启用FTP数据端口的连接请求
# ftp-data数据传输,21为连接控制端口
* chown_uploads=NO //设定是否允许改变上传文件的属主,与chown_username设定项配合使用
xferlog_file=/var/log/xferlog //设定系统维护记录FTP服务器上传和下载情况的日志文件
xferlog_std_format=YES //是否以标准xferlog的格式书写传输日志文件
listen=NO 是否允许监听。如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen_ipv6=YES 设定是否支持IPV6。如要同时监听IPv4和IPv6端口,
# 则必须运行两套vsftpd,采用两套配置文件
# 同时确保其中有一个监听选项是被注释掉的
* pam_service_name=vsftpd //(用户验证(/etc/pam.d/目录下的vsftpd文件)
* userlist_enable=YES //用户列表中的用户是否允许登录FTP服务器,默认是不允许
tcp_wrappers=YES
* allow_writeable_chroot=YES
* anon_other_write_enable=YES
* anon_umask=022
use_localtime=YES
user_config_dir=/etc/vsftpd/userconf #与前面配置虚拟用户相同,也可以为每个ldap用户分配具体的权限
* guest_enable=YES
* guest_username=ftp //将ldap用户映射到此系统用户 这里是centos自带的用户
local_root=/ftp //#指定用户登陆后所处的根目录
uri ldap://192.168.88.188/
base dc=secmask,dc=com
ssl no
service nslcd restart (systemctl restart nslcd.service)
host 192.168.88.188
BASE dc=secmask,dc=com
URI ldap://192.168.88.188
如果仅仅需要ldap认证:
去掉其余或者注释掉 加上:
auth required pam_ldap.so
account required pam_ldap.so
额外加上ldap认证:
在auth加上 auth sufficient pam_ldap.so 作为auth第一个
在account加上 account required pam_ldap.so 作为account第一个
1 required 表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会立即通知用户,而是要等到同一stack 中的所有模块全部执行完毕再将失败结果返回给应用程序。可以认为是一个必要条件。
2 requisite 与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一stack内的任何模块,而是直 接将控制权返回给应用程序。是一个必要条件。注:这种只有RedHat支持,Solaris不支持。
3 sufficient 表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack内的其它模块,但是如果本模块返回失败的话可以 忽略。可以认为是一个充分条件。
4 optional表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。
对于control-flag,从Linux-PAM-0.63版本起,支持一种新的语法,具体可参看LinuxPAM文档。
1.如果一直在验证页面不能登录:就是在ldap验证阶段出现问题。
建议检查 /etc/pam_ldap.conf 文件是否配置错误。
2.登录后不能创建文件(创建权限),或者创建了文件不能修改删除(修改删除权限),服务正常情况下,大都是权限问题。一般是两点原因:
如果需要将不同的ldap用户也有不同的权限。需要在user_config_dir=/etc/vsftpd/userconf
下创建文件(文件名与用户名相同),在里面配置用户权限。如下设置