Создайте маленькие рекордные файлы из большой группы рекордного файла

Вопрос № 1

Мой вопрос, как я ограничиваю команду просто этой передачей SFTP в открытом ключе, который сгенерирован?

Существует 2 метода для того, чтобы сделать это.

1. - Ограничивающий через sshd

Этот метод включает установку функции SFTP в Вашем демоне SSH, sshd. Этим управляют через /etc/ssh/sshd_config конфигурационный файл.Примечание: Это ограничит пользователя, backup только быть позволенным SFTP в сервер.

# /etc/ssh/sshd_config

Subsystem       sftp    internal-sftp

## You want to put only certain users (i.e users who belongs to sftpusers 
## group) in the chroot jail environment. Add the following lines at the end 
## of /etc/ssh/sshd_config

Match User backup
  ForceCommand internal-sftp

2. - Ограничивающий через authorized_keys

Этот метод не включает изменений в sshd_config файл. Можно ограничить пользователя + ключ SSH к единственной команде через command= функция, которую Вы уже упомянули в своем вопросе. Прием находится, в какую команду Вы включаете. Можно поместить сервер SFTP в это command= строка, которая имеет тот же эффект как установка сервера SFTP в Вашем sshd_config файл.

# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host

Примечание: если у пользователя есть доступ для записи к ~/.ssh/authorized_keys, они могут считать и/или изменить его. Например, они могли загрузить его, отредактировать его и повторно загрузить его, сняв commmand=..., предоставление ему освобожденный доступ команды, включая оболочку. Если у пользователя есть доступ для записи к ~/.ssh, они могли также просто удалить связь и воссоздать файл, или chmod это к доступу для записи. Много возможных решений существуют, такие как помещение ~/.ssh/authorized_keys подпиливает в месте non-user-writable, такой как с:

Match Group sftponly
    AuthorizedKeysFile      /etc/ssh/authorized_keys/%u

Вопрос № 2

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

Это - более хитрое но выполнимое использование from= функция в authorized_keys файл также. Здесь мы ограничиваем доступ только от хоста, somehost.dyndns.org.

от = "somehost.dyndns.org", управляйте = "/usr/libexec/openssh/sftp-server", без перенаправления портов, no-X11-forwarding, no-agent-forwarding, ssh-dss AAAAC8ghi9ldw без имуществ == backup@host

Дополнительные настройки после command= одинаково важны, так как они ограничат использование ключа SSH еще больше.

разбивка функций

  • from='hostname1,hostname2,'' - Ограничивает доступ в указанном IP или шаблонах имени хоста
  • command='command' - Выполняет указанную команду после аутентификации
  • no-pty - Не выделяет имущество (не позволяет интерактивный вход в систему),
  • no-port-forwarding - Не позволяет перенаправление портов
  • no-X11-forwarding - пользователь не сможет удалить дисплей графический интерфейсы пользователя X11
  • no-agent-forwarding - пользователь не сможет передать через этот хост других внутренних узлов

Для избавлений от сообщения о "недостающих известных хостах", можно добавить эту опцию SSH к клиенту, когда это соединяется как так:

$ ssh -o StrictHostKeyChecking=no ....

См. страницу справочника, ssh_config для полного изложения об этом переключателе.

Ограничение оболочки пользователя

Для обоих решений выше Вы, вероятно, захотите заблокировать вниз backup пользователь путем ограничения оболочки этого пользователя в /etc/passwd файл также. Обычно Вы захотите установить его на scponly, но существует другой выбор для этого также. Посмотрите это названные Вопросы и ответы U&L: "Вам нужна оболочка для SCP?" для способов сделать это.

Использование /sbin/nologin может также использоваться, если Вы решили использовать chroot функцию от sshd_config как обрисовано в общих чертах в № 1 выше. Однако, если Вы решили использовать метод, обрисованный в общих чертах в № 2, затем необходимо будет, вероятно, использовать scponly или что-то еще для оболочки пользователя в /etc/passwd.


ПРЕМИЯ - расширяющийся № 2 выше

Если необходимо выставить ряд команд для этого пользователя, можно также сделать это. Создайте сценарий как так, /home/backup/commands.sh:

#!/bin/sh

case $SSH_ORIGINAL_COMMAND in
  "diskspace")
    df -h
    ;;
  "dirlist")
    ls -1
    ;;
  "apache_restart")
    /etc/init.d/apache restart
    ;;
  *)
    echo "Unknown command"
esac

Вы затем устанавливаете authorized_keys файл как так:

command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host

backup пользователь может затем выполнить эти команды как так:

# diskspace
$ ssh -q user@remote_host diskspace
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/dev-root   39G  2.2G   35G   6% /

# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql

Ссылки

2
05.12.2014, 11:51
2 ответа

Теперь, если необходимость основывать имена выходных файлов на содержимом файлов может быть удалена, то coreutils csplit может быть быстрее, чем awk

csplit file '/^Record[|]/' '{*}'

Это создаст набор файлов xx01, xx02 и т.д. и так далее. Вы можете игнорировать файл xx01, так как в вашем случае он будет пустым. Также обратите внимание, что csplit позволяет настроить префикс (xx) и суффикс (01, 02....) части имён выходных файлов

.
2
27.01.2020, 22:00

Используя GNU awk, вы можете попробовать:

gawk -v RS='Record[|]' -F'|' '$1{printf "%s%s", RT, $0 > $1}' file

С Record| в качестве разделителя записей , мы можем легко получить каждую запись. GNU awk RS может быть регулярным выражением (как в данном случае), а RT содержит текст, который соответствовал этому выражению (Record|).

С mawk, RT недоступен, поэтому вместо него можно использовать printf "Record|%s", $0.

2
27.01.2020, 22:00

Теги

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