Samba共享服务搭建
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = user #设置认证方式为user认证
passdb backend = smbpasswd
smb passwd file = /etc/samba/smbpasswd
username map = /etc/samba/smbusers
ntlm auth = yes #配置ntlm兼容性(XP无法访问需要开启此项)
load printers = yes
cups options = raw
[public]
comment = public files server
path = /smb #目共享录路径
write list = user,user1 #设置可以写入的用户
valid users = @xues,@user #设置可以访问的组
create mask = 0664
directory mask = 0775
1 passdb backend = smbpasswd 2 smb passwd file = /etc/samba/smbpasswd 3 username map = /etc/samba/smbusers #smb.conf添加一条配置文件, 指定到smbusers这个文件 4 [root@VM ~] useradd -M -s /sbin/nologin xues #添加一个xues系统用户,可以不创建家目录 5 [root@VM ~] smbpasswd -a xues #创建smb账户[smb账户必须是系统账户] 6 [root@VM ~] vi /etc/samba/smbusers #编辑 /etc/samba/smbusers配置文件,给xues用户加几个映射账户 xue1 xue2 xue3 ...,映射到刚才创建的系统用户xues
1,使用凭证文件挂载,避免密码泄露,提高安全性(推荐) mount.cifs -o credentials=/root/.smbpasswd,iocharset=utf8 //10.1.1.2/media/ /mnt/media 创建一个凭证文件,例如/root/.smbpasswd 格式如下 username=<用户名> password=<密码> 修改权限 chmod 600 /root/.smbpasswd
2,也可以交互式挂载,挂载的过程中输入密码
mount.cifs -o iocharset=utf8,username=123 //10.1.1.2/media/ /mnt/media
3,带上密码挂载
mount.cifs -o iocharset=utf8,username=123,password=123 //10.1.1.2/media/ /mnt/media
要在挂载Samba磁盘时隐藏用户名和密码,可以使用credentials
文件来存储凭据,并修改权限以防止其他用户访问。下面是一些步骤来实现此目的:
- 创建一个新文件,用于保存用户名和密码。可以使用以下命令创建一个空的
credentials
文件:
touch ~/.smbcredentials
- 将用户名和密码以以下格式添加到
credentials
文件中:
username=<your_username>
password=<your_password>
确保用你的实际用户名和密码替换<your_username>
和<your_password>
。
- 使用以下命令修改
credentials
文件的权限,仅允许当前用户读取:
chmod 600 ~/.smbcredentials
- 打开用于挂载Samba磁盘的命令中的相关选项。在命令中使用
credentials
选项和指向credentials
文件的路径:
mount -t cifs //<server_address>/<share_name> <mount_point> -o credentials=~/.smbcredentials
其中,<server_address>
是Samba服务器地址,<share_name>
是共享的名称,<mount_point>
是要挂载到的本地目录。
通过这样的方法,用户名和密码将被存储在一个只有当前用户可以读取的文件中,而不会明文出现在挂载命令中,从而实现了隐藏用户名和密码的效果。
[global] workgroup = SAMBA security = user [public] #这个名字是访问smb共享文件夹所看到的名称 path = /mnt/FTP valid users = admin write list = admin hosts allow = 10.10.2.100 #只允许指定IP访问 create mask = 0644 directory mask = 0775
2,创建本地登录用户
[root@vm7 ~]# useradd -M -s /sbin/nologin admin #添加本地账号,禁止创建Home目录,禁止登录控制台 [root@vm7 ~]# smbpasswd -a admin #将admin用户设置为smb账号 New SMB password: #配置admin账号访问smb文件夹的密码 Retype new SMB password: Added user admin.
如果发现windows上访问smb共享创建的文件权限和linux上指定的create mask权限不一致,请进行如下配置
create mode = 0644 force create mode = 0644 directory mode = 0755 force directory mode = 0755
参数的含意:
create mode :这个配置定义新创建文件的属性.samba在新建文件时,会把dos文件的权限映射成对应的unix权限,在映射后所得的权限,会与这个参数所定义的值进行与操作.
force create mode:进行或操作,这样就得到最终linux下的文件权限.
directory mode:这个配置与create mode参数类似,只是它是应用在新创建的目录上.
force directory mode:进行或操作,这样就得到最终linux下的目录权限
如上配置所建的文件的权限都是644,文件夹755
如果XP系统不能访问samba:
从samba 4.5开始,ntlm auth参数默认值由“yes”变为“no”。导致默认情况下使用NTLM级别LAN Manager身份验证的客户端不允许登录Samba服务器,受影响的客户端包括Windows XP、Windows2003等。
解决方法(任选一种都可解决):
1. Samba服务器端smb.conf配置文件中添加“ntlm auth = yes”后重启smb服务。
2. Windows XP客户端修改本地安全设置、安全选项、“网络安全:LAN Manager身份验证级别”的值为“仅发送 NTLMv2响应”。
对没有访问权限的用户隐藏文件夹
1,配置完成以后cp一份配置文件
cp -p /etc/samba/smb.conf /etc/samba/user.smb.conf (user为用户名)
2,编辑user.smb.conf,在需要对该用户隐藏的文件夹配置里加入 browseable = no
[glbal] workgroup = SAMBA security = user # passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw [Movie] browseable = no path = /mnt/Movie valid users = ftpuser,user write list = ftpuser hosts allow = 10.10.2.0/24 create mask = 0750 directory mask = 0750 [FTP] browseable = no path = /mnt/FTP valid users = ftpuser write list = ftpuser hosts allow = 10.10.2.100 create mask = 0750 directory mask = 0750
3,在主目录设置,使独立配置文件生效
[glbal] workgroup = SAMBA security = user # passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw #加入如下两条代码,使其能调用独立配置文件 include = /etc/samba/%U.smb.conf include = /etc/samba/%G.smb.conf
testparm命令
Linux testparm命令用于测试Samba的设置是否正确无误。
[manage@FTP log]$ testparm Load smb config files from /etc/samba/smb.conf Global parameter workgroup found in service section! Global parameter security found in service section! Global parameter printcap name found in service section! Global parameter load printers found in service section! WARNING: No path in service glbal - making it unavailable! NOTE: Service glbal is flagged unavailable. Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions
设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。执行getsebool命令,筛选出所有与Samba服务程序相关的SELinux域策略,根据策略的名称(和经验)选择出正确的策略条目进行开启即可: [root@linuxprobe ~]# getsebool -a | grep samba samba_create_home_dirs --> off samba_domain_controller --> off samba_enable_home_dirs --> off samba_export_all_ro --> off samba_export_all_rw --> off samba_portmapper --> off samba_run_unconfined --> off samba_share_fusefs --> off samba_share_nfs --> off sanlock_use_samba --> off use_samba_home_dirs --> off virt_sandbox_use_samba --> off virt_use_samba --> off [root@linuxprobe ~]# setsebool -P samba_enable_home_dirs on