У меня есть эта команда для резервного копирования удаленной машины. Проблема в том, что мне нужны права root для чтения и копирования всех файлов. У меня нет root-пользователя, включенного по соображениям безопасности, и я использую sudo
Ubuntu. Нужна ли мне какая-нибудь крутая труба или что-то для этого?
rsync -chavzP --stats user@192.168.1.2:/ /media/backupdisk/myserverbackup/
root
учетную запись в первую очередь.sudo
особенно в сочетании сNOPASSWD
рекомендациями в комментариях, на самом деле не улучшает безопасность вашей машины.Ответы:
Я бы порекомендовал вам просто использовать учетную запись root. Если вы установите его так:
sshd_config
на целевой машинеPermitRootLogin without-password
.ssh-keygen
на машине, которая извлекает резервную копию, для создания закрытого ключа SSH (только если у вас еще нет ключа SSH). Не устанавливайте парольную фразу. Google учебник, если вам нужны детали для этого, должно быть много./root/.ssh/id_rsa.pub
резервной машины к/root/.ssh/authorized_keys
вашей целевой машине.тогда полученная установка должна быть довольно безопасной.
sudo
, особенно в сочетании сNOPASSWD
рекомендациями в комментариях, не имеет никаких преимуществ по сравнению с использованием только учетной записи root. Например, это предложение:по сути, дает
rsyncuser
права root в любом случае. Ты спрашиваешь:Ну просто. С рекомендуемой конфигурацией,
rsyncuser
теперь может работатьrsync
от имени пользователя root даже без запроса пароля.rsync
это очень мощный инструмент для работы с файлами, поэтому теперь уrsyncuser
него есть очень мощный инструмент для работы с файлами с правами root. Поиск способа использовать это занял у меня всего несколько минут (протестировано на Ubuntu 13.04, требуетсяdash
,bash
не работает):Как видите, я создал себе корневую оболочку;
whoami
определяет мою учетную запись как root, я могу создавать файлы/etc
, и я могу читать из/etc/shadow
. Мой эксплойт состоял в том, чтобы установить бит setuid вdash
двоичном файле; это заставляет Linux всегда запускать этот двоичный файл с разрешениями владельца, в данном случае root.Нет, неуклюже работать с учетной записью root в ситуациях, когда это абсолютно уместно, не по уважительным причинам. Это просто еще одна форма программирования грузового культа - вы на самом деле не понимаете концепции, лежащей в основе sudo vs root, вы просто слепо применяете убеждение «root is bad, sudo is good», потому что вы где-то читали это.
С одной стороны, бывают ситуации, когда
sudo
определенно подходящий инструмент для работы. Например, когда вы в интерактивном режиме работаете над графическим рабочим столом Linux, скажем, Ubuntu, тогда необходимость в использованииsudo
вполне подходит в тех редких случаях, когда вам иногда требуется доступ с правами root. Ubuntu преднамеренно имеет отключенную корневую учетную запись и вынуждает вас использовать ееsudo
по умолчанию, чтобы запретить пользователям просто всегда использовать корневую учетную запись для входа в систему. Если пользователь просто хочет использовать, например, веб-браузер, то вход в систему от имени пользователя root будет опасным и, следовательно, отсутствие учетной записи root по умолчанию не позволяет глупым людям делать это.С другой стороны, существуют ситуации, подобные вашей, когда автоматизированному сценарию требуются права суперпользователя для чего-либо, например, для создания резервной копии. Теперь использование
sudo
для обхода корневой учетной записи не только бессмысленно, но и опасно: на первый взглядrsyncuser
выглядит как обычная непривилегированная учетная запись. Но, как я уже объяснил, злоумышленнику будет очень легко получить полный root-доступ, если он уже получилrsyncuser
доступ. По сути, теперь у вас есть дополнительная учетная запись root, которая совсем не похожа на учетную запись root, что не очень хорошо.источник
/root/.ssh/authorized_keys
или даже создать несколько корневых учетных записей с разными домами, чтобы у каждого пользователя была своя оболочка, дом и.ssh/authorized_keys
:)sshd
обычно не регистрируется, какой авторизованный ключ использовался для подключения к учетной записи, поэтому, если вы подключитесь какbob
тогдаsudo
, вы получите лучший контрольный журнал, чем приroot
непосредственном подключенииbob
с помощью ключа.Используйте
--rsync-path
опцию, чтобы заставить удаленнуюrsync
команду работать сsudo
привилегиями. Ваша команда должна быть, например:Если
sudo
вас попросят ввести пароль, вам следует избегать его, либо используяNOPASSWD
привилегию с удаленной учетной записью пользователя (бессмысленно для root, может иметь смысл в других случаях использования), либо если вы не хотите этого делать:Убедитесь, что опция
tty_tickets
отключена для пользователя, которого вы используете, запустив, например,sudo visudo -f /etc/sudoers.d/local-rsync
и введя:Убедитесь, что эта опция
requiretty
отключена для пользователя, которого вы используете - по умолчанию она может быть отключена. Метод такой же, как и выше.Заполните
sudo
пароль на удаленной машине, запустив, например,ssh -t user@192.168.1.2 sudo
источник
sudo
пароль, а неssh
парольsudo /usr/bin/rsync
без запроса пароля; проверьте,man sudoers
как это сделать; Вы можете создать дополнительного резервного пользователя для этого.sudo /usr/bin/rsync
запуск без указания пароля, добавьте в/etc/sudoers
файл следующее:rsyncuser ALL= NOPASSWD:/usr/bin/rsync
Это позволит пользователю rsyncuser (как уже упоминалось выше, лучше создать отдельного пользователя резервной копии) с нужным именем пользователя.rsync
сути всегда имеет права root; вероятно, очень легко получить полноценную корневую оболочку в этом аккаунте. Я думаю, что лучше всего использовать реальную учетную запись root.echo "password" | something
я на самом деле никогда не использовал это, и согласен с проблемами безопасности, связанными с разрешением sudoless выполнения rsync (также здесь не предлагается), плохой. Чтоtty_tickets
я на самом деле понятия не имею, кажется необходимым и проблемой безопасности. Это будет работать безопасно, ничего не настраивая, просто запустив sodo в ssh и затем выполнив команду, верно? Но так как я задал этот вопрос в целях написания сценариев, я полностью согласен с тем, что ssh без ключа на основе ключей является безопасным и правильным. Вместо этого я принял ответ Мартинса.Одним из простых способов сделать это является использование графической
ssh-askpass
программы сsudo
этим, что позволяет обойти тот факт, чтоsudo
он не подключен к терминалу и позволяет безопасно вводить пароль:Конечно,
ssh-askpass
программа должна быть установлена в указанном месте, и вы должны запустить сеанс X на компьютере, на котором вы работаете. В программе есть несколько вариантов,ssh-askpass
которые также должны работать (версии Gnome / KDE). Также графическаяsudo
замена программы, какgksu
илиkdesudo
должно также работать.источник
rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .
не работаетrsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]
, О, Ubuntu отправляет gnome-ssh-askpass, но это/usr/bin/ssh-askpass
вместо/usr/lib/ssh/x11...
. Так что сработало :)ssh-askpass
. Мне просто нужно выяснить значение-chavzPe
, было бы здорово изложить это как длинные варианты.xeyes
используя SSH.Если у вашего пользователя уже есть привилегии sudo, которые защищены паролем, я бы оставил их как есть и добавил только раздел для использования rsync без пароля:
источник
Я столкнулся с этой проблемой сегодня и решил ее без необходимости изменения файлов конфигурации или предоставления полномочий на уровне root для учетных записей пользователей. Моя особая установка состояла в том, что пользователь
A
на машинеfoo
должен был скопировать все пользовательские каталоги сfoo
компьютера на компьютерbar
вbackup
каталоге, которымA
владел пользователь . (ПользовательA
имеет права sudo наfoo
.)Команда, которую я использовал, приведена ниже. Он был вызван пользователем
A
в/home
каталогеfoo
.Это работает Rsync , как Судо так , чтобы все каталоги пользователей на
foo
может быть доступна , но он говорит Rsync использовать SSH к машине доступа сbar
помощью пользовательскихA
учетных данных «s. Мои потребности немного отличались от приведенного выше вопроса, но это позволило мне быстро получить резервную копию всех пользовательских каталогов на конкретной машине, которой я управляю, без вреда для конфигурации системы.источник
-i
опциюssh
. Вы можете использовать,--rsync-path="sudo /usr/bin/rsync"
если у вас есть sudo на машинеbar
. Это тогда делает чтение какroot@foo
и запись какroot@bar
, но передает черезA@foo
->B@bar
. Спасибо!Запуск rsync в качестве демона на целевой машине позволяет вам делать то, что вы хотите.
источник
Мое решение заключается в использовании,
--rsync-path="sudo rsync"
но он запрашивает пароль, обходной путь:источник
$( cat my_password.txt )
который немного лучше, но обычно предпочтительнее настроить разрешения на обоих концах и / или использовать ключи SSH таким образом, чтобы пароли не требовались в CLI