Как использовать SFTP в системе, которая требует sudo для корневого доступа и ssh основанной на ключе аутентификации?

Я только что попробовал его, и это на самом деле возможно с небольшой программой Ruby, названной acoc (Произвольный Вывод Команды Colourer). Это может использоваться для прерывания вывода из любой терминальной программы (цветной вывод в top и gcc особенно аккуратно), и colourise их согласно файлу указанных пользователями правил регулярного выражения. Это - немного работы для установки, и необходимо будет определить правила, но это почти столь гибко, как это добирается. Я смог успешно добавить правило к colourise мировым перезаписываемым файлам.

Несколько протестов знать, если Вы спускаетесь по этому маршруту:

  1. Этот проект, кажется, не находится ни в каком распределении - необходимо будет установить вручную от домашней страницы.
  2. Необходимо исправить код домашней страницы проекта для работы с современными версиями Ruby. Можно найти патч здесь (я связался с автором для уведомления его патча, возможно, он обновит свою версию).
  3. В случае ls, прерывание с acoc выбрасывает существующее LS_COLORS, таким образом, необходимо будет предоставить все правила, Вам нужно как регулярные выражения, включая вещи, которые раньше выделялись с LS_COLORS.

28
26.01.2014, 21:01
9 ответов

SFTP является доступом команды к операциям файла с ограничениями из учетной записи, которую Вы используете. Необходимо использовать ssh для, делают больше административных операций, делая невозможное использование sudo и SFTP в то же время. При необходимости в доступе ко всему диску без ограничения с помощью SFTP сделайте это с помощью корневой учетной записи. Так или иначе можно сделать вход в систему с корнем на sftp и ssh в то же время, конечно, с помощью двух различных сессий.

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

Править: Я забыл: можно создать другую учетную запись с тем же эффектом, чем корень, если Вы присваиваете идентификатор пользователя 0, но не имели какой-либо смысл, будучи опасными таким же образом. Мог дать некоторую путаницу, если кто-то пытается войти в систему как корень, но независимо которых, не имел много смысла.

7
27.01.2020, 19:39

Вне того, какой @MartinVonWittich, предложенный в комментариях выше Вас, мог установить специализированную пару ключей SSH только для этого действия и добавить их к пользователю root /root/.ssh/authorized_keys файл, ограничивающий их объем просто единственной командой.

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

Это позволило бы другую систему с соответствующим ключом к этой паре к SFTP в эту систему как корень. У Вас все еще была бы запись этого соединения в Вашем syslog и/или secure.log файлы (принимающий Ваш дистрибутив обеспечивает этот уровень входа).

Примечание: То, кто бы ни получает доступ к серверу в этом методе, имело бы меню blanche доступом, так используйте его мудро. Лучше все еще продолжите читать и объедините эту возможность с chroot и доступом только для чтения, для построения более трудных ограничений и предназначенного доступа к определенным местоположениям как корень.

chroot и только для чтения

Другая техника, которую Вы могли использовать здесь, будет состоять в том, чтобы ограничить соединение SFTP так, чтобы это был chrooted в определенные местоположения как корень, на основе которого использовался ключ SSH. См. мой ответ на это названные Вопросы и ответы U&L: "Ограничьте резервное копирование пароля меньше с SFTP" для получения дополнительной информации.

Можно также управлять sftp-server через его переключатели -R и -d.

 -d start_directory
         specifies an alternate starting directory for users.  The pathname 
         may contain the following tokens that are expanded at runtime: %%
         is replaced by a literal '%', %h is replaced by the home directory
         of the user being authenticated, and %u is replaced by the user‐
         name of that user.  The default is to use the user's home 
         directory.  This option is useful in conjunction with the 
         sshd_config(5) ChrootDirectory option.

 -R      Places this instance of sftp-server into a read-only mode.  
         Attempts to open files for writing, as well as other operations 
         that change the state of the filesystem, will be denied.
7
27.01.2020, 19:39
  • 1
    Хм, но ограничивая команду sftp-server не делает его немного более безопасным, не так ли? Если взломщик получает доступ к этой учетной записи, он может легко дать себе корневую оболочку с помощью SFTP. Таким образом, ограничение команды довольно бесполезно с точки зрения :) –  Martin von Wittich 27.01.2014, 00:47
  • 2
    @MartinvonWittich - нет не в примере я включал. Это было больше для показа потенциала. Не зная точных вариантов использования трудно показать пример реального мира. Предоставление root Доступ SFTP в любой форме является просто проблемой, особенно когда это не chrooted. –  slm♦ 27.01.2014, 01:20

У меня была подобная проблема, в которой я хотел использовать vimdiff для редактирования конфигурационных файлов на группе главным образом подобных хостов с cssh и sudo, и Вы можете адаптировать мое решение своего рабочего процесса.

