公司里工作,有一些linux服务器主要存放项目分支的代码和一些文档,我们在windows上通过目录映射,可以用notepad、sublime、vs等编辑打开服务器端的文件,这样直接编辑访问服务器的目录显得比较方面,编写代码也可以使用自己习惯的工具。在家里为了在电脑上能连接虚拟机的centos操作目录,通过搭建Samba来实现。
Samba是linux的一个服务。下面介绍一下实现映射的配置过程,注意linux目录的权限,好几次配置完成后,windows访问映射的目录不能进行读写操作,提示无权限。
一、安装Samba
没有安装Samba的先进行安装,centos下命令如下
[root@localhost home]# yum install samba samba-client
二、创建Samba账号
首先为samba服务器创建一个用户组:groupadd admin (这里我的用户组和用户都命名为admin,包括后面的密码)
然后,在samba用户组下创建用户: useradd -g admin admin
[root@localhost /]# groupadd admin
[root@localhost /]# useradd -g admin admin
接着,给需要映射的目录授权。假设需要映射的目录为/home
# 755可能导致权限不足
[root@localhost home]# chmod -R 777 /home
[root@localhost home]# chown -R admin:admin /home
【注意】关于chown命令的使用:先用户其次才是用户组(用户:用户组)
三、修改Samba配置文件
没有安装vim的,yum install vim进行安装
[root@localhost home]# vim /etc/samba/smb.conf
我的配置如下:
注意security字段值不要改为share,可能导致smb服务起不来
linsirs相当于这个目录映射的别名,自己命名即可。指定之前创建的用户组和用户,path就是你需要映射到windows进行访问的目录,其他字段直接照搬就行。
【备注】看了很多博客有配置其他属性字段的,但至少这里新增的字段是能够实现目录的映射的。
四、为samba用户admin设置密码
[root@localhost samba]# smbpasswd -a admin
New SMB password:
Retype new SMB password:
Added user admin.
[root@localhost samba]# systemctl start smb.service
五、开放samba端口号
如果防火墙开启,则需要开放下面几个samba服务的端口号。首先,需要知道使用samba服务器需要防火墙开放以下端口
UDP 137
UDP 138
TCP 139
TCP 445
使用firewall-cmd命令:
[root@localhost samba]# firewall-cmd --add-port=137/udp --permanent
success
[root@localhost samba]# firewall-cmd --add-port=138/udp --permanent
success
[root@localhost samba]# firewall-cmd --add-port=139/tcp --permanent
success
[root@localhost samba]# firewall-cmd --add-port=445/tcp --permanent
success
[root@localhost samba]# firewall-cmd --reload
success
到这里,samba服务器的项目配置工作已经完成了,但我映射访问后,尝试新建文件夹、文件等读写操作时,提示无权限,联系管理员什么的,看了很多文章才找到解决方法。
试过这几个命令,都没奏效:
[root@localhost home]# chmod -R a+rwx /home
[root@localhost home]# systemctl stop firewalld
正确方法:
确保setlinux关闭,可以用setenforce 0命令执行。 默认的,SELinux禁止网络上对samba服务器上的共享目录进行写操作,即使你在smb.conf中允许了这项操作。
执行这两条命令解决权限问题:
[root@localhost home]# iptables -F
[root@localhost home]# setenforce 0
【服务启动】
配置完成后,别忘记启动服务,服务启动停止相关命令:
启动samba服务
[root@localhost samba]# systemctl start smb.service
关闭samba服务
[root@localhost samba]# systemctl stop smb.service
开机启动samba服务
[root@localhost samba]# systemctl enable smb.service
查看samba服务状态
[root@localhost samba]# systemctl status smb
六、目录成功映射并进行读写:
【备注】
如果有问题,以下几点需要确定:
确定samba服务已正常启动;samba服务端口没有被禁止;有权限进入samba共享目录;
服务正常的状态:
[root@localhost home]# systemctl status smb
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
Active: active (running) since 五 2019-03-29 21:27:11 CST; 11min ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 7479 (smbd)
Status: "smbd: ready to serve connections..."
CGroup: /system.slice/smb.service
├─7479 /usr/sbin/smbd --foreground --no-process-group
├─7481 /usr/sbin/smbd --foreground --no-process-group
├─7482 /usr/sbin/smbd --foreground --no-process-group
├─7483 /usr/sbin/smbd --foreground --no-process-group
└─7485 /usr/sbin/smbd --foreground --no-process-group
检查samba 的权限配置,testparm -s 命令可以检查此文件是否有错误,如错误,会显示其行号。
[root@localhost home]# testparm -s
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[linsirs]"
Global parameter workgroup found in service section!
Global parameter netbios name found in service section!
Loaded services file OK.
Server role: ROLE_STANDALONE
# Global parameters
[global]
printcap name = cups
security = USER
smb passwd file = /etc/samba/smbpasswd
workgroup = SAMBA
idmap config * : backend = tdb
cups options = raw
[homes]
browseable = No
comment = Home Directories
inherit acls = Yes
read only = No
valid users = %S %D%w%S
[printers]
browseable = No
comment = All Printers
create mask = 0600
path = /var/tmp
printable = Yes
[print$]
comment = Printer Drivers
create mask = 0664
directory mask = 0775
force group = @printadmin
path = /var/lib/samba/drivers
write list = @printadmin root
[linsirs]
create mask = 0777
directory mask = 0777
guest ok = Yes
path = /home
read only = No
至此,所有配置都已完成,按照步骤来可以成功实现目录的映射。
另外了解到CIFS协议也可以实现此功能,有兴趣的同学可以配置实现以下。
参考链接:https://blog.csdn.net/u010480282/article/details/80518836