samba 中文乱码解决

步骤一:查看系统编码

[root@localhost public]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

步骤二:修改smb.conf配置文件

根据步骤一来判断,
如果locale是zh_CN.UTF-8,做如下设置:

display charset = utf8

unix charset = utf8

dos charset = utf8

如果locale是zh_CN.GBK或zh_CN.gb2312,做如下设置:

display charset = cp936

unix charset = cp936

dos charset = cp936

步骤三:重启samba服务

service samba restart

Ubuntu 18.04安装Samba服务器及配置

局域网下使用samba服务在Linux系统与Windows系统直接共享文件是一项很方便的操作。以Ubuntu为例配置samba服务,Linux服务器的版本是Ubuntu 18.04.1 LTS。

未分类

在终端中执行下列指令:cat /etc/issue查看当前正在运行的 Ubuntu 的版本号。

未分类

以下是我的安装配置步骤:

(1)更新当前软件

sudo apt-get upgrade  
sudo apt-get update  
sudo apt-get dist-upgrade

(2)安装samba服务器

sudo apt-get install samba samba-common

未分类

(3)创建一个用于分享的samba目录

sudo mkdir /home/linuxidc/linuxidc.com/share

(4)给创建的这个目录设置权限

sudo chmod 777 /home/linuxidc/linuxidc.com/share

未分类

(5)添加用户(下面的linuxidc是我的用户名,之后会需要设置samba的密码)

sudo smbpasswd -a linuxidc

未分类

(6)配置samba的配置文件

sudo nano /etc/samba/smb.conf

在配置文件smb.conf的最后添加下面的内容:

[share]
comment = share folder
browseable = yes
path = /home/linuxidc/linuxidc.com/share
create mask = 0700
directory mask = 0700
valid users = linuxidc
force user = linuxidc
force group = linuxidc
public = yes 
available = yes 
writable = yes

未分类

在上面valid users = linuxidc中的linuxidc为我的用户名。

(7)重启samba服务器

sudo service smbd restart

(8)Windows徽标+R 在弹出的运行窗口中输入 \ip即可访问。如\192.168.182.188,输入samba用户名及密码访问即可看到共享,然后就可以在Linux系统与Windows系统直接进行文件共享了

Win+R:在弹出的运行窗口中输入ip(在ubuntu中用ifconfig查看ip)即可访问。

未分类

如果提示:提示你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问。这些策略可帮助保护你的电脑免受网络上不安全设备或恶意设备的威胁。

解决方法见:https://www.linuxidc.com/Linux/2018-11/155467.htm

(9)输入samba用户名及密码访问即可看到共享文件夹shar

未分类

上传创建文件

未分类

(10)选中share,点击右键,选择映射网络驱动器

未分类

未分类

(11)最终结果如下图

未分类

Samba集成Ldap认证

1. 基础安装

yum -y install samba-common samba samba-client smbldap-tools  openldap-clients  nss-pam-ldapd

2. 配置authconfig-tui

执行命令 “authconfig-tui”

未分类

未分类

未分类

验证配置

# getent passwd
zhangsan:x:6460:18650:zhangsan:/home/zhangsan:/bin/bash  #此账户为LDAP用户

3. 配置Samba

/etc/samba/smb.conf

[global]
        # 设定 Samba Server 所要加入的工作组或者域。
        workgroup = SAMBA
        # 设置用户访问Samba Server的验证方式,一共有四种验证方式,
        security = user
        cups options = raw

        log level = 3
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 100000

        # LDAP 支持
        passdb backend = ldapsam:ldap://172.16.50.117/
        ldap suffix = "dc=morepay,dc=cn"
        ldap admin dn = "cn=Manager,dc=xx,dc=cn"
        ldap user suffix = "ou=People,dc=xx,dc=cn"
        ldap group suffix = "ou=Group,dc=xx,dc=cn"
        ldap delete dn = no
        ldap passwd sync = yes
        ldap ssl = no


[homes]
        comment = Home Directories
        preexec = /data/bin/samba %U
        path = /data/smb/home/%U
        writeable = yes

[caiwu]
        # 共享描述
        comment = caiwu
        # 共享资源路径
        path = /data/smb/caiwu
        # 指定该共享路径是否可写
        writeable = yes
        # 是否有浏览权限
        browseable = yes
        # 指定允许访问该资源的用户,多个用户用','号间隔,(用户组用@+组名)
        valid users = zhangsan
        # 指定不允许访问该共享资源的用户,同 valid users
        # invalid users = 
        # 指定可以在该共享下写入文件的用户
        # write list  =

