docker+ftp+openldap记录接入openldap过程 配置

背景:

宿主机已有一个容器 放置了openldap服务器,现需搭建FTP服务器采用LDAP验证用户。
FTP选用vsftpd
Docker Hub搜索fastmaybe/ftp-server,拉取命令docker pull fastmaybe/ftp-server

系统环境:

  • 宿主机ubuntu(这个影响不大 还是记录一下)
  • SELINUX 关闭状态
  • 基础镜像 含centos

openldap服务配置

  • url :192.168.88.188 端口389 默认389
  • olcSuffix: dc=secmask,dc=com
  • olcRootDN: cn=Manager,dc=secmask,dc=com 管理员账户
  • olcRootPW: 123456 密码
1.创建一个ftp-server容器
创建容器
 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
2.安装vsftpd,pam_ldap
  • 这里解释一下,vsftpd是安装ftp服务器
  • pam_ldap:pam_ldap: pam是Pluggable Authentication Module,即插件式认证模块。它集成了很多种认证方法,pam_ldap是其中的一种,调用ldap验证用户的身份。这里的ldap我用的是openldap。
yum -y install vsftpd  pam_ldap
3.编辑配置文件
I. vi /etc/vsftpd/vsftpd.conf
  • vi /etc/vsftpd/vsftpd.conf (以下配置项前面带 * 的为比较重要的或建议的选项,如果以下重要配置项在你的 vsftpd.conf没有,手动加入,其余配置个人视情况)
  • #这一段很重要,因为后面创建的ldap账号的权限都是这几个条目来控制的,也就是说这几个条目控制guest账户权限
这里解释一下ftp用户的登录:
  • anonymous(匿名帐号)
  • real真实账号 ,也称本地账号,就是以真实的用户名和密码登录,前提是用户在FTP拥有自己的账号。具体可以查看文档。
  • guest 虚拟账号。如果用户在FTP服务器上拥有帐号,但此帐号只能用于文件传输服务,那么该帐号就是guest,guest是真实帐号的一种形式,它们的不同之处在于,geust登录FTP服务器后,不能访问除宿主目录以外的内容.

我们使用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  //#指定用户登陆后所处的根目录
2 vi /etc/nslcd.conf
uri ldap://192.168.88.188/
base  dc=secmask,dc=com 
ssl no

service nslcd restart (systemctl restart nslcd.service)

3./etc/openldap/ldap.conf
host 192.168.88.188
BASE dc=secmask,dc=com
URI ldap://192.168.88.188
4. 编辑 /etc/pam.d/vsftpd
如果仅仅需要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第一个
module-type 模块类型有四种:auth、account、session、password,即对应PAM所支持的四种管理方式。同一个服务可以调用多个 PAM模块进行认证,这些模块构成一个stack。四种模块如下:
  • 1 auth:认证管理(authentication management)主要是接受用户名和密码,进而对该用户的密码进行认证,并负责设置用户的一些秘密信息。
  • 2 account:帐户管理(account management)主要是检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等等。
  • 3 password:密码管理(password management)主要是用来修改用户的密码。
  • 4 session:会话管理(session management)主要是提供对会话的管理和记账(accounting)。
  • control-flag 用来告诉PAM库该如何处理与该服务相关的PAM模块的成功或失败情况。它有四种可能的 值:required,requisite,sufficient,optional。

1 required 表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会立即通知用户,而是要等到同一stack 中的所有模块全部执行完毕再将失败结果返回给应用程序。可以认为是一个必要条件。

2 requisite 与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一stack内的任何模块,而是直 接将控制权返回给应用程序。是一个必要条件。注:这种只有RedHat支持,Solaris不支持。

3 sufficient 表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack内的其它模块,但是如果本模块返回失败的话可以 忽略。可以认为是一个充分条件。

4 optional表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。
对于control-flag,从Linux-PAM-0.63版本起,支持一种新的语法,具体可参看LinuxPAM文档。

4.登录认证问题,文件权限问题及别的坑

1.如果一直在验证页面不能登录:就是在ldap验证阶段出现问题。
建议检查 /etc/pam_ldap.conf 文件是否配置错误。

2.登录后不能创建文件(创建权限),或者创建了文件不能修改删除(修改删除权限),服务正常情况下,大都是权限问题。一般是两点原因:

  • vsfptd.conf文件配置问题 建议参考上图配置
  • 系统文件所属用户和用户组 (这个什么意思呢,就是说在使用ldap验证通过后,将会映射到本地用户来操作文件,上文中 vsfpd.conf的配置项guest-username=ftp就是通过登录映射为ftp用户)
    解决方案:
    • 1 检查vsfptd.conf 上文重要配置都已列出
    • 2 设置FTP根目录的权限 我的路径是/ftp,可以使用 ll 命令查看你的文件前的内容 查看是否有读写权限。或者直接粗暴点 chmod -R 777 /ftp(最新的vsfptd貌似对跟路径不能有写操作,设置775 跟路径下777)而我直接chmod -R 777 /ftp。另外再改变文件所属用户和用户组保险点。chown -R ftp:ftp /ftp(将 /ftp 设为ftp用户组下的ftp用户所有,因为此处我是将ftp设为登录后的映射账户)

另外 可能还会遇到此错误
在这里插入图片描述

  • 解决方案:控制面板 找出 intenet选项=》高级
    在这里插入图片描述
    在这里插入图片描述
    至此 已经可以搭建文件共享ftp服务器。但是此时vsftpd因为结合了ldap,最终将ldap用户都映射到了同一个系统用户,所以文件的权限其实对每一个ldap用户都一样。

如果需要将不同的ldap用户也有不同的权限。需要在user_config_dir=/etc/vsftpd/userconf
下创建文件(文件名与用户名相同),在里面配置用户权限。如下设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值