WinSCP от Unix до Windows - Сохранение метки времени, владения и разрешений

745
Pr4w

Я переношу несколько папок из окна Unix на сервер Windows и хочу сохранить структуру папок, права доступа, владельца (пользователя и группы) и, в идеале, временные метки исходных файлов.

Из того, что я смог собрать в сети, похоже, что WinSCP справится с этой задачей просто отлично, при условии, что я отключу опцию «возобновить». Я просто хотел проверить, выполнимо ли это, и был ли какой-то другой вариант, о котором я не подумал, прежде чем начать жить?

Есть ли какие-то конкретные настройки, которые мне нужно ввести? Может ли WinSCP сохранить все вышеперечисленное?

Ура, Марк

1
Нет хорошего соответствия между атрибутами файлов в Unix и Windows. Отметки времени доступа и обновления соответствуют, но в файловых системах Windows нет ничего, соответствующего разрешениям группы пользователей-другим, и нет никаких разрешений на чтение или выполнение: только разрешение на запись в Linux соответствует обратному доступу только для чтения в Windows. Возможно, можно использовать списки управления доступом Windows для реализации соответствия с некоторыми атрибутами Linux, но я сомневаюсь, что `WinSCP` делает это. AFH 8 лет назад 1
@AFH Есть ли способ написать это в таком случае? Если я получу список всех файлов / папок, принадлежащих конкретному пользователю, есть ли сценарий, который я мог бы запустить на компьютере Windows, который назначил бы право владения всем файлам из файла .txt или что-то в этом роде? Pr4w 8 лет назад 0
Unix `find` создаст эти списки, но я не использовал Windows ACL в какой-либо степени, поэтому другие должны будут посоветовать, как сопоставить эквивалентные команды` cacls`. Однако обратите внимание, что некоторые разрешения ACL по-прежнему плохо соответствуют, особенно для каталогов, например, доступ к удалению / переименованию реализуется с помощью разрешений для родительского каталога в Linux, но на уровне файлов в Windows. Помните, что в Windows нет разрешения на выполнение: все читаемые файлы являются исполняемыми (при условии, что это имеет смысл, в зависимости от комбинации расширения файла и магического числа в начале). AFH 8 лет назад 0
Жизнь может быть проще в будущем - см. [Здесь] (https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/), и я буду очень интересно посмотреть, будут ли они реализовывать атрибуты файлов или просто сделают все файлы полностью доступными (или недоступными для записи, если они доступны только для чтения) и принадлежат одному пользователю, как в примере, и как это происходит в настоящее время, если вы просматриваете общий ресурс Windows из Linux используя самбу. AFH 8 лет назад 1
@AFH: Это отчасти правда и отчасти полная чушь. Windows NT имеет разрешения «Чтение» и «Выполнение» с первого дня - просто взгляните на те же списки ACL, которые вы _yourself_ упомянули. Разрешение «Выполнить» _действительно для файлов, оно просто _установлено по умолчанию_ (а CreateProcess () не заботится о расширении, это в основном графическая оболочка - вы можете переименовать calc.exe в calc.tmp и успешно запустить это через командную строку). grawity 8 лет назад 0
@AFH: (Биты прав доступа пользователя / группы / других в POSIX являются лишь ограниченной формой ACL - некоторые программы делают вид, что они являются записями ACL POSIX, которые могут быть легко расширены до ACL NTFS ... Хотя вы правы, что WinSCP не не стоит этого делать - но я бы догадался, потому что _user account_ чертовски практически невозможно удобно сопоставить между системами.) grawity 8 лет назад 0
@ Grawity - Конечно, я исправлен: я сказал, что не являюсь экспертом по ACL, хотя я работал с Unix с 80-х годов. Я основывал свой комментарий на разрешениях, которые можно установить с помощью `cacls`, а именно: Чтение, Запись, Изменение, Полное и Нет. Так как же сделать файл читаемым, но не исполняемым, или наоборот для каталога? Я знаю, что .EXE файлы могут быть переименованы в любое другое расширение из-за магического числа, но я не знаю способа выполнить файл пакетного сценария с именем `batch.sh`, поэтому я думаю, что мое резюме (сочетание расширения и магии номер) правильно. AFH 8 лет назад 0
@AFH: Графическое диалоговое окно «Безопасность» в Win2000 + или «icacls» в Win2003 + немного более выразительно - например, «icacls foo / grant fred: (oi) (ci) (r) / grant martin: (rx)». (При экспорте Linux / home через Samba отсутствие + x в файлах .exe очень заметно.) В каталогах значение + x также имеет идентичное значение («Переместить папку / Выполнить файл»), но для некоторых оно по умолчанию игнорируется странные причины - исследование "SeChangeNotifyPrivilege" или "Проверка обхода обхода". grawity 8 лет назад 0
@ Grawity - Спасибо, я не знал о "icacls". Это многое объясняет. AFH 8 лет назад 0

1 ответ на вопрос

1
Martin Prikryl

WinSCP по умолчанию сохраняет временные метки (и вам не нужно отключать «поддержку возобновления»).

WinSCP не может не сохранить права собственности и права доступа. Вряд ли есть способ сделать это автоматически. Во-первых, вам нужно установить отображение 1: 1 для пользователей и групп * nix на пользователей Windows. Только тогда имеет смысл начать сопоставление разрешений * nix с ACL-списками Windows. Я не знаю ни одного инструмента, способного на это.

Если SFTP предоставляет имена пользователей (а не UID), это было бы возможно - но тогда возникает проблема с требованием прав root или администратора для фактического _set_ правильного владельца для недавно загруженных файлов ... grawity 8 лет назад 0