执行:smbpasswd -W 输入LDAP密码

创建 /data/bin/samba 文件 添加:

umask 077
user=$1
if [ ! -d /data/smb/home/$user ];then
mkdir /data/smb/home/$user
chmod 777 /data/smb/home/$user
fi
chmod 777 /data/bin/samba
mkdir /data/smb/home -p
mkdir /data/smb/caiwu
chmod 777 /data/smb -R

启动samba服务

systemctl restart smb

4. 测试

未分类

测试创建文件及目录

未分类

未分类

ubuntu samba配置

1、设置root密码和更换vim

sudo passwd root
su root

apt-get remove vim-common
apt-get install vim

2、安装samba

apt-get install samba
service smb start

3、备份并修改配置

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
vim /etc/samba/smb.conf 

4、在文件后追加配置内容

[helb]
comment = Share Folder require password
browseable = yes
path = /home/helb
create mask = 0777
directory mask = 0777
valid users = helb
force user = helb
force group = helb
public = yes
writable = yes
available = yes

5、重启samba

/etc/init.d/samba restart

6、创建共享目录(可跳过)

mkdir /home/share
chmod 777 /home/share

7、建立用

sudo groupadd share -g 6000
sudo useradd share -g 6000 -s /shin/nologin -d /dev/null
smbpasswd -a share

8、windows共享

运行栏:\IP

apt-get install openssh-server

添加用户:

useradd -r -m -s /bin/bash <name>
passwd <name>

Openwrt 之 Samba配置

一、添加编译配置

make menuconfig

Network --->
  <*> samba36-server .......Samba 3.6 SMB/CIFS server

Luci --->
  3. Applications --->(若需要web页面控制则选上)
       <*> luci-app-samba ......Network Shares -samba

二、添加共享配置

先读取/etc/config/samba,结合/etc/samba/smb.conf.template文件,生成配置文件/etc/samba/smb.conf

1、修改模板

vim /etc/samba/smb.conf.template

unix charset = utf-8
#invalid users = root

2、配置共享目录

vim /etc/config/samba

config sambashare
        option name 'share'   //共享文件夹share需要用户名和密码访问
        option path '/mnt'
        option users 'root'     //可useradd 其它用户
        option read_only 'no' 
        option guest_ok 'no'
        option create_mask '0755'
        optin dir_mask '0755'

config sambashare
        option name 'share2'  //共享文件夹share2可游客访问
        option path '/tmp'
        option read_only 'no'
        option guest_ok 'yes'
        option create_mask '0755'
        option dir_mask '0755'

三、设置共享用户密码

smbpasswd -a root
cat /etc/samba/smb.conf

[share]
        path = /mnt
        valid users = root
        read only = no
        guest ok = no
        create mask = 0755

[share2]
        path = /tmp
        read only = no
        guest ok = yes
        create mask = 0755
        directory mask = 0755

若/etc/samba/smbpasswd不存在,则先touch一个。

四、测试

配置好,先重启服务

/etc/init.d/samba restart

PC访问测试

\192.168.1.1

Samba 共享文件

使用 Samba 来共享 ChromeBook 上挂载的硬盘文件,这样一来,Mac、Win 和 Android 都可以共享文件。

安装

我使用的 Linux 系统是 ArchLinux,安装方法很简单,其他平台自行查找。

pacman -S samba

服务端配置

配置文件

Samba 的配置文件在 /etc/samba/smb.conf。首先我把硬盘挂载到 /data01 目录,然后新建了文件夹 share,并且把文件夹权限改成了 777。

[global]
workgroup = WORKGROUP
server string = Media Server
security = user
log file = /var/log/samba/log.%m
max log size = 50
hosts allow = 127., 172., 192.168.1., 192.168.3., 10.

[share]
    comment = To share
    path = /data01/share
    valid users = ouyangsong
    read only = No
    browseable = No

然后检查配置的语法。

testparm

常用的选项:

未分类

添加用户

Samba 需要 Linux 账号才可以使用,用户名可以共享,但是密码不共享。我就直接使用本来就有的账号 ouyangsong,只需要把它设置一个 Samba 密码即可。

smbpasswd -a ouyangsong

