Як відключити sftp для деяких користувачів, але ввімкнути ssh?


12

Мій проект потребує, щоб я відключив sftp для деяких користувачів, але цим користувачам все одно потрібно підключитися через ssh. Хтось знає, як це здійснити?

Я бачив пропозиції змінити файл /etc/ssh/sshd_config, але я не впевнений, що змінити.


Єдиний спосіб, який я міг би уявити, як це зробити, - це використовувати політику MLS у SELinux і обмежити, які саме файли, каталоги та сокети людина може отримувати, виконувати тощо. Я б це робив у поєднанні з сильно обмежувальною політикою iptables, яка використовує модуль ownerвихідного доступу. Це передбачає, що ви будете перевірені ручкою червоної команди. Якщо кожен, хто має доступ до вашої системи, завжди дотримується правил і ніколи не має зловмисних намірів, то мій підхід був би важким і надмірно складним.
Аарон

Відповіді:


7

Як правило, це погана практика безпеки з причин, які вони зазначили. Однак, завдання вашого завдання, я думаю, полягає в тому, щоб навчити вас, що ви можете мати умовні розділи конфігурації на основі різних критеріїв.

Спосіб для цього - використання Matchумовного блоку *.

Match User bob
Subsystem   sftp  /bin/false

Дивіться sshd_config(5)у Matchрозділі для отримання додаткової інформації та відповідності на Group.

* Існує більше ніж один спосіб зробити це.


7
Це не працює для мене. Помилка: Директива "Підсистема" не дозволена в блоці відповідності
chrw

Неправильна відповідь, оскільки підсистема заборонена в блоці Match
mikep

6

Це не має ніякого сенсу, це безпека через марну незрозумілість. Будь-який користувач, який зможе отримати SSH, зможе передати будь-який файл, який він може прочитати через сеанс SSH. Ви також зможете писати, якщо у вас є дозволи на це.

Наприклад, ви можете завантажити / etc / passwd через ssh, використовуючи наступний метод (не потрібен сеанс scp / sftp): ssh foo@bar.com "cat / etc / passwd"> passwdcopy

Якщо ви можете побачити його на екрані через SSH, то ви можете легко скопіювати його як файл.

Єдиний спосіб це має сенс, якщо у вас є спеціальна обмежена оболонка, яка застосовує політику безпеки.

Однак зворотне значення цього має сенс (відключення ssh shell, але увімкнено увімкнення scp / sftp), оскільки ви не в змозі виконувати довільні команди за допомогою sftp / scp, які ви можете через оболонку ssh.

PS: Я припускаю, що оболонка SSH, яку ви надаєте, є стандартною оболонкою, яка дозволяє довільно виконувати. Якщо це не так , то побачиш: Як відключити підсистему SFTP для користувача конкретного або групи? і подивіться на параметр config підсистеми sshd_config.


4
Match Group nosft
Subsystem   sftp  /bin/false

Я вважаю за краще використовувати групу для цього.

Це корисно в поєднанні з користувачами, які мають обмежені оболонки. Я іноді надаю ssh доступ клієнту, щоб він міг отримати доступ до sql-дампа своєї бази даних, встановивши їх оболонку на сценарій, який скидає їх дані. Вирізати їх із scp також здається розумною ідеєю. Вони не мають доступу до запуску catдля передачі файлу через ssh.


3
Directive 'Subsystem' is not allowed within a Match block
Патрик

Неправильна відповідь, оскільки підсистема заборонена в блоці Match
mikep

4

Можна включити SFTP в усьому світі та відключити SFTP лише для деяких користувачів.

Це не працює, якщо ви хочете, щоб ваш користувач отримував регулярний запит на оболонку. Це також не має сенсу, оскільки ви можете обійти більшість матеріалів, якщо у вас є доступ до оболонки. Він буде працювати лише в тому випадку, якщо ви хочете лише надати доступ до певної програми.

Мені особисто це потрібно, тому що я хочу надати доступ до деяких сховищ git через SSH, і мені подобається відключати системи, які не потрібні. У такому випадку SFTP не потрібен.

Узгодження

Щоб відповідати набору користувачів, ви можете налаштувати SSH з Matchключовим словом. З sshd_config(5)посібника:

