Samba的安装与使用
Samba使用到的协议为CIFS:Common Internet File System。Samba可以在linux与linux或windows之间互相共享文件。CIFS在windows上监听的端口为137/udp,138/udp、139/udp、445/tcp,137和138是实现NetBISO的,它是一种基于主机名的通信机制。Samba支持三种服务,第一种nmdb服务,实现netbios协议,第二种smbd服务实现CIFS协议,第三种服务winbindd服务,让linux加入到windows的ad中去的,默认不启动。
安装samba:
yum -y install samba samba-client samba-common
samba-client 客户端工具。
samba-common 公共包。
samba-winbind windows的AD域控认证功能。
服务脚本:
CentOS 7上的服务脚本:
/usr/lib/systemd/system/nmb.service
/usr/lib/systemd/system/smb.service
CentOS 6上的服务脚本:
/etc/rc.d/init.d/nmb
/etc/rc.d/init.d/smb
配置文件目录:
/etc/samba/smb.conf # 主配置文件
samba用户:
samba的用户都是系统用户都是/etc/passwd中的用户名,但是密码为samba服务器的自有密码文件,创建好系统用户后要将这个用户加入到samba密码文件中去。将系统用户转换为samba用户的命令为smbpasswd。
useradd -r samba smbpasswd -a samba
-a 添加
-d 禁用
-e 启用
-x 删除
启动samba:
启动服务:
CentOS 6:service smb start; service nmb start;
CentOS 7:systemctl start smb; systemctl start nmb;
查看状态:netstat -tunl,查看几个端口是否启动了。
windows端访问samba共享目录:
添加了账号启动好服务就可以在客户端访问samba共享目录了,在windows的文件夹浏览器的地址栏上输入地址\\192.168.96.130\ 回车后弹出对话框,让你输入用户名和密码,输入后即可进入共享目录中。在里面可以创建文件等等。再服务端可以在这个用户的家目录中查看到创建的文件。
linux端访问samba共享目录:
1、探测共享目录:smbclient -L host -U username,然后会出现一个列表:
~]# smbclient -L 192.168.0.183 -U root Enter SAMBA\root's password: Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers share Disk IPC$ IPC IPC Service (Samba 4.10.16) root Disk Home Directories Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master --------- -------
连接共享目录的方式就是将Sharename这一列的名称添加到地址后面,然后即可访问,方式如下:
smbclient //192.168.0.183/share -U username
2、基于挂载的访问方式:
mount -t cifs //IP/directory /挂载点 -o username=username,password=password
配置文件:
上面的这种访问方式只能访问用户的家目录,可以编辑配置文件来共享特定的目录,配置文件位置在/etc/samba/smb.conf文件,配置可分为全局的配置设定,和特定的共享设定。特定共享设定可以分为三类:私有家目录、打印机、自定义共享目录。
1、配置项:
netbios name = MYSERVER netbios名称
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 监听的网卡或地址,不指定监听所有
hosts allow = 127. 192.168.12. 192.168.13. 白名单,基于IP地址的访问控制,空格分格
log file = /var/log/samba/log.%m 日志文件,%m表示客户端地址,所以每个客户端都有单独的日志。
max log size = 50 每个日志文件的大小单位M兆,超过这个大小就滚动
security = user 表示每个访问samba的用户都要有一个用户名
passdb backend = tdbsam 密码存放的库
2、下面这一段配置为公共的家目录配置,表示是否可以访问家目录:
[homes]
comment = Home Directories 注释信息
browseable = no 目录是否可让别人浏览
writable = yes 是否可写,创建文件
valid users = %S %S表示自己,表示此目录只能让自己访问,默认机制,所以不用开启
valid users = MYDOMAIN\%S
3、共享打印机,方便使用samba服务器的共享打印机,目的就是windows可以共享linux上的打印机设备。
[printers]
browseable = No
comment = All Printers
create mask = 0600
path = /var/tmp
printable = Yes
4、自定义共享的方式:
[shared_name] 共享名称
path = /path/to/shared_directory 共享目录
common = common string
guest ok = yes|no 是否允许来宾账号访问,同public = yes|no
writable = yes|no 是否可写,同read only = yes|no
write list = +group_name 组用户是否可写,例:write list = @groupname, username
5、测试配置文件是否有效命令:testparm,可以查看到所有的配置项,重启两个服务后即可。
问题:
service iptables stop #关闭防火墙 setenforce 0 # 关闭SElinux
没有写权限解决方法:
setfacl -m u:samba:rwx /shared/test/ # 这里的samba为用户名
将samba共享目录挂载到其他linux主机上:
mount -t cifs -o username=samba -l //192.168.96.128/tools /mnt/test/
遇到的错误:
1、mount: block device //192.168.96.128/tools is write-protected, mounting read-only
mount: cannot mount block device //192.168.96.128/tools read-only
解决方法:yum -y install cifs*重新挂载即可
2、session setup failed: NT_STATUS_LOGON_FAILURE,解决方法:没有将用户添加到samba用户。
3、NT_STATUS_ACCESS_DENIED opening remote file \fstab,解决方法:此用户没有写权限,要使用setfacl赋予此用户权限。
4、tree connect failed: NT_STATUS_BAD_NETWORK_NAME ,要共享的文件夹没有创建。
开机自动挂载:
在文件 /etc/fstab 中添加如下:
//192.168.96.128 /mnt cifs credentials=/etc/samba/cred.passwd 0 0
在这个文件中 /etc/samba/cred.passwd 保存这密码账号等凭证,内容如下:
username=samba password=123
给这个文件设置不可访问:
chmod og=--- /etc/samba/cred.passwd
测试自动挂载是否可用:
umount /mnt/test # 先卸载 ls /mnt/test mount -a # 再挂载 ls /mnt/test # 查看是否挂载成功
samba图形化管理工具:
yum install samba-swat,这个管理工具是基于web服务提供图形界面的,但是这个进程不会有很大的访问量,所以是使用超级守护进程xinetd代为管理的,安装好之后会在/etc/xinetd.d/下会生成一个文件swat,打开这个文件将disable选项改为no,将only_from选项改为主机的IP地址。
service swat
{
port = 901
socket_type = stream
wait = no
only_from = 192.168.96.0/24
user = root
server = /usr/sbin/swat
log_on_failure += USERID
disable = no
}
然后启动xinetd服务,service xinetd start,使用ss -tnl,查看901端口是否可以访问。然后在浏览器输入地址192.168.96.128:901即可访问,然后输入用户名root和root的密码,这个用户可以在swat配置文件中设置其他用户,也可以在图形化界面修改密码。
快速配置:在配置文件的最后添加如下配置。
vim /etc/samba/smb.conf [share] path = /home/disk2 public = yes writable = yes valid users = root #valid users = user1, user2, user3 #valid users = @group1, @group2 create mask = 0644 force create mode = 0644 directory mask = 0755 force directory mode = 0755 available = yes browseable = yes #guest ok = yes #public = yes
开机启动:
systemctl enable smb --now
添加密码:
]# useradd root # samba的用户就是系统用户,但是密码是samba的自有密码,此处root只是演示 ]# smbpasswd -a root ]# smbclient -L 192.168.0.6 -U root
在windows中挂载:
\\192.168.0.6\share # 上面的配置段写的[名称]就是登录时候的路径名称
在linux中挂载:不写password字段则回车在提示框中输入密码
mount -t cifs //192.168.0.100/share /mnt/samba -o username=smbuser,password=smbpass
隐藏用户名密码:
mount -t cifs //192.168.0.100/share /mnt/samba -o credentials=pass.txt cat > pass.txt <<EOF username=smbuser password=smbpass EOF; chmod 600