sudoedit (часть sudo) позволяет Вам использовать любого редактора в качестве обычного пользователя для редактирования файла, для которого у Вас нет разрешения записи, и можно указать редактора с переменной среды. sudoedit копирует файл (файлы), вызывает редактора с названиями копии (копий) и ожидает редактора для выхода, затем копирует измененную копию назад туда, где это было. таким образом, я создал 'редактора', который не редактирует, просто отмечает файл более поздним использованием и ожидает и обертка вокруг vimdiff, который использует тот маркер.

первый файл является ~/.bin/redit

#!/usr/bin/perl -w
use strict;
use warnings;
use Sys::Hostname;
my $file = $ENV{HOME}.'/.var/redit/'.hostname();
sub cmkdir($){
    my $_=shift;
    mkdir $_ unless -d $_;
}
cmkdir $ENV{HOME}.'/.var/';
cmkdir $ENV{HOME}.'/.var/redit/';
foreach (@ARGV){
    my $fh;
    open $fh, '>', $file.'na' or warn;
    print {$fh} $_;
    close $fh;
    symlink $_, $file or die;
    print;
    <STDIN>;
    unlink $file or die;
    unlink $file.'na' or die;
}

вторым является ~/.bin/redit1

#!/usr/bin/perl -w
use strict;
use warnings;
use Sys::Hostname;
my $h=hostname();
@ARGV=qw(host1 host2 host3 host4) unless @ARGV;
print join " ", qw(gvimdiff), $ENV{HOME}.'/.var/redit/'.$h, map {'scp://'.$_.'/.var/redit/'.$_} grep {$_ ne $h} @ARGV;
exec qw(gvimdiff), $ENV{HOME}.'/.var/redit/'.$h, map {'scp://'.$_.'/.var/redit/'.$_} grep {$_ ne $h} @ARGV;

Путем я использую их, я использую cssh, чтобы открыть соединение со всеми четырьмя хостами и затем использовать команду как EDITOR=~/.bin/redit sudoedit /etc/conf/file и затем В другом выполненном окне ~/.bin/redit1, внесите мои изменения, сохраните и выйдите, переключатель назад к cssh и нажмите Enter, чтобы фиксировать изменения и выйти из sudoedit (если я не редактирую больше чем один файл, в этом случае переиздают усовершенствования в следующий файл в списке, и Вы выполняете redit1 снова для следующего файла.)

Начиная с то, что Вы делаете, менее сложно, Вам не нужно redit1 только из-за работы с одним удаленным хостом, можно просто указать sftp редактора host:.var/redit/host или эквивалентный.

1
27.01.2020, 19:39

Вызов подсистемы с sudo работали на меня.

К Ubuntu размещают, например:

sftp -s "sudo /usr/lib/openssh/sftp-server" targethost.fqdn
13
27.01.2020, 19:39

Что я делаю, это использовать SCP вместо (ы) FTP и изменить оболочку на Sudo SU - в Winscp это в Advanced \ SCP \ Shell, но это Только работает с протоколом SCP.

1
27.01.2020, 19:39

Для sftp: если у вас есть доступ sudo к оболочке ssh, вы можете добавить свое имя пользователя в корневую группу пользователей в / etc / group и затем дать этой группе разрешения rx в папки, к которым вы хотите получить доступ.

0
27.01.2020, 19:39

Добавление этой строки в /etc/ssh/sshd _config было для меня исправлением, и прокомментируйте существующую строку подсистемыSubsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server

тогдаsudo systemctl restart sshd

0
27.01.2020, 19:39

Простой подход, который я использовал, заключался в том, чтобы просто использовать sftp и поместить файлы в рабочую область(mkdirновый каталог, где у вас есть разрешения на сервере ), а затем снова использовать ssh, чтобы переместить файлы оттуда в место назначения с помощью sudo cpили sudo mv.

6
27.01.2020, 19:39

Конкретный ответ WinSCP и Amazon EC2 Ubuntu:

Для AMI сервера AWS EC2 Ubuntu 18.04 за ноябрь 2019 г. пользователь по умолчанию ubuntuуже настроен на пароль -без sudo. Проверьте /etc/sudoers.d/90-cloud-init-users, который содержит (в моем случае):

# Created by cloud-init v. 19.2-36-g059d049c-0ubuntu1~18.04.1 on Wed, 27 Nov 2019 09:23:42 +0000
# User rules for ubuntu
ubuntu ALL=(ALL) NOPASSWD:ALL

Для WinSCP измените дополнительные настройки сайта на:

sudo /usr/lib/openssh/sftp-server

(должен быть одним из предлагаемых вариантов раскрывающегося списка, на мой взгляд)

enter image description here

2
27.01.2020, 19:39

Теги

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