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.