如果是专门创建来登陆 Samba 服务,最好禁用其他登陆选项。

禁用 Shell

usermod --shell /user/bin/nologin --lock ouyangsong

禁用 SSH

修改 /etc/ssh/sshd_conf 中的 AllowUsers 字段。

重启服务

网上有些教程这里过时了,因为这个服务名字已经修改了。

systemctl restart smb nmb

客户端连接

Mac 打开 finder,然后 command + k 就可以打开远程连接。填入对应的 IP,就会提示输入用户名和密码就可以登陆了。

未分类

安卓我使用的文件管理器是 Solid Explorer,添加远程连接找到 LAN/SMB 方式即可。

未分类

CentOS 7设置Samba共享目录

一、安装Samba服务

yum -y install samba
# 查看yum源中Samba版本
yum list | grep samba
# 查看samba的安装情况
rpm -qa | grep samba

Samba服务器安装完之后, 会生成配置文件目录/etc/samba, /etc/samba/smb.conf是samba的核心配置文件.

二、启动Samba服务

Samba服务安装完成之后有两种方法启动:

service smb start/stop/restart/status
# 或者
systemctl start/stop/restart/status smb.service

# 设置smb服务开机启动
systemctl enable smb.service

三、开放Samba服务使用到的端口号

Samba服务会用到如下的一些端口号:

  • 137(UDP): NetBIOS名字服务
  • 138(UDP): NetBIOS数据报服务
  • 139(TCP): 文件和打印共享
  • 389(TCP): 用于LDAP
  • 445(TCP): NetBIOS服务在windows 2000及以后使用此端口
  • 901(TCP): 用于SWAT, 网页管理Samba

如果不想关闭防火墙的话, 就要在CentOS中放开Samba使用到的TCP端口号

firewall-cmd --zone=public -add-port=139/tcp --permanent
firewall-cmd --zone=public -add-port=389/tcp --permanent
firewall-cmd --zone=public -add-port=445/tcp --permanent
firewall-cmd --zone=public -add-port=901/tcp --permanent

firewall-cmd --reload

# 查看已经放开的端口号
firewall-cmd --list-all

四、配置Samba服务

1、配置匿名访问, 任何人都可以访问的共享目录

1) 创建共享目录

mkdir /opt/shares

# 因为需要设置匿名用户可以上传下载文件, 所以需要给shares目录授予nobody权限
chown -R nobody:nobody /opt/shares

2) 修改/etc/samba/smb.conf文件

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
vi /etc/samba/smb.conf

修改配置如下:

# 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
        map to guest = Bad User
        log file = /var/log/samba/log.%m


[public]
        comment = Public Stuff
        path = /opt/shares
        public = yes
        read only = No

其中 path就是上边设置的共享目录, read only 表示是否有写权限

3) 修改完配置文件之后重启samba服务

systemctl restart smb.service

4) 测试smb.conf配置是否正确

# 使用testparm命令
testparm

5) 至此就配置完成, 可以从Windows下访问samba的共享目录.

2、配置指定用户可以访问的共享目录

设置共享目录, 只允许指定用户组的用户访问

1) 添加工作组cnki和用户share

groupadd cnki
# useradd -g 组名 用户名
useradd -g cnki share
# 设置用户share的密码
passwd share

#删除用户
userdel -r 用户名

2) 把要访问的账户添加到samba的账户中

光添加系统账户还不够, 需要把已经存在的系统账户添加到samba中才可以访问共享目录

# smbpasswd 参数: -a: 添加 -x: 删除 -d: 禁用 -e: 启用
smbpasswd -a share

3) 创建共享目录

mkdir /opt/shares1

# chown -R 用户名:组名 目录
chown -R share:cnki /opt/shares1

4) 设置samba服务

修改配置文件/etc/samba/smb.conf如下

# 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
        map to guest = Bad User
        log file = /var/log/samba/log.%m

[shares]
        comment = CNKI
        path = /opt/shares1
        # 表示用户组
        valid users = @cnki
        read only = No

5) 重启smb服务

systemctl restart smb.service
# 检查smb.conf文件是否配置正确
testparm

6) 至此配置完成, 可以在Windows平台下通过用户名share/share来访问共享目录了.

openwrt上用cifs挂载samba共享文件夹

用cifs挂载的时候不知道什么原因一直提示错误:

mount error(22): Invalid argument

