为什么在smbfs挂载的共享中的文件创建了可执行位?


14

我使用smbmount命令安装了一个samba共享:

$ sudo smbmount \\\\foo\\bar /mnt/bar -o user=tom

当我创建新文件时,将使用为所有者,组和世界设置的可执行位来创建它们。例如

$ touch hello.txt 
$ ls -la hello.txt
-rwxr-xr-x 1 root root 0 Dec  2 12:28 hello.txt

在NFS安装的共享上创建同一文件时,无需设置任何可执行位就可以设置正确的权限。

为什么会这样呢?如何解决?

Answers:


11

NFS是在Unix世界中发明的,因此可以立即了解传统的Unix权限。(现代unix系统的ACL是另一回事,但是NFS的最新实现应该可以解决它们。)

Samba是在IBM / Microsoft PC世界中发明的,用于与没有只读/读写权限的系统交换文件。现在它是Windows的本机。默认情况下,Samba不传输Unix权限。根据配置,所有文件都被标记为可执行(令人讨厌)或所有文件(目录除外)被标记为不可执行(令人讨厌)。

Samba / CIFS协议有各种扩展,使其更适合Unix使用。尝试在服务器配置中启用Unix扩展

[global]
unix extensions = yes

不幸的是,在我公司的Intranet中,我无权配置服务器。也许,最好仅在Linux客户端上使用NFS进行挂载。更大的问题是在Windows客户端上,在该客户端上配置NFS令人头疼。
vivekian2

@ vivekian2确实,如果可以选择的话,我绝对建议在Linux客户端上使用NFS,在Windows客户端上使用SMB。
吉尔(Gilles)'所以

10

这听起来像是您的问题,标题为:复制的文件在Samba / CIFS上获得了执行位

摘抄

在安装了CIFS的卷上用rw-r -----复制文件后,副本将得到rwxr -----。因此,它获得了执行位:

在页面的下方,设置map archive = no/etc/samba/smb.conf

摘抄

  [Global]
  <snip>
  map archive = no
  <snip>

这肯定解决了从Windows保存的文件获得execute标志的问题。谢谢!另一个疯狂的默认值,在过去的20年中,有没有人使用过存档标志?:)
Rennex

4

您可以尝试: mount -t cifs

Google会“挂载CIF”以供使用,这并不难理解,但是您需要使用-o标志来设置选项:

uid =,gid =,rw,noperm,dir_mask = 0775,file_mask = 0664

用户和组是ID的,如数字而不是文本别名。这些选项将确保您具有r / w访问权限,权限是由不装载服务器来控制的,特别是file_mask=0664将确保文件不可执行。最重要的是,您可以将samba共享作为本地目录使用。


在最新版本的samba中,可能必须使用file_mode=0644,dir_mode=0755
Jokester '17

警告:不建议使用CIFS挂载选项'dmask'。请改用“ dir_mode”。警告:不建议使用CIFS挂载选项'fmask'。请改用'file_mode'。
哈比图斯

4

您可以从Samba网站上的以下解释中找出发生这种情况的原因,该解释位于MS-DOS和Unix上的“ 文件许可权和属性”部分:

https://www.samba.org/samba/docs/using_samba/ch08.html

它与映射MS-DOS文件系统的“系统”,“隐藏”和“存档”位有关。

MS-DOS文件系统不使用可执行位,因此Unix文件系统上的三个可执行位被重用以表示MS-DOS文件系统的System,Hid​​den和Archive位。

因此,当您ls -l在Unix中使用来查看文件许可权时,要记住适用于MS-DOS(或Windows)的文件许可权,同时要记住Unix中的三个可执行位代表了MS-DOS的System,Hid​​den和Archive位。

smb.conf但是,您可以在中通过以下方式关闭此映射以共享:

map archive = no
map system = no
map hidden = no

并通过以下方式强制创建文件的模式:

force create mode = 0660

原来是如此简单...谢谢您的解释!
anton_rh

1

我使用QNAP TS439-并具有可执行文件的问题。

尽管我必须在/etc/fstab文件中使用以下内容

//192.168.0.1/audio /media/audio cifs credentials=/home/cheese/.smbcredentials,uid=1000,file_mode=0664,iocharset=utf8  0  0 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.