Samba是和NFS类似都是网络文件系统。
就是实现跨平台的,文件共享,windows和linux之间的共享。当然也可以linux和linux。
在windows中不需要下载文件就可以直接使用,直接在服务器上编辑。
samba服务的端口 1)rhel 5 由两个进程完成的 smbd:处理smb数据的,实现文件和打印机共享 139 445 tcp nmbd:名字解析 137 138 udp 2)rhel 6:一个进程实现 smbd: 139 445 tcp
1、最简单的共享:
配置思路: 1、安装软件 ,服务端安装samba 客户端安装samba-client windows不用安装。 2、编写配置文件。 3、重启服务 4、测试。
软件的安装:
服务端:
[root@localhost /]# yum install samba Dependency Installed: avahi-libs.x86_64 0:0.6.31-17.el7 cups-libs.x86_64 1:1.6.3-29.el7 libldb.x86_64 0:1.1.29-1.el7 libtalloc.x86_64 0:2.1.9-1.el7 libtdb.x86_64 0:1.3.12-2.el7 libtevent.x86_64 0:0.9.31-1.el7 libwbclient.x86_64 0:4.6.2-8.el7 pytalloc.x86_64 0:2.1.9-1.el7 samba-client-libs.x86_64 0:4.6.2-8.el7 samba-common.noarch 0:4.6.2-8.el7 samba-common-libs.x86_64 0:4.6.2-8.el7 samba-common-tools.x86_64 0:4.6.2-8.el7 samba-libs.x86_64 0:4.6.2-8.el7 Complete!编写配置文件:
[root@localhost /]# tail -10 /etc/samba/smb.conf map to guest = Bad User // 允许匿名登录 最后加上这几行。 [sambashare] //这个表示连接的名字,连接时用这个名字访问,而不是目录。 comment = test sambas!! //这个是描述,随便写,不过最好是标识信息。 path = /samba-dir //源文件,也就是共享目录的绝对路径 browseable = yes //是否允许不登录就可以查看共享目录 public = yes //与guest ok=yes是一样的,表示允许匿名共享 writable = yes //可写的。客户端: 客户端要安装了samba-client软件。
[root@www nfs-172.16.12.14]# smbclient -L 172.16.12.14 Enter SAMBA\root's password: OS=[Windows 6.1] Server=[Samba 4.6.2] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers sambashare Disk test sambas!! IPC$ IPC IPC Service (Samba 4.6.2) OS=[Windows 6.1] Server=[Samba 4.6.2] Server Comment --------- ------- Workgroup Master --------- -------客户端登录samba服务
[root@www nfs-172.16.12.14]# smbclient //172.16.12.14/sambashare //输入服务端IP和共享模块名 Enter SAMBA\root's password: //设置的是匿名直接回车 OS=[Windows 6.1] Server=[Samba 4.6.2] smb: \> ls //登录进来了 . D 0 Sat Nov 2 14:07:18 2019 .. DR 0 Sat Nov 2 14:07:18 2019 41922560 blocks of size 1024. 40901980 blocks available smb: \> ls . D 0 Sat Nov 2 14:14:37 2019 .. DR 0 Sat Nov 2 14:07:18 2019 111.txt N 0 Sat Nov 2 14:14:37 2019 41922560 blocks of size 1024. 40901980 blocks available在windows中操作。
直接输入服务端地址就好了 常用命令和ftp的类似: 常用命令: ls:查看共享的文件列表 cd:切换服务器路径 lcd:切换本地路径 put:上传 get:下载
创建目录等操作是,要看共享的目录本身有没有这个权限。
否则就算samba给了读写权限也不能创建。
41922560 blocks of size 1024. 40901980 blocks available smb: \> mkdir kkk NT_STATUS_ACCESS_DENIED making remote directory \kkk 这个就是没有权限的下面的就是有权限的,上传成功。
smb: \> put ggg.txt putting file ggg.txt as \ggg.txt (0.1 kb/s) (average 0.1 kb/s) smb: \> ls . D 0 Sat Nov 2 14:36:50 2019 .. DR 0 Sat Nov 2 14:07:18 2019 111.txt N 0 Sat Nov 2 14:14:37 2019 kkk D 0 Sat Nov 2 14:33:50 2019 ggg.txt A 6 Sat Nov 2 14:36:50 2019 41922560 blocks of size 1024. 40901860 blocks available最大访问上限: 在全局那一项里加 max connect = 1
设置最大访问限制为1 。
表示同时只能有一个人访问服务器。 这是第一个访问成功。
第二个访问失败,提示网络资源不足。
释放资源 就正常了。
2、用户名和密码访问登录 samba的用户比较特殊,一个用户要先存在于系统之中,再将系统用户设置samba的用户,如此才能在samba中使用。
将配置文件中设置匿名用户可登录的那一项取消。
map to guest = Bad User // 允许匿名登录
然后将共享模块里的public注释掉
将系统中的用户 sambauser1 sambauser2变为samba的用户并设置密码。
成功后就可以在客户端进行登录了。 服务端
[root@localhost /]# smbpasswd -a sambauser1 New SMB password: Retype new SMB password: Mismatch - password unchanged. Unable to get new password. [root@localhost /]# smbpasswd -a sambauser2 New SMB password: Retype new SMB password: Added user sambauser2.客户端
[root@www gsc-test-ssh]# smbclient //172.16.12.14/sambashare -U sambauser1 Enter SAMBA\sambauser1's password: Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2] smb: \> ls . D 0 Sat Nov 2 14:36:50 2019 .. DR 0 Sat Nov 2 14:07:18 2019 111.txt N 0 Sat Nov 2 14:14:37 2019 kkk D 0 Sat Nov 2 14:33:50 2019 ggg.txt A 6 Sat Nov 2 14:36:50 2019 41922560 blocks of size 1024. 40901948 blocks available smb: \>查看samba用户
[root@localhost /]# pdbedit -L sambauser2:1003: sambauser1:1002:只允许某个用户访问
[root@localhost /]# tail -1 /etc/samba/smb.conf valid users = sambauser1只有1 能登陆 2不能登陆
[root@www gsc-test-ssh]# smbclient //172.16.12.14/sambashare -U sambauser2 Enter SAMBA\sambauser2's password: Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2] tree connect failed: NT_STATUS_ACCESS_DENIED [root@www gsc-test-ssh]# smbclient //172.16.12.14/sambashare -U sambauser1 Enter SAMBA\sambauser1's password: Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2] smb: \>允许组访问
[root@srv254-200 ~]# tail -1 /etc/samba/smb.conf valid users = @smbuser2 // @组名 或者 +组名允许多个用户访问 配置文件
valid users = smbuser1 smbuser2只限制某个用户
read list = smbuser2 //只读如果想要让每个samba用户只看到对自己用户共享的文件,而看不到别的用户的共享。可以将每个用户的配置文件分来来写,并且主配置文件不做更改。比如一个用户art
[root@localhost ~]# cat /etc/samba/smb.conf.art # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = @printadmin root force group = @printadmin create mask = 0664 directory mask = 0775 [art] comment = art path = /smbvg/art write list = art create mask = 0664 directory mask = 0775这个配置文件只写art用户的共享,前边的都是原来的主配置文件的内容,不用变。同时修改用户的家目录为,这个用户的samba的共享目录。
第二个用户money
[root@localhost ~]# cat /etc/samba/smb.conf.money # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = @printadmin root force group = @printadmin create mask = 0664 directory mask = 0775 [money] comment = money path = /smbvg/money write list = money create mask = 0664 directory mask = 0775这个配置文件中前变的不变 后边之加上money这个用户的共享。同样修改家目录为这个用户samba共享的目录。
这样就可以实现 money用户登录samba只能看到money的共享目录,而看不到art的。
一些选项的含义
[global] //全局配置 workgroup = SAMBA //工作组 security = user //安全验证的设置 share:匿名共享,不需要提供用户名和密码直接就能访问共享 user:需要提供用户名和密码才能访问共享,验证使用的是本地服务器 server: 依靠其他samba server来验证用户的密码账号 domain: 域安全级别,使用主域控制器来完成验证 ads: passdb backend = tdbsam //用户后台 smbpasswd:使用smb自己的工具来给用户设置smb密码 tdbsam:使用数据库文件来建立用户数据库 ldapsam:基于LDAP的ldap服务 printing = cups //设置共享打印机的类型 printcap name = cups //设置共享打印机的配置文件 load printers = yes //是否加载打印机 cups options = raw //跟打印机相关的选项 [homes] //共享名 comment = Home Directories //注释,对共享的描述 browseable = no //是否允许不登录就可以查看共享目录 smbclient -L 查看共享目录的 valid users = %S, %D%w%S //允许访问的用户 read only = No //是否只读 inherit acls = Yes [printers] comment = All Printers path = /var/spool/samba //共享的绝对路径 browseable = no create mask = 0600 printable = yes [print$] comment = Printer Drivers非交互式设置samba的密码。
echo -e "123\n123" | smbpasswd -a -s sambauser1 [root@localhost ~]# echo -e "123\n123" | smbpasswd -a -s sambauser1 Added user sambauser1.