Я рекомендую вам в першу чергу просто скористатися кореневим обліковим записом. Якщо ви налаштуєте його так:
- Налаштуйте свій
sshd_configна цільовій машині на PermitRootLogin without-password.
- Використовуйте
ssh-keygenна пристрої, який витягує резервну копію, щоб створити приватний ключ SSH (лише якщо у вас ще немає ключа SSH). Не встановлюйте фразу. Підручник Google, якщо для цього вам потрібні деталі, їх повинно бути багато.
- Додайте вміст
/root/.ssh/id_rsa.pubрезервної машини до /root/.ssh/authorized_keysцільової машини.
- Тепер ваша резервна машина має кореневий доступ до цільової машини, без необхідності використовувати автентифікацію пароля.
то отримана установка повинна бути досить безпечною.
sudo, особливо в поєднанні з NOPASSWDрекомендованим у коментарях, не має жодних переваг для безпеки щодо простого використання кореневого акаунта. Наприклад, ця пропозиція:
додайте у /etc/sudoersфайл наступне :rsyncuser ALL= NOPASSWD:/usr/bin/rsync
по суті, дає rsyncuserкореневі дозволи в будь-якому випадку. Ви запитаєте:
@MartinvonWittich Легко отримати повну кореневу оболонку, оскільки rsyncвиконується за допомогою sudo? Пройдіться [м] е [через], що ласка.
Ну, просто. З рекомендованою конфігурацією rsyncuserтепер може працювати rsyncяк root, навіть не запитуючи пароль. rsyncє дуже потужним інструментом для управління файлами, тому тепер rsyncuserмає дуже потужний інструмент для управління файлами з кореневими правами. Пошук способу для цього знадобився мені всього за кілька хвилин (тестований на Ubuntu 13.04, вимагає dash, bashне працював):
martin@martin ~ % sudo rsync --perms --chmod u+s /bin/dash /bin/rootdash
martin@martin ~ % rootdash
# whoami
root
# touch /etc/evil
# tail -n1 /etc/shadow
dnsmasq:*:15942:0:99999:7:::
Як бачите, я створив собі кореневу оболонку; whoamiідентифікує мій обліковий запис як корінь, я можу створювати файли /etc, з яких я можу читати /etc/shadow. Мій експлойт був встановити Setuid біт на dashдвійковий; це змушує Linux завжди виконувати цей двійковий файл з дозволами власника, в цьому випадку root.
Наявність справжнього кореня не є [рекомендується] з вагомих причин. - redanimalwar 15 годин тому
Ні, незграбно працює навколо кореневого облікового запису в ситуаціях, коли цілком доречно використовувати його не з поважних причин. Це просто ще одна форма програмування культового культу - ти насправді не розумієш поняття, що стоїть за кордоном sudo vs root, ти просто сліпо застосовуєш переконання «корінь поганий, судо хороший», бо ти десь це читав.
З одного боку, бувають ситуації, коли sudo, безумовно, є правильним інструментом для роботи. Наприклад, коли ви працюєте в інтерактивному режимі на графічному робочому столі Linux, скажімо, Ubuntu, тоді використання sudoцих функцій прекрасно в тих рідкісних випадках, коли вам іноді потрібен кореневий доступ. У Ubuntu навмисно є вимкнений кореневий обліковий запис і змушує вас використовувати sudoза замовчуванням, щоб користувачі не завжди використовували кореневий обліковий запис для входу. Коли користувач просто хоче використовувати, наприклад, веб-браузер, то вхід у систему як root було б небезпечною справою , а тому відсутність кореневого облікового запису за замовчуванням заважає дурним людям робити це.
З іншого боку, є такі ситуації, як ваша, коли автоматизований сценарій вимагає кореневих дозволів на щось, наприклад, для створення резервної копії. Зараз використовувати sudoдля роботи навколо кореневого облікового запису не тільки безглуздо, але й небезпечно: на перший погляд rsyncuserсхожий на звичайний непривілейований рахунок. Але, як я вже пояснював, зловмиснику було б дуже легко отримати повний кореневий доступ, якби він вже отримав rsyncuserдоступ. Тож по суті, тепер у вас є додатковий кореневий обліковий запис, який зовсім не схожий на кореневий рахунок, що не дуже добре.
rootрахунок в першу чергу.sudo, особливо в поєднанні зNOPASSWDрекомендованим у коментарях, не дуже покращує безпеку вашої машини.