Match
        ...

        The arguments to Match are one or more criteria-pattern pairs or the
        single token All which matches all criteria.  The available criteria
        are User, Group, Host, LocalAddress, LocalPort, and Address.  The
        match patterns may consist of single entries or comma-separated
        lists and may use the wildcard and negation operators described in
        the PATTERNS section of ssh_config(5).

        ...

Кілька прикладів:

  • Match User eva відповідає користувачеві "eva"
  • Match User stephen,maria відповідає користувачам "stephen" та "maria"
  • Match Group wheel,adams,simpsons відповідає групам "колесо", "Адамс", "Сімпсон"

Якщо ви хочете отримати додаткову інформацію, у sshd_config(5)посібнику є вантажі .

Примусова команда

Зазвичай ви отримуєте оболонку входу користувача під час підключення через SSH, але SSH може бути налаштований для примусової дії певної команди. Команда вимушена для будь-якого з'єднання SSH, включаючи SFTP, і, таким чином, у вас може бути можливість застосувати потрібну команду.

Команду for force можна налаштувати за допомогою ForceCommandключового слова. З sshd_config(5)посібника:

ForceCommand
        Forces the execution of the command specified by ForceCommand,
        ignoring any command supplied by the client and ~/.ssh/rc if
        present.  The command is invoked by using the user's login shell
        with the -c option.  This applies to shell, command, or subsystem
        execution.  It is most useful inside a Match block.  The command
        originally supplied by the client is available in the
        SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of
        “internal-sftp” will force the use of an in-process sftp server that
        requires no support files when used with ChrootDirectory.  The
        default is “none”.

Таким чином, ви можете примусити обмежену команду, яку ви хочете використовувати ForceCommand <your command>. Наприклад:

Match User kim
        ForceCommand echo 'successful login man, congrats'

Приклад

У моєму випадку, коли я хочу надати доступ до git, мені потрібен лише користувач, щоб мати доступ до нього git-shell. Це розділ, який відключає SFTP для моїх користувачів git, а також деякі параметри безпеки:

Match Group git

        # have to do this instead of setting the login shell to `git-shell`,
        # to disable SFTP
        ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"

        # disable stuff we don't need
        AllowAgentForwarding no
        AllowTcpForwarding no
        AllowStreamLocalForwarding no
        PermitOpen none
        PermitTunnel no
        PermitTTY no
        X11Forwarding no

1
Це не відповідає на питання ОП, але мені було дуже корисно досягти того, що я хочу досягти у власному випадку використання
Kidburla

Я не згоден. Питання OP - "Як відключити sftp для деяких користувачів, але тримати ssh увімкненим?", І ця відповідь пояснює один із способів зробити це. Радий, що ти вважаєш це корисним у будь-якому випадку!
aude

За власним визнанням, це "не працює, якщо ви хочете, щоб ваш користувач отримав звичайний запит на оболонку". тож це не відповідає вимозі ОП "підтримувати ssh увімкнено"
Kidburla

Це хороший момент. Я думаю, що я погодився з цим рішенням через "Не має сенсу, оскільки ви можете обійти більшість матеріалів, якщо у вас є доступ до оболонки." Але я не знайшов шляху до того, що саме просить ОП, я згоден зараз.
aude

Ось більш повна версія цієї відповіді: serverfault.com/a/817482
1818

1
Match User bob
MaxSessions 0

Випробуваний та працює над CentOS 6.6. Зауважте, що підсистему заборонено з Match, принаймні, у нових версіях CentOS. На сторінці сторінки для sshd_config перераховані обмежені ключові слова, дозволені за умови відповідності.


0

Ви можете дивитися на scponly, щоб робити зворотне, дозволяти лише scp / sftp, але не мати доступу до оболонки.

Я згоден з вищезгаданим @Nathan, це не має великого сенсу. Якщо ви померли, спробуйте відредагувати файл / etc / ssh / sshd_config та видалити / коментувати наступний рядок:

Підсистема sftp / usr / libexec / openssh / sftp-сервер


0

не дайте домашнього каталогу для користувача

usermod username -d /bin/false

Змініть підсистему sftp / usr / libexec / openssh / sftp-сервер у файлі / etc / ssh / sshd_config на підсистему sftp / dev / null / usr / libexec / openssh / sftp-server

Потім перезавантажте ssh

service ssh restart

це працює для мене, debian.


-2

У ~/authorized_keyналаштуваннях ключа користувача наступним чином:

command="/bin/bash" ssh-rsa AAAAB3Nz.........
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.