Відповіді:
Як правило, це погана практика безпеки з причин, які вони зазначили. Однак, завдання вашого завдання, я думаю, полягає в тому, щоб навчити вас, що ви можете мати умовні розділи конфігурації на основі різних критеріїв.
Спосіб для цього - використання Match
умовного блоку *.
Match User bob
Subsystem sftp /bin/false
Дивіться sshd_config(5)
у Match
розділі для отримання додаткової інформації та відповідності на Group
.
* Існує більше ніж один спосіб зробити це.
Це не має ніякого сенсу, це безпека через марну незрозумілість. Будь-який користувач, який зможе отримати 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.
Match Group nosft
Subsystem sftp /bin/false
Я вважаю за краще використовувати групу для цього.
Це корисно в поєднанні з користувачами, які мають обмежені оболонки. Я іноді надаю ssh доступ клієнту, щоб він міг отримати доступ до sql-дампа своєї бази даних, встановивши їх оболонку на сценарій, який скидає їх дані. Вирізати їх із scp також здається розумною ідеєю. Вони не мають доступу до запуску cat
для передачі файлу через ssh.
Directive 'Subsystem' is not allowed within a Match block
Можна включити 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
Ви можете дивитися на scponly, щоб робити зворотне, дозволяти лише scp / sftp, але не мати доступу до оболонки.
Я згоден з вищезгаданим @Nathan, це не має великого сенсу. Якщо ви померли, спробуйте відредагувати файл / etc / ssh / sshd_config та видалити / коментувати наступний рядок:
Підсистема sftp / usr / libexec / openssh / sftp-сервер
не дайте домашнього каталогу для користувача
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.
owner
вихідного доступу. Це передбачає, що ви будете перевірені ручкою червоної команди. Якщо кожен, хто має доступ до вашої системи, завжди дотримується правил і ніколи не має зловмисних намірів, то мій підхід був би важким і надмірно складним.