昨天下午w老师找我,说现在实验室的文件服务器(内网IP为xx.xx.xx.16,所以简称16)上面有一个文件夹需要设置访问权限,只有指定项目组的人能访问。于是乎昨天晚上在许大牛的协助下设置了半天,查了手册,试了好多方法,均告失败。今天上午继续折腾,通过查看samba的日志文件发现了问题所在,终于搞定了。

1. 问题背景

我们实验室的文件服务器装的是Ubuntu Server,它只负责存放文件,而把用户名和密码的验证工作交给另一台装有Windows Server 2003的服务器来做。这就给这次的任务造成了好多困难,因为手册上查到的关于设置访问权限的东东都是直接说,只要在smb.conf配置文件中相应文件夹的配置行添加一行

valid users = user1, @group1

就可以了,可是具体的用户名(或者用户组)到底是16本地的UNIX用户名呢,还是Windows NT域控上的用户名(或者用户组)呢?没人讲。

原始的samba配置文件如下

[global]

security = ads

;        netbios name = SVNSERVER

realm = CGCAD.COM

password server = 192.168.100.4

workgroup = CGCAD

idmap uid = 500-10000000

idmap gid = 500-10000000

winbind separator = +

winbind enum users = yes

winbind enum groups = yes

winbind use default domain = yes

template homedir = /home/%D/%U

template shell = /bin/bash

client use spnego = yes

domain master = no

client ntlmv2 auth = yes

encrypt passwords = true

winbind use default domain = yes

restrict anonymous = 2

[printers]

comment = All Printers

path = /var/spool/samba

guest ok = No

printable = No

use client driver = No

browseable = No

load printers = No

[Software]

comment = Share Data

path = /var/software

read only = Yes

create mask = 0775

directory mask = 0775

browsable = Yes

public = Yes

writeable = No

force create mode = 0775

force directory mode = 0775

force security mode = 0775

guest ok = no

inherit permissions = yes

;       nt acl support = yes

[TestGroup]

comment = Test Group Share Data

path = /var/TestGroup

read only = No

create mask = 0775

directory mask = 0775

browsable = Yes

public = Yes

writeable = Yes

force create mode = 0775

force directory mode = 0775

force security mode = 0775

guest ok = no

inherit permissions = yes

;       nt acl support = yes

[Incoming]

comment = Incoming

path = /var/incoming

read only = No

create mask = 0777

directory mask = 0777

browsable = Yes

public = Yes

writeable = Yes

force create mode = 0777

force directory mode = 0777

force security mode = 0777

guest ok = Yes

inherit permissions = Yes

;       nt acl support = Yes

除了打印机,我们一共有三个文件夹:Inconming,Software,TestGroup,其中Software对一般用户只开放了读权限,没有写权限;三个文件夹都需要用户在域控服务器上验证才能访问。

2. 失败的方法们

假设我们要把test group组的用户成员加入TestGroup文件夹的合法用户列表中,其中,test group组有user1,user2两个用户,他们在NT和UNIX上的用户名一样,用户组的名字则不同,在NT上的叫"test group",而在UNIX上的用户组则叫testgroup。

2.1 直接把valid users = @testgroup加入smb.conf文件中的 [TestGroup] 字段下,结果谁也不能访问这个文件夹了。

2.2 不使用组名,改为一个一个地添加用户: valid users = user1, user2 ,结果同上。

2.3 把NT用户组映射到UNIX用户组上,用 net groupmap modify ntgroup="test group" unixgroup=testgroup 命令(需要root权限),仍然不起作用。

2.4 后来w老师建议用简单的方法来解决,就是放弃samba,改用FTP服务;或者直接把TestGroup文件夹移到域控的NT服务器上,但是被许大牛否决了,因为这样相当于饮鸩止渴,还会带来潜在的安全问题;

3. 成功的方法

后来我想到了查看一下samba的登录日志,看看到底为什么相应的用户名被拒绝登录,于是乎在 smb.conf 中的 [global] 字段下面添加两行debug配置:

[global]

; xxx

debuglevel = 100

log file = /etc/samba/long.%m

