Дайте полномочия пользователя всем файлам и папкам

#!/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. Используйте без замены команды для получения надлежащего кода возврата.

9
09.05.2012, 01:35
3 ответа

Просто добавление пользователя 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.

6
27.01.2020, 20:07
  • 1
    Хорошо, я следую, я думаю. Добавление, что директива в authorized_keys файл позволит Вам выполнять удаленную команду с правом полномочий суперпользователя? Как я изменил бы команду rsync -e ssh -az backups@domain.com:/home /location/of/local/folder чтобы дать этому команду работать как суперпользователь на удаленной машине? Или это сделает это автоматически? Спасибо за внимание и справка. :) –  Thomas Clayson 08.05.2012, 15:01
  • 2
    директива автоматически не позволяет Вам выполнять команду как суперпользователю. Когда тот определенный ключ используется для аутентификации, он ограничивает пользователя ТОЛЬКО указанной командой. Полномочия суперпользователя прибывают из "sudo". Технически, Вы могли поместить свою целую команду "rsync" в authorized_keys файл и просто инициировать соединение SSH от резервного хоста. Целый процесс затем запустился бы автоматически после того, как аутентификация завершается. Я запустил бы соединение с чего-то как "ssh backups@remotehost sudo rsync" –  George M 08.05.2012, 15:10
  • 3
    Действительно требуется немного для переноса мозга, но довольно здорово, когда это наконец нажимает, и Вы понимаете то, что можно сделать. –  George M 08.05.2012, 15:11

Одна опция состоит в том, чтобы выполнить rsync сервер в удаленной системе.

В основном создайте rsync.conf с uid=root затем используйте rsync -az rsync://domain.com.

См. http://pastebin.com/5hQx1mRV для примера, который кто-то еще записал и Конфигурирование rsync демона для некоторых основ включения сервера в Ubuntu.

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

2
27.01.2020, 20:07
  • 1
    Это смотрит довольно хорошее спасибо. Будет это затем rsync все от /backup/lc папка на удаленном сервере? Сделайте я изменяюсь path бит, чтобы быть /home заставить это работать? –  Thomas Clayson 08.05.2012, 14:15
  • 2
    спасибо за чувака редактирования. Единственная проблема с этим состоит в том, что мы не можем гарантировать статический IP-адрес, где мы, и мы хотим сделать это через крон так, чтобы это просто произошло все время. Если мы "продвигаем" его, мог бы прекратить работать, если наш IP-адрес изменяется.:/ –  Thomas Clayson 08.05.2012, 14:28
  • 3
    @ThomasClayson: это - то, для чего динамический DNS. :) –  Warren Young 08.05.2012, 16:24

Вы могли, возможно, использовать 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.

1
27.01.2020, 20:07
  • 1
    Параллель xargs не ускорит вещи в этом случае, потому что узким местом является ввод-вывод, не ЦП. –  Mikel 08.05.2012, 14:23
  • 2
    Linux использует кэши в памяти прежде, чем передать изменения в диске, таким образом, это действительно чувствует себя быстрее с пользовательской точки зрения. И даже маленький HDD ноутбука мог обработать загрузку установки нескольких ACL в параллелях. It не так много ввода-вывода. Попробуйте его :) –  Huygens 08.05.2012, 14:28
  • 3
    я только что прочитал здесь superuser.com/a/422954/53206, который Вы могли просто использовать: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home :) намного более простой! А-ч –  Huygens 10.05.2012, 19:45

Теги

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