服务器上的共享定义如下
[share]
path = ...
read only = no
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
valid users = dobiasd
fstab
它通过客户端安装:
//server/share /home/dobiasd/share/ cifs file_mode=0777,dir_mode=0777,iocharset=utf8,username=dobiasd,password=dummy 0 0
客户端可以创建文件和目录。新创建的目录也可以再次删除,但无法在该新目录中创建新文件或目录。为了实现这一点,我首先必须chmod -R 777 .
在服务器上执行 a 操作,因此目录的“drwxrwxr-x”变为“drwxrwxrwx”。
如何让 samba 立即创建新目录,以便可以在其中创建子文件夹?
答案1
那么,这是一个安装在 Linux 机器上的 Samba 共享(使用 Windows 的客户端没有这个问题)?如果我理解得好的话,这可能只是一个umask
问题。如果您umask
在客户端上输入,您可能会得到0002
这意味着当您创建新目录时,其 ACL 是rwxrwxr-x
(rw-rw-r--
针对文件)。
所以,如果你想要所有新创建的文件夹和文件都是全局可写的,您可以设置umask 0000
(以您的.bash_profile
为例)。当然,这可能是一个坏主意......
如果我是您,我会确保所有受信任的用户都是同一组的成员,例如friends
并在您的父共享目录上设置这些权限:
chmod g+rwxs /path/to/share
在这里,角色sgid 位(s
上述),是为了确保在此目录下创建的所有目录和文件都归父目录的组所有者所有。
更清楚的示例(这里是(主要)和组apaul
的成员):users
friends
$ mkdir /tmp/share
$ mkdir /tmp/share/dir1
$ ls -l /tmp/share
drwxrwxr-x 2 apaul users 4096 7 april 21:48 dir1
$ chgrp friends /tmp/share
$ chmod g+rwxs /tmp/share
$ ls -ld /tmp/share
drwxrwsr-x 4 apaul friends 4096 7 april 21:49 share/
$ mkdir /tmp/share/dir2
$ ls -l /tmp/share
drwxrwxr-x 2 apaul users 4096 7 april 21:48 dir1
drwxrwsr-x 2 apaul friends 4096 7 april 21:49 dir2
然后,该组的所有成员都friends
可以在共享下创建子目录(或文件),但这不是全局可写的。