Как разрешить некоторым пользователям SFTP также доступ по SSH?

Как разрешить некоторым пользователям SFTP также доступ по SSH?

Я развертываю SFTP-сервер для команды, но некоторым из этих пользователей также требуется доступ по SSH для администрирования сервера.

PAM — это sssd с нашим AD. Поэтому я не могу создать отдельных локальных пользователей для использования их для SSH или создать отдельные учетные записи AD только для доступа по SSH.

На данный момент у меня это:

Match group server_ftp-only
ChrootDirectory /shared
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Если я удалю ForceCommand internal-sftp, это позволит пользователям использовать как SFTP, так и SSH, но я не хочу, чтобы все пользователи использовали SFTP, а только несколько пользователей.

Я попробовал добавить это:

Match group server_admins
AllowUsers *

Но это не работает. Похоже, что исходная группа Match переопределяет эту вторую группу Match.

Одним из возможных решений было бы удалить пользователей SSH из группы безопасности server_ftp-only и перевести их в группу server_admins, а затем создать группу соответствия server_admins без ForceCommand internal-sftp, но группа server_ftp-only заполнена командными группами (Team-A > server_ftp-only). Я действительно не могу создать дополнительные группы и отделить этих пользователей от их командных групп.

решение1

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

Так что выне могу сделать:

# /etc/ssh/sshd_config
    # global config ...

    # Enable the internal SFTP server and restrict all users to only SFTP
 
    Subsystem sftp internal-sftp
    ForceCommand internal-sftp
    ChrootDirectory /shared
    
    # ... 
    
    # Override and remove the ForceCommand sftp-only restriction 
    # for users in the server_admins group 
    
    Match group server_admins
        ChrootDirectory none   <=== this does exist
        ForceCommand    none   <=== this does NOT exist

Эту проблему можно решить, применив другую стратегию: не устанавливать значения ForceCommandпо умолчанию, оставить значения по умолчанию более мягкими, а затем создать немного более сложнуюMatchблок сотрицательный шаблончтобы это относилось ко всем ( *),кромечленыserver_adminsи там вы переопределяете значения по умолчанию и добавляете ограничения:

# /etc/ssh/sshd_config
# ... 
# your current global config
#
# Enable the internal sftp server but do not set the ForceCommand 

Subsystem sftp internal-sftp

# ... 

# Everybody except members of the server_admins group are restricted to SFTP

Match group !server_admins,* 
    ForceCommand internal-sftp
    ChrootDirectory /shared
    X11Forwarding no
    AllowTcpForwarding no

И похоже, чтобы соответствовать членамserver_ftp-onlyкоторые также не являются членамиserver_admins

Match group !server_admins,server_ftp-only 
    ForceCommand internal-sftp
    ...

Связанный контент