花了一天时间找google,终于找到个方法,在后面加参数 vers=1.0 什么原理我也不知道,反正能行就好。

mount.cifs //192.168.2.1/op/1 /mnt/sda1/123 -o username=root,password=root,rw,vers=1.0

samba文件共享

samba的作用

samba是一款软件,主要功能时提供cifs协议,Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源

samba的安装与启用

虚拟机IP:172.25.254.125(服务端)

yum install samba samba-common samba-client -y
systemctl start smb
systemctl stop firewalld

虚拟机IP:172.25.254.225(客户端)

yum install samba-client -y

samba的基本信息

netstat -lntup|grep smb

端口: 139/tcp 139/udp 445/tcp 445/udp
主配置文件:/etc/samba/smb.conf

基本配置信息

虚拟机IP:172.25.254.125(服务端)

vim /etc/samba/smb.conf
89         workgroup = dream                                                   ###工作组的设定
90         server string = hello world                                         ###全局共享信息
hosts deny = 172.25.254.225                                                    ###黑名单
hosts allow =172.25.254.225  172.25.254. 或  172.25.254.0/24                   ###白名单 

测试

虚拟机IP:172.25.254.225(客户端)

smbclient -L //172.25.254.125 

黑名单打开:

未分类

白名单打开:

未分类

本地用户的建立及访问

虚拟机IP:172.25.254.125(服务端)

useradd aa
useradd dream
smbpasswd -a aa                                           
smbpasswd -a dream                                        ###添加samba用户
[root@samba-server ~]# pdbedit -L                         ###列出samba用户
aa:1002:
dream:1001:
pdbedit -x aa                                             ###删除samba用户
setsebool -P samba_enable_home_dirs on                    ###给家目录权限,/etc/samba/smb.conf的30行 

测试

虚拟机IP:172.25.254.225(客户端)

smbclient //172.25.254.225/dream -U dream                 ###这样很多命令没法使用,所以我们挂载使用文件夹
mount //172.25.254.225/dream /mnt -o username=dream,password=1
vim /etc/fstab
###开机自动挂载
//172.25.254.225/dream /mnt    cifs    defaults,username=dream,password=1 0 0

如果未给家目录权限:

未分类

给了权限:

未分类

未分类

自定义共享目录

(1)用户创建的目录

虚拟机IP:172.25.254.125(服务端)

mkdir /dream
semanage fcontext -a -t samba_share_t '/dream(/.*)?'                 ###开放当前目录的selinux安全上下文
restorecon -FvvR /dream/
[root@samba-server /]# ls -dZ /dream                                 ###查看selinux安全上下文
 drwxr-xr-x. root root system_u:object_r:samba_share_t:s0 /dream
