Можно ли передать файл в папку (на удаленном сервере), доступную для записи только root (через sudo)?

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

#!/bin/bash
#
f() {
    sleep 1
    echo "f: Hello from f() with args($*)" >&2
    sleep 1
    echo "f: Goodbye from f()" >&2
}

echo "Running f() in the foreground" >&2
f one

echo "Running f() in the background" >&2
f two &

echo "Just waiting" >&2
wait

echo "All done"
exit 0
1
24.03.2017, 19:18
3 ответа

Для rsync существует шаблон, который люди использовали для реализации этого. Большинство установок Linux по умолчанию включают rsync.

rsync -e "ssh -t" --rsync-path="sudo rsync" ...

- https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Automated_Backup#Backup_with_rsync_and_sudo

1
27.01.2020, 23:24

Как насчет того, чтобы вытащить данные, вместо того, чтобы отправлять данные куда-то, что вы не можете легко записать? Или отправка данных в другое место, куда можно записать, а затем что-то в удаленной системе, помещающее данные на место? - возможно, когда приложение откажется от загрузки новых файлов?

Также будьте осторожны, так как некоторые из предложений ослабляют безопасность вашей производственной системы.

0
27.01.2020, 23:24

Существует множество способов решить эту проблему вне SSH. В дополнение к этому вы немного неоднозначны в отношении учетной записи root и среды «sudo».Я предполагаю, что вы имеете в виду, что учетная запись root не разрешает доступ к оболочке (что по умолчанию используется в Ubuntu), и вы должны предоставить пользователям доступ sudo, чтобы иметь возможность предоставлять права администратора. Сама корневая учетная запись все еще существует (uid/gid 0).

Придерживайтесь SSH и sudo

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

Надежно скопируйте файл во временное место на удаленном сервере.

scp -p xfer_file jschaeffer@aiur:/tmp

Теперь подключитесь к серверу по SSH и скопируйте или переместите его на постоянное место.

ssh -t jschaeffer@aiur: sudo cp /tmp/xfer_file /perm

Ключевым выводом здесь является -t для ssh. Со страницы руководства.

  -t Принудительное выделение псевдотерминала. Это может быть использовано для выполнения произвольных экранных программ на
удаленная машина, которая может быть очень полезна, например. при реализации сервисов меню. Несколько параметров -t
принудительное выделение tty, даже если ssh не имеет локального tty.
 

Не запрашивать пароль вообще

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

Разрешение аутентификации без пароля для root для пользователей без полномочий root.

Альтернативой этому подходу может быть использование открытых ключей. Вы можете предоставить пользователям доступ к другой учетной записи с помощью открытых ключей. Это также имеет свои последствия для безопасности.Вы предоставляете пользователям полный root-доступ к ящику (об этом немного ниже).

jschaeffer@defiler:~# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/jschaeffer/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /jschaeffer/.ssh/id_rsa.
Your public key has been saved in /jschaeffer/.ssh/id_rsa.pub.

Затем скопируйте открытый ключ на удаленный сервер (убедитесь, что вы копируете открытый ключ, а не закрытый). Поскольку все обсуждение касается копирования файлов на сервер, который не разрешает прямой доступ root, я не буду показывать команды ssh-copy-id или scp, которые подключаются к учетной записи root. В любом случае вам нужно найти способ передать ключ в ~root/.ssh/authorized_keys. Можно использовать описанную выше стратегию или скопировать на флэш-накопитель или каким-либо другим способом (rsync, ftp и т. д.)

Учетная запись root должна разрешать аутентификацию без пароля на сервере. Убедитесь, что настройки в /etc/ssh/sshd_config установлены правильно

# Authentication:
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes

. Затем просто скопируйте файл непосредственно в учетную запись root.

scp -p xfer_file root@aiur:/perm_location

Вы можете ограничить то, что пользователи могут фактически делать, когда они используют ssh, добавив параметры в файл author_keys.

Другие параметры.

Конечно, есть много других параметров, которые я перечислю, но не буду вдаваться в подробности:

  • Использовать Керберос. Kerberos — это целый протокол, разработанный для обеспечения безопасности. в незащищенных сетях. Это, конечно, требует целой среды, содержание, оборудование и т. д., вероятно, не то, что вы ищете. SSH интегрируется с Kerbero или вы можете использовать его замен Kerberos незащищенной передачи.
  • Скопируйте файл во временное место на сервере и запустите cron. задание, которое запускается от имени пользователя root на удаленном сервере, собирает файлы на этом каталог и перенесите их в постоянное место
  • Rsync файла
  • Поместите файл в общедоступное место (например, ftp, sftp, http), которое обе серверы имеют доступ.
  • Повторно активируйте учетную запись root.
2
27.01.2020, 23:24

Теги

Похожие вопросы