Why are files in a smbfs mounted share created with executable bit set?

NFS was invented in the Unix world and so understands traditional Unix permissions out of the box. (The ACL of modern unix systems are another matter, but recent implementations of NFS should cope with them.)

Samba was invented in the IBM/Microsoft PC world, to exchange files with systems that had no permissions beyond read-only/read-write. It is now native to Windows. By default, Samba does not transmit Unix permissions. Depending on the configuration, either all files are marked executable (which is annoying) or all files (except directories) are marked non-executable (which is annoying).

There are various extensions to the Samba/CIFS protocol that make it more suited for Unix use. Try enabling Unix extensions in the server configuration:

[global]
unix extensions = yes

This sounds like your issue: Copied files gain execute bit on Samba/CIFS.

excerpt

After copying a file with rw-r----- on a CIFS-mounted volume, the copy gets rwxr-----. So it's gaining the execute bit:

Further down the page, setting map archive = no in /etc/samba/smb.conf:

excerpt

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

You can find out why this is happening from the following explanation on the Samba web site under the File Permissions and Attributes on MS-DOS and Unix section:

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

It has to do with mapping the System, Hidden and Archive bits for an MS-DOS filesystem.

An MS-DOS filesystem doesn't make use of executable bits so the three executable bits on the Unix filesystem are reused to represent the System, Hidden and Archive bits for the MS-DOS filesystem.

So when you view the file permissions using ls -l in Unix, you're viewing the file permissions suitable for MS-DOS (or Windows) keeping in mind that the three executable bits in Unix represent the System, Hidden and Archive bits for MS-DOS.

In smb.conf, however, you can turn this mapping off for a share with:

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

and force the mode on creation of files with:

force create mode = 0660