Я запускаю сервер, на котором мы предоставляем клиентам учетные данные sftp для доставки файлов различного размера. Для меня важно сохранить время загрузки, и мне, честно говоря, наплевать на время, когда оно было создано или изменено в исходной системе. К сожалению, многие наши клиенты настаивать по использованию rsync -av
загружать свои файлы.
Я уже многое сделал - использовал chroot для пользователей песочницы, запретил доступ по ssh и т. Д., Но это продолжает оставаться головной болью. Есть ли способ запретить rsync или sftp изменять время создания / модификации на стороне сервера?
Я пробовал поискать в Google, но не могу найти правильную комбинацию терминов, чтобы отсеять все статьи / вопросы людей, пытающихся использовать rsync со стороны клиента.
Я бы написал свой путь inotifywait -r -m --csv -e ATTRIB /my/dir
. Это печатает любой файл, как только кто-то изменяет mtime, ctime, разрешения (и другие незначительные stufF), поэтому вы можете просто touch
этот файл в соответствии с вашими требованиями. Это громоздкий и уродливый обходной путь, но не могу придумать ничего более простого для общего случая.
Ваше требование к обновлению mtime
нестандартный; это нормально с ctime
. Обычно вы позволяете людям вернуться назад с mtime
свободно, так что он может хранить дату, когда содержимое файла было осмысленно обновлено. Время, когда что-то изменилось в файле (например, изменилось mtime, изменились разрешения, был создан файл и т. Д.), Проверяется с помощью ctime
; видеть stat /my/file
или ls -lc
или найдите последнюю с помощью find . -cmin -60
Файл authorized_keys на стороне сервера может содержать аргумент «COMMAND =», который означает: «Если кто-то использовал этот ключ, игнорируйте команду, которая была бы выполнена на сервере, и вместо этого выполните эту команду». Этой команде даются все флаги и параметры, которые получила бы команда по умолчанию. Вы можете предоставить команду, которая удаляет ненужные флаги, а затем запускает ожидаемую команду. Статья о чем-то подобном здесь: https://cybermashup.com/2013/05/14/restrict-ssh-logins-to-a-single-command/
Проблема с этим ответом заключается в том, что я не уверен, передается ли флаг «-t» таким образом или в протоколе RSYNC.