我在一台 Ubuntu 22.04 机器上运行 samba,因此我可以与另一台 Ubuntu 22.04 客户端机器共享一个特定目录。主机上的这个目录中没有文件。
主机上的 Samba 配置如下:
sudo nano /etc/samba/smb.conf
[share_name]
browseable = yes
read only = no
hosts allow = 192.168.0.0/16
path = /tank/mail
create mask = 0775
force create mode = 0775
force directory mode = 2775
在Ubuntu客户端上我创建了一个新目录,如下所示:
sudo chown -R 5000:5000 /opt/vmail-data
sudo chmod 0775 /opt/vmail-data
然后创建持久的 samba 共享:
sudo nano /etc/fstab
//host_ip/share_name /opt/vmail-data cifs credentials=.smbpaswd,_netdev,file_mode=0644,dir_mode=0755,rw 0 0
sudo mount /opt/vmail-data 目录挂载后。
然后我在这个目录上创建了一个测试文件和测试目录:
root:/opt/vmail-data# mkdir testdir
root:/opt/vmail-data# ls -la
total 5
drwxr-xr-x 2 root root 0 Oct 16 18:23 .
drwxr-xr-x 5 root root 4096 Oct 13 09:33 ..
drwxr-xr-x 2 root root 0 Oct 16 18:23 testdir
-rw-r--r-- 1 root root 0 Oct 16 18:23 testfile
问题是,当我将另一个客户端目录复制或 rsync 到此客户端 samba 共享(在同一台客户端机器上)时,所有权和权限会发生如下变化:
客户端的源(原始)目录:
# ls -la
total 52
drwx------ 10 5000 5000 4096 Oct 13 10:33 .
drwx------ 3 5000 5000 4096 Oct 13 10:25 ..
drwx------ 5 5000 5000 4096 Oct 13 09:45 .Archive
drwx------ 2 5000 5000 4096 Oct 13 10:33 cur
-rw------- 1 5000 5000 0 Oct 13 09:32 dovecot-acl-list
-rw------- 1 5000 5000 608 Oct 13 10:25 dovecot-uidlist
-rw------- 1 5000 5000 8 Oct 13 09:45 dovecot-uidvalidity
-r--r--r-- 1 5000 5000 0 Oct 13 09:32 dovecot-uidvalidity.63480569
drwx------ 5 5000 5000 4096 Oct 13 09:45 .Drafts
drwx------ 5 5000 5000 4096 Oct 13 09:45 .Junk
drwx------ 2 5000 5000 4096 Oct 13 10:33 new
drwx------ 5 5000 5000 4096 Oct 16 16:46 .Sent
-rw------- 1 5000 5000 36 Oct 13 09:45 subscriptions
drwx------ 2 5000 5000 4096 Oct 13 10:25 tmp
drwx------ 5 5000 5000 4096 Oct 13 10:04 .Trash
如果我尝试上述任何命令,结果都是相同的:
mv /path_to_source /opt/vmail-data
或者
cp -a /path_to_source /opt/vmail-data
或者
rsync -avr /path_to_source /opt/vmail-data
AQter 这些命令中的任何结果在目标路径上都是相同的:
ls -la
total 11
drwxr-xr-x 2 root root 0 Oct 16 18:22 .
drwxr-xr-x 2 root root 0 Oct 13 10:25 ..
drwxr-xr-x 2 root root 0 Oct 13 09:45 .Archive
drwxr-xr-x 2 root root 0 Oct 13 10:33 cur
-rw-r--r-- 1 root root 0 Oct 13 09:32 dovecot-acl-list
-rw-r--r-- 1 root root 608 Oct 13 10:25 dovecot-uidlist
-rw-r--r-- 1 root root 8 Oct 13 09:45 dovecot-uidvalidity
-r--r--r-- 1 root root 0 Oct 13 09:32 dovecot-uidvalidity.63480569
drwxr-xr-x 2 root root 0 Oct 13 09:45 .Drafts
drwxr-xr-x 2 root root 0 Oct 13 09:45 .Junk
drwxr-xr-x 2 root root 0 Oct 13 10:33 new
drwxr-xr-x 2 root root 0 Oct 17 07:15 .Sent
-rw-r--r-- 1 root root 36 Oct 13 09:45 subscriptions
drwxr-xr-x 2 root root 0 Oct 13 10:25 tmp
drwxr-xr-x 2 root root 0 Oct 17 06:47 .Trash
据我所知,这些命令应该将所有权和权限从原始源目录保留到目标目录,但事实并非如此。移动的文件归 root:root 所有,而不是 5000:5000 所有,而且权限也不相同。
如果我uid=5000,gid=5000,forceuid,forcegid
向 fstab 添加挂载选项,则文件将以 5000:5000 作为所有者创建,但这不是我预期的行为。目前,原始目录中的文件归 5000:5000 所有,但将来这种情况可能会改变。无论如何,所有权都应保留。
此外,无论如何权限都不会保持同步。我遗漏了什么?