我家里的服务器使用 rsync 将文件备份到我的 VPS,但我在设置上传文件的组属性时遇到问题。因为 rsync 将数据上传到一个也可以从我的 FTP 用户访问的文件夹,所以我需要它们具有 ftpgroup 组,否则我无法通过 FTP 下载或修改文件。
我的 rsync 看起来像这样:
rsync -rtuvz --chmod=770 --owner --group --chown=user:ftpgroup /var/ftp/[email protected]/files/rsync_backup/ [email protected]:"/var/ftp/[email protected]/files/rsync_backup/"
rsync 工具的 --chown 标志不会改变任何内容,文件始终具有上传文件的用户组。
我尝试通过 SSH 设置组属性,但显然只有 root 用户可以使用 chown 和 chgrp,但我不想编辑 sudoers 文件并授予用户对 chown 的完全访问权限,这显然是一个安全隐患。
有没有办法授予用户仅更改其拥有的文件的组的权限?
答案1
从chown(2)
只有特权进程(Linux:具有 CAP_CHOWN 功能的进程)可以更改文件的所有者。文件的所有者可以将文件的组更改为该所有者所属的任何组
如果user
不是组的一部分ftpgroup
,则user
无法更改组中的文件或目录ftpgroup
。要解决此问题,您可以通过运行添加user
到组中ftpgroup
usermod -a -G ftpgroup user
以 root 身份在服务器上。
或者,如果预计只包含组拥有的文件,那么您可以将所有权更改为并设置目录的位/var/ftp/[email protected]/files/rsync_backup/
ftpgroup
/var/ftp/[email protected]/files/rsync_backup/
ftpgroup
setgid
chown :ftpgroup /var/ftp/[email protected]/files/rsync_backup/
chmod g+s /var/ftp/[email protected]/files/rsync_backup/
目录上的位setgid
会导致该目录中所有新创建的文件都具有该目录的组所有权,与目录类似,但也会setgid
在它们上设置位。如果其中存在任何现有文件和目录,您将必须手动更改所有权并设置目录上的位。/var/ftp/[email protected]/files/rsync_backup/
setgid