Назад | Перейти на главную страницу

Скопируйте файл с хоста Windows на хост Linux через Rsync, затем установите разрешения

Итак, у меня есть SFTP-сервер Windows (SFTPSERVER), который получает файлы (да).

Затем мне нужно отправить эти файлы на сервер Linux (AD аутентифицирован для моего домена) в другом месте в моей организации.

Так что это у меня есть.

rsync -vzO --remove-source-files -e "ssh -i /cygdrive/c/cygwin/home/transferuser/privatekey.pri" /cygdrive/d/SFTPPATH/SFTPUSER/* TRANSFERUSER@DESTINATIONSERVER.DOMAIN.COM:/path/to/files

Проблема в том, что я получаю файлы на сервере Linux, принадлежащем transferuser. Они должны принадлежать processuser и processgroup на конечном сервере. Поскольку эти файлы поступают нерегулярно и должны быть скопированы по завершении загрузки, задание cron с целевого сервера для меня неприемлемо. Я пробовал написать сценарий chown, но пользователь, отправляющий файлы (transferuser), похоже, не имеет соответствующих разрешений. Учитывая, что я не хочу предоставлять этой учетной записи права sudo на конечном сервере, какие у меня здесь варианты?

В твоем /etc/sudoers файл, вы можете дать разрешения для очень конкретной команды. В моих sudoers у меня есть следующее:

%student ALL = /bin/chgrp faculty *, /bin/chmod 2770 *

Вероятно, это слишком общее для того, что вы хотите. Вы, вероятно, хотите чего-то большего:

transferuser ALL = /bin/chown processuser:processgroup /path/to/files/*

Вы не даете карт-блан - пользователю разрешено использовать только один очень специфический класс команд.

Вы также можете предоставить процессу-пользователю эти разрешения и встроить команды в любой сценарий, выполняющий обработку на стороне получателя.

Вот совершенно другой подход, не использующий sudo. Вы можете запускать задание cron один раз в минуту на принимающей машине, чтобы проверять наличие новых файлов и при необходимости загружать их.

В корневом каталоге:

* * * * * find /path/to/files/ -user transferuser -exec chown processuser:processgroup {} \;

Это найдет все файлы, которые в настоящее время принадлежат transferuser и chown их, и будет игнорировать любые файлы, которые уже исправлены. поскольку find уже рекурсивен, вам не нужно беспокоиться о подкаталогах, они будут обработаны. Вопрос только в том, часто ли бывает достаточно одной минуты.