在linux上挂载了很大的硬盘,想作为共享文件服务器来利用这块硬盘,让域用户不用登陆就可以直接使用。普通samba服务通常需要验证自己管理的用户,要使用域用户就必须加入域,接受域的权限管理。
samba加域是很麻烦的事情,网上文章很多,真正能做到不出问题的估计不多。于是想到了docker,在docker hub上搜索了半天,发现能满足要求的就只有一个名叫fjudith/samba-join-ad的项目,这个项目已经4年没有维护了,在网上几乎找不到任何介绍。
源代码
https://github.com/fjudith/docker-samba-join-ad/blob/master/sssd/docker-entrypoint.sh
这个项目介绍极为简单只有下面几句
Replace by the local ip of the machine executing docker runtime.
docker run -it --rm --add-host "docker-smb.localdomain.loc docker-smb":<host ip address> \ --hostname docker-smb \ -e TZ=Etc/UTC -e DOMAIN_NAME=localdomain.loc \ -e ADMIN_SERVER=dc1.localdomain.loc \ -e WORKGROUP=localdomain \ -e AD_USERNAME=Administrator \ -e AD_PASSWORD=V3rY1ns3cur3P4ssw0rd \ -p 137:137/udp \ -p 138:138/udp \ -p 139:139/tcp \ -p 445:445/tcp \ fjudith/samba-join-ad
刚开始老是不对,后来对照git hub上的代码,到容器里面验证才发现问题所在
问题是:WORKGROUP必须是DOMAIN_NAME的第一段
另外需要注意的是 AD_USERNAME和AD_PASSWORD是域管理者的账号,通过这个账号才能加入域。
还有一个问题是samba的共享文件夹在哪里?看代码才明白是下面3个
home:/home
public:/usr/share/public
private:/usr/share/private
我们把这3个映射到host上就可以了,如果要改成其他名字就不好办,需要把docker-entrypoint.sh映射到host来修改
下面是我改写的docker-compose.yml
version: '3.0'
services:
samba:
image: "fjudith/samba-join-ad"
container_name: docker-smb
hostname: docker-smb
environment:
TZ: "Asia/Tokyo"
DOMAIN_NAME: 'chengdu.xxx.local'
ADMIN_SERVER: 'CDS.chengdu.xxx.local'
WORKGROUP: 'chengdu'
AD_USERNAME: 'Administrator'
AD_PASSWORD: '12345678'
extra_hosts:
- "docker-smb.chengdu.xxx.local:192.168.122.90"
- "docker-smb:192.168.122.90"
ports:
- "137:137/udp"
- "138:138/udp"
- "139:139/tcp"
- "445:445/tcp"
volumes:
- "/home/data:/home"
- "/mnt/sdb1/data:/usr/share/public"
权限需要用windows文件管理器的属性-安全里面设置,默认是everyone,需要加上Domain users,删除everyone。这样只有域用户能访问,并且不需要登录。
需要注意的是,设置权限的时候,会显示
这时点继续,重新显示这个信息的时候时候点取消就可以了
原因不明,因为不影响使用就没有深究了。