vim /etc/samba/smb.conf                                              ```

###在文件最后面加入
321         [DREAM]                                                  
322         comment = dream_ya                                       ###描述
323         path = /dream
touch /dream/aa                                                      ###我们在共享目录建文件来看下效果

测试

虚拟机IP:172.25.254.225(客户端)

smbclient -L //172.25.254.125 -U dream

未分类

smbclient  //172.25.254.125/DREAM -U dream

未分类

(2)系统目录

虚拟机IP:172.25.254.125(服务端)

vim /etc/samba/smb.conf
326         [SYSTEM]
327         comment = file
328         path = /mnt
setsebool -P samba_export_all_ro on                       ###/etc/samba/smb.conf的49行

测试

虚拟机IP:172.25.254.225(客户端)

smbclient -L //172.25.254.125 -U dream

未分类

smbclient  //172.25.254.125/SYSTEM -U dream

未分类

匿名用户登陆

虚拟机IP:172.25.254.225(客户端)

vim /etc/samba/smb.conf
124 map to guest = bad user
321         [DREAM]
322         comment = dream_ya
323         path = /dream
324        guest ok = yes                              ###匿名用户可以登陆
systemctl restart smb

测试

虚拟机IP:172.25.254.225(客户端)

mount //172.25.254.125/DREAM/mnt/ -o username=guest
df

未分类

权限控制

虚拟机IP:172.25.254.225(客户端)

chmod 777 /dream
setsebool -P samba_export_all_rw on
vim /etc/samba/smb.conf
writable = yes | no                           ###是否开启写权限(开启所有用户都可以写)
把上面的writable = yes | no注释掉,在测试下面的情况
write list = dream                            ###给dream写的权限
write list = +dream                           ###给dream组写的权限
admin users = dream                           ###设定当前共享的root为dream
valid users = @dream                          ###设定当前共享的有效用户组
browseable = yes | no                         ###当前共享是否隐藏

测试

虚拟机IP:172.25.254.225(客户端)

[root@samba-client /]# mount //172.25.254.125/DREAM /mnt -o username=dream,password=1
vim /etc/samba/smb.conf
327         [SYSTEM]
328         comment = file
329         path = /mnt
330         browseable = no
systemctl restart smb.service

测试

虚拟机IP:172.25.254.225(客户端)

smbclient -L //172.25.254.125 -U dream              

未分类

samba的多用户挂载

虚拟机IP:172.25.254.225(客户端)

yum install cifs-utils.x86_64 -y
vim /root/sambapasswd
username=dream
password=1

chmod 600 /root/sambapasswd
mount -o credentials=/root/sambapasswd,sec=ntlmssp,multiuser //172.25.254.125/DREAM /mnt
credentials=/root/sambapasswd                                    ###挂载时的用户认证目录
multiuser                                                        ###支持其他用户认证
sec=ntlmssp                                                      ###其他用户的认证方式

测试

虚拟机IP:172.25.254.125(服务端)

[root@samba-server /]# useradd redhat
[root@samba-server /]# smbpasswd -a redhat
New SMB password:
Retype new SMB password:
Added user redhat. 

虚拟机IP:172.25.254.225(客户端)

[root@samba-client /]# useradd kk
[root@samba-client /]# su - kk
[root@samba-client /]# cifscreds add -u redhat 172.25.254.125
[root@samba-client /]# ls /mnt

未分类

CentOS7 SAMBA服务器搭建

samba有三个模式: share|user|domain,平常使用也就是用user模式,也就是使用samba服务器本身的密码资料库,跟passsdb backend有关。

安装软件:

# yum install samba -y

配置SMABA:

# vim /etc/samba/smb.conf
Bash
[global]
workgroup = SAMAB
netbios name = CentOS
server string = This is  samba server
unix charset = utf8
display charset = utf8
dos charset = cp950
log file = /var/log/samba/log.%m
max log size = 50
load printers = no
#与密码有关的设定项目
security = user <==这行就是重点啦!改成user层级
passdb backend = tdbsam <==使用的是TDB资料库格式!
# 分享的资源设定方面:删除temp加入homes与project
[homes] <==分享的资源名称,登入samba的账户的家目录,这个可以不考虑配置
comment = Home Directories
browseable = no <==除了使用者自己外,不可被其他人浏览
writable = yes <==挂载后可读写此分享
create mode = 0664 <==建立档案的权限为664
directory mode = 0775 <= =建立目录的权限为775
[project] <==共享资源
comment = smbuser's project
path = /home/project <==实际的Linux上面的目录位置
browseable = yes <==可被其他人所浏览到资源名称(非内容)
writable = yes <==可以被写入
write list = @users <==写入者有哪些人的意思

每次改完smb.conf都重新检查一下语法正确:

# testparm

创建相应的目录:

# mkdir /home/project
# chgrp users /home/project
# chmod 2770 /home/project

创建系统账号,并设置密码

# useradd -G users smb1
#echo 1234 | passwd --stdin smb1

新增samba账号,使用刚刚创建好的系统账号:

# pdbedit -a -u smb1

输入两次密码即可

# pdbedit -L 可以列出已存在的账号
# smbpasswd smab1可以修改账号密码
# pdbedit -x -u smb1可以删除账户

设置开机自启服务

# systemctl enable smb.service
# systemctl enable nmb.service
# systemctl start smb.service
# systemctl start nmb.service

匿名登录smb服务器测试:

# smbclient -L //smbserverip

使用账号登录smb服务器测试:

# smbclient -L //serverip -U smb1

挂载测试:

# mount -t cifs //serverip/smb1 /mnt -o username=smb1

防火墙设置:

# firewall-cmd --zone=public --add-service=samba --permanent
# firewall-cmd --reload

Selinux设置:

这一步很重要,不然没法正常用的

# getsebool -a | grep samba查看samba的selinux规则
# setsebool -P samba_enable_home_dirs=1
# chcon -t samba_share_t /home/project也可以用# restorecon -Rv '/home/project'

完事在windows上挂载试试就没问题了。