其中%m代表客户机的netbios名,你当然也可以换成%u,%I等等,这些samba变量的意义如下:

%S 当前服务名(如果有的话)

%P 当前服务的根目录(如果有的话)

%u 当前服务的用户名(如果有的话)

%U 当前对话的用户名

%H 当前服务的用户的Home目录

%v Samba服务的版本号

%h 运行Samba服务机器的主机名

%m 客户机的NETBIOS名称

%L 服务器的NETBIOS名称

%M 客户机的主机名

%I 客户机的IP

%T 当前日期和时间

接着说,当设置好了debuglevel为最高的100之后,试图登录一下,失败,然后赶紧去看日志,发现samba在匹配用户名的时候用的并不是smb.conf中的原来的名称,而是在之前加了一个“CGCAD+” (注:CGCAD是我们的域名),于是乎本来填上去的 valid users = user1 被samba认为是 CGCAD+user1 ,然后按照这个名字去NT域控的用户名列表里面找,似乎没找到。于是乎我就干脆在smb.conf中也把user1前面加上CGCAD+试试,结果竟然成了!修改后的smb.conf如下:

[global]

security = ads

;        netbios name = SVNSERVER

realm = CGCAD.COM

password server = 192.168.100.4

workgroup = CGCAD

idmap uid = 500-10000000

idmap gid = 500-10000000

winbind separator = +

winbind enum users = yes

winbind enum groups = yes

winbind use default domain = yes

template homedir = /home/%D/%U

template shell = /bin/bash

client use spnego = yes

domain master = no

client ntlmv2 auth = yes

encrypt passwords = true

winbind use default domain = yes

restrict anonymous = 2

[printers]

comment = All Printers

path = /var/spool/samba

guest ok = No

printable = No

use client driver = No

browseable = No

load printers = No

[Software]

comment = Share Data

path = /var/software

read only = Yes

create mask = 0775

directory mask = 0775

browsable = Yes

public = Yes

writeable = No

force create mode = 0775

force directory mode = 0775

force security mode = 0775

guest ok = no

inherit permissions = yes

;       nt acl support = yes

[TestGroup]

comment = Test Group Share Data

path = /var/TestGroup

read only = No

create mask = 0775

directory mask = 0775

browsable = Yes

public = Yes

writeable = Yes

force create mode = 0775

force directory mode = 0775

force security mode = 0775

guest ok = no

inherit permissions = yes

valid users = @CGCAD+"test group"

;nt acl support = yes

[Incoming]

comment = Incoming

path = /var/incoming

read only = No

create mask = 0777

directory mask = 0777

browsable = Yes

public = Yes

writeable = Yes

force create mode = 0777

force directory mode = 0777

force security mode = 0777

guest ok = Yes

inherit permissions = Yes

;       nt acl support = Yes

4. 结论

log file很重要。

samba很强大,但是很难配。

