sshfs: привязать всех пользователей без полномочий root к определенной директории

8

На сервере мне нужен неограниченный доступ по SSH для root, и ограниченный для всех остальных пользователей.

Я хотел бы ограничить всех пользователей без полномочий root:

  • нет входа в SSH
  • разрешено только монтировать /mnt/data/используяsshfs

Я вижу, sshd_configпозволяет использовать Match User, то есть:

Match User john
  ChrootDirectory /mnt/data/
  ForceCommand internal-sftp
  AllowTCPForwarding no
  X11Forwarding no

но как я могу сопоставить всех пользователей, кроме root?

Мартин Вегтер
источник
Я опубликовал ответ, но мне не совсем ясно, относится ли часть «достоверные и / или официальные источники» к общей осуществимости / безопасности вашего решения или к конкретному вопросу «как сопоставить только root».
Фра-сан
@ fra-san - я не уверен, что ты имеешь в виду. Вы подразумеваете, что, хотя это решение работает технически, оно не безопасно?
Мартин Вегтер
Нет, мне просто интересно, ищите ли вы какую-то поддержку конкретной конфигурации со стороны оригинальных авторов или других авторитетных людей. На самом деле, то, что вы делаете, рекомендуется во многих знающих источниках ( один из примеров - Arch Wiki ).
Фра-сан

Ответы:

12

Директива Match в sshфайлах конфигурации России поддерживает отрицание. Но похоже, что отрицание условий в sshd_configнем немного сложно: вы должны написать

Match User="!root,*"

чтобы последующие директивы применялись ко всем пользователям, кроме root.

Вот соответствующая документация: от man sshd_config:

Соответствие Вводит условный блок.
...
Шаблоны соответствия могут состоять из отдельных записей или разделенных запятыми списков и могут использовать подстановочные знаки и операторы отрицания, описанные в разделе PATTERNS в ssh_config (5).

И из man ssh_config:

УЗОРЫ
Шаблон состоит из нуля или более непробельных символов, '*' (подстановочный знак, который соответствует нулю или более символов) или '?' (подстановочный знак, который соответствует ровно одному символу).
...
Обратите внимание, что отрицание совпадения никогда не приведет к положительному результату.
Например, попытка сопоставить «host3» со следующим списком шаблонов не удастся:

from="!host1,!host2"

Решение здесь состоит в том, чтобы включить термин, который приведет к положительному совпадению, такой как подстановочный знак:

from="!host1,!host2,*"

Подсказка, найденная в этой статье на портале для клиентов Red Hat.

Фра-Сан -
источник