1. ホーム
  2. macos

[解決済み] rootでrsyncを実行中。操作は許可されていません

2022-02-18 02:06:56

質問

世界!?

バックアップスクリプトを実行する rsync をアーカイブし、各ユーザーの /User/user フォルダを共有ドライブに保存しています。という興味深い問題に遭遇しました。 rsync : 現在のユーザーでシェルから "sudo" としてスクリプトを実行すると、他のユーザーのパーミッションを保持することができません。というエラーが出てしまいます。 rsync: chown <path> - operations not permitted(1)

をしなければならないのでしょうか? chown の各ユーザーのフォルダをrootにしてからコマンドを実行するのでしょうか? 使用中のコマンドで質問です。

/usr/bin/rsync -av --human-readable --progress /Users/$name/ --exclude=".*" --exclude="Public" /Backup/$name\ -\ $(date +%m-%d-%y)  --exclude=".*/"

ありがとうございました。

解決方法は?

ターゲットがマウントされたネットワークボリュームにあるためです。あなたが実行している rsync ファイルサーバーに関しては、あなたはそのサーバーで認証されたどのユーザーでもあり、すなわちルートではありません(NFSを使用していない限り、その場合はもっと複雑です)。あなたは通常のユーザーとしてサーバーに認証されているので、サーバー上に作成したすべてのファイルの所有者はその通常のユーザーであり、あなたはそれを変更する権限を持っていないでしょう。

2つの解決策が考えられますね。

  • サーバーで所有権を設定しようとしない。使用方法 rsync -rltgoDv ... の代わりに rsync -av ... . -a は、次のように等価です。 -rlptgoD を削除してください。 -p は、ターゲットファイルの所有権を設定しようとせず、単に現在の (サーバーに認証された) ユーザーとしてすべてを保存することを意味します。

  • 本当に所有権を保持する必要がある場合 (そしてローカルアカウントがサーバー上のものと同じである場合)、ファイル共有の代わりに SSH で rsync を実行し、サーバーに root で SSH 接続してください。次のような感じです。 rsync -av ... root@server:/Backup/$name\ -\ $(date +%m-%d-%y) ...

    サーバーへのルートSSHを許可することは、一般的に悪い考えであることに注意してください。もしこの方法でやりたいなら、SSH 公開鍵/秘密鍵のペアを作って (秘密鍵は暗号化して)、それを認証に使い、パスワードベースの SSH 認証を (少なくとも root については) 拒否するようにサーバを設定します。