#!/bin/bash
LINE='eval $(perl -I$HOME/foo/lib/perl5 -Mlocal::lib=$HOME/foo)'
if ! grep -qF "$LINE" file.txt ; then echo "$LINE" >> file.txt ; fi
$ (...) возвратит результат команды, не значение errorlevel. Используйте без замены команды для получения надлежащего кода возврата.
Просто добавление пользователя backups
к группе пользователей sudo
автоматически не дает доступ к счету всем файлам в системе. Это дает пользователю разрешение работать sudo
команда.
Так как Вы используете аутентификацию с открытым ключом (по-видимому, без пароля), я приблизился бы к этому с безопасностью и простотой реализации в памяти. Используя ssh
позволяет Вам ограничивать пользователя для выполнения только очень определенных команд. В этом случае можно позволить пользователю backups
выполниться rsync
с полномочиями суперпользователя.
Вы уже выполнили ключевой обмен и проверили, что аутентификация успешна. В authorized_keys
файл на удаленном хосте, который Вы поддерживаете /home
каталог от, можно добавить a command=
директива к ключу, который используется пользователем backups
. Эта директива только позволит той команде быть выполненной, когда тот ключ будет использоваться для аутентификации. Таким образом, первое поле ключа выглядело бы подобным этому:
command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah
Можно пойти еще больше и добавить больше опций к ключу, такой как from=myhost,no-pty,no-X11-forwarding
.
Это должно дать Вам достойную безопасность и не потребовать, чтобы Вы изменили базовые полномочия файловой системы. Необходимо будет, вероятно, играть с командой, которую Вы помещаете в authorized_keys
файл, пока это не работает как Вы, ожидает; может потребоваться немного для обертывания мозга вокруг этого. Команда, указанная в authorized_keys
в основном переопределит rsync
опции Вы передадите от соединяющегося хоста.
Большая хорошая информация в man sshd
. Вы хотите конкретно считать раздел AUTHORIZED_KEYS FORMAT.
Одна опция состоит в том, чтобы выполнить rsync сервер в удаленной системе.
В основном создайте rsync.conf
с uid=root
затем используйте rsync -az rsync://domain.com
.
См. http://pastebin.com/5hQx1mRV для примера, который кто-то еще записал и Конфигурирование rsync демона для некоторых основ включения сервера в Ubuntu.
Обратите внимание, что необходимо рассмотреть безопасность этого. Лучший подход должен, вероятно, сделать попытку удаленной системы к Вашей локальной системе.
/backup/lc
папка на удаленном сервере? Сделайте я изменяюсь path
бит, чтобы быть /home
заставить это работать?
– Thomas Clayson
08.05.2012, 14:15
Вы могли, возможно, использовать ACL, если базовая файловая система поддерживает его.
Необходимо добавить резервное копирование группы в ACL каждого файла и каталога. Но быть добавленными автоматически для недавно созданного файла и каталога, необходимо сначала установить ACL по умолчанию на все существующие каталоги. Таким образом на удаленном сервере:
sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x
Затем Вы должны иметь rx разрешение для всех существующих каталогов и читать для файлов. Можно сделать это с 2 командами (без-d на этот раз)
sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x
Это даст Вам дополнительное разрешение считать файлы в резервное копирование группы, не изменяя существующего пользователя и группу, которые владеют каждым файлом.
Примечание: для ускорения находки |, xargs управляют, чтобы можно было добавить следующую опцию к команде xargs: -P n
с n количество параллельного процесса. Можно установить его на количество CPU, который Вы имеете на своей машине + 1.
sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home
:) намного более простой! А-ч
– Huygens
10.05.2012, 19:45
rsync -e ssh -az backups@domain.com:/home /location/of/local/folder
чтобы дать этому команду работать как суперпользователь на удаленной машине? Или это сделает это автоматически? Спасибо за внимание и справка. :) – Thomas Clayson 08.05.2012, 15:01