Я пытаюсь настроить приемник scp, который позволяет избранным пользователям на основе ключей ssh передавать файлы scp на конкретный сервер в качестве пользователя, отличного от них. Это сделано для удовлетворения ограничений доступа со стороны корпоративных деятелей. [8 ^) Окончательная установка будет включать пользовательский файл .ssh / config, имеющий такую запись:
Host ssh-server
HostName=my-ssh-server
User=receiver
Их команда scp будет выглядеть просто так:
scp /tmp/file.txt ssh-server:/some/dir/file.txt
Я ответил на несколько вопросов о настройке umask для scp, sftp и ssh, но я обнаружил, что при создании каталогов umask игнорируется и для разрешений созданных каталогов и подкаталогов. Однако права доступа к файлам верны.
Один пример вопроса, которому я следовал при настройке.
Вот что я сделал:
1: В ~ / .ssh / authorized_keys получателя добавлено следующее:
command="/home/receiver/bin/bash_scp_run" ssh-rsa AAA ... My SSH Key
2: Написал упомянутый выше сценарий, который устанавливает umask равным 027 и записывает в файл tmp, что он был выполнен. Я также тестировал без этого скрипта, и результаты не показали, что установлена umask 027. Фактически оказалось, что umask по умолчанию в этой системе был 002.
#! /bin/bash
echo "Entering ~/bin/bash_scp_run" >> /tmp/scp_log.txt
umask 027
$SSH_ORIGINAL_COMMAND
3: Выполнить множество тестов, включая: (Предположим, что все файлы и каталоги локально имеют perms 777, поэтому umask должен быть единственным ограничивающим фактором.)
3.1: scp /tmp/file.txt ssh-server:/some/dir/file.txt
Результат: /some/dir/file.txt, как и ожидалось, имеет разрешения 750.
3.2: scp -r /tmp/dir-with-subdirs ssh-server:/some/dir/top-dir
Результат: / some / dir / top-dir имеет разрешения 777, чего не ожидалось. Также / some / dir / top-dir / subdir имеет разрешения 777, что также не ожидается! Однако файлы на любом уровне имеют разрешения 750, что ожидается.
Во всех случаях файл /tmp/scp_log.txt показал, что маска umask была успешно установлена.
Из результатов в 3.2 видно, что umask не соблюдается, когда scp создает каталоги, но соблюдается при создании файлов! Судя по моему долгому опыту работы с UNIX / Linux, umask должен работать не так. Это похоже на ошибку scp.
Я думаю, что scp
переключатель, который вы ищете, - "-p".
из man scp
:
-p Preserves modification times, access times, and modes from the original file.
Итак, ваша команда будет выглядеть так:
scp -pr /tmp/dir-with-subdirs ssh-server:/some/dir/top-dir
Я также думаю, вам следует подумать об использовании rsync
вместо того scp
поскольку он проверяет целостность передаваемых файлов, а также имеет переключатель «-p», который сохраняет права доступа к файлам исходного местоположения.
Обычно я использую:
rsync -avzp /src/dir /trg/dir
Перейдите по этой ссылке, чтобы получить хорошее объяснение о каждом переключателе, а также это хороший сайт для добавления в закладки: https://www.explainshell.com/explain?cmd=rsync+-avzp+%2Ftmp%2Fsomedir+%2Fnew%2Flocation
Редактировать # 1:
В этом случае я предлагаю вам добавить команду umask к соответствующему пользователю .bash_profile
(или любой другой сценарий запуска оболочки) на удаленном компьютере, потому что, насколько мне известно, scp также запускает сценарии rc пользователя, когда он используется.
Еще одна вещь, которую вы можете сделать, которая повлияет на всех пользователей на машине (если она не настроена более сложным образом), - это использовать модуль pam pam_umask.so
.
Файл, в котором он должен быть настроен, будет:
/etc/pam.d/sshd
Если вы хотите ограничить это поведение сессиями ssh, вы должны добавить такую строку:
session optional pam_umask.so umask=0007