smb服务器权限修改,终于搞定了samba的文件夹访问权限设置相关推荐

  1. 命令行修改文件文件夹访问权限 cacls, 修改hosts内容方法

    背景 日常使用Windows的过程中,hosts(C:\Windows\System32\drivers\etc)文件可能被一些程序串改,因此在网上找到禁止/允许修改hosts文件的bat脚本,但是在 ...

  2. 你必须具有权限才能读取此对象_win10中随心所欲设置文件/文件夹访问权限,可以轻松做到,并不难...

    要访问Windows 10上的任何文件或文件夹,你必须具有相应的权限.遗憾的是,如果你没有编辑某些文件和文件夹的权限,则可能会出现某些问题,这时你必须对该文件夹或文件取得所有权. 要想取得某个文件夹的 ...

  3. 服务器禁止访问文件,服务器文件夹访问权限设置 控制访问权限方法

    在企业局域网中,我们经常需要共享文件供局域网用户访问使用,但是为了保证共享文件的安全,我们也需要设置共享文件的访问权限,防止访问共享文件的用户越权访问共享文件的行为.那么,具体如何实现呢?可以通过以下 ...

  4. 计算机连共享盘被禁止用户,共享文件夹无法访问、设置文件夹访问权限、共享文件夹拒绝访问的解决方法...

    在开启共享文件的局域网中,经常出现共享文件无法访问.共享文件夹拒绝访问的问题,导致大家使用共享文件受到限制,影响工作的开展.这一方面是Windows操作系统自身的共享文件访问功能设计缺陷,另一方面也由 ...

  5. 计算机不能再U盘新建文件夹,如何让你的U盘永不中毒?新建一个文件夹就搞定!-u盘文件夹变成exe...

    由于U盘携带方便,很多人都会用来存储重要文件.音乐或是视频等等.不过在使用过程中,有时候一不小心就会遇到U盘中毒的情况,这也给用户带来了不少困扰.其实与其等到发现U盘中毒之后再去找U盘杀毒工具解决,还 ...

  6. 在linux上备份文件夹在哪里找,Linux 备份 文件夹的权限 然后在其他机器进行恢复...

    Study From https://www.cnblogs.com/chenshoubiao/p/4780987.html 用到的命令 getfacl 和 setfacl 备份 getfacl -R ...

  7. word无法显示图片的问题终于搞定!oh yeah!

    我的word中的图片只显示一个方框,这个问题困扰我有一段时间了,今天终于搞定. 原因如下: Word中不能显示公式 问:在Word 2003中编辑好的公式无法显示,只显示为一个方框,该怎么办? 答:W ...

  8. 终于搞定了小米路由器HD的git了

    2019独角兽企业重金招聘Python工程师标准>>> 终于搞定了小米路由器HD的git了 发表在 晒机评测 2018-12-31 19:19:16 来自PC复制链接手机看帖3885 ...

  9. 一篇搞定 SpringBoot+Mybatis+Shiro 实现多角色权限管理

    初衷:我在网上想找整合springboot+mybatis+shiro并且多角色认证的博客,发现找了好久也没有找到想到的,现在自己会了,就打算写个博客分享出去,希望能帮到你. 原创不易,请点赞支持! ...

最新文章

  1. Ubuntu上五款搜索工具:Albert、Synapse、Utools、Ulauncher、FSearch
  2. SQLAlchemy 几种查询方式总结
  3. OpenCV 凸包Convex Hull
  4. python画车辆轨迹图,在python中绘制轨道轨迹
  5. ( )不是html的布局标签,不要使用的HTML标签(WEB标准网页布局)
  6. 【电脑使用经验】怎么查看无线网络中电脑的IP地址?
  7. python实现二分查找算法_两种方法实现Python二分查找算法
  8. LeetCode-数组-三数之和
  9. 不为失败找理由,只为成功找方法
  10. 代码规范以及单元测试项目
  11. RAX,eax,ax,ah,al 关系
  12. visual studio odbc数据源设计器_商业智能BI应该支持哪些类型的数据源?
  13. 【拓展】一个故事讲完 CPU 的工作原理
  14. 关于动态生成data组件
  15. 【目标检测】Receptive Field Block Net for Accurate and Fast Object Detection论文理解
  16. 编写SQL语句,从Customers中检索所有的顾客名称(cust_name),并按从Z到A的顺序显示结果
  17. 方舟服务器能不能用ce修改器,方舟生存进化CE修改一览表
  18. 仿雷电——飞机大战类游戏Ⅰ
  19. Alfresco 部署 企业文档管理系统
  20. [转载]工科硕士毕业14年,谈谈我的经验教训

热门文章

  1. 说说程序员的核心能力:第一个三年:后台、前端、移动应用,第二个三年呢?
  2. 基于stm32的正点原子Lora模块教程
  3. 求任意半径圆的面积c语言,需要一个输入半径求圆面积的C语言程序
  4. 搭建electron+vue工程以及遇到的问题解决
  5. 如何将微信amr文件转换为mp3文件
  6. C++ 之constexpr、常量表达式与字面值类型关系以及使用常量表达式的原因
  7. 安防天下5、6——视频编码器技术DVS、网络录像机(NVR)技术
  8. 「深度神经网络」(deep neural network)具体是怎样工作的
  9. Oracle 关于Pooled connection request timed out
  10. 黑胶歌曲没权限,还好我会Python,一分钟一个歌单,硬盘有点不够用了~