Назад | Перейти на главную страницу

ssh много пользователей в один дом

Я хочу разрешить некоторым доверенным пользователям загружать файлы scp на мой сервер (конкретному пользователю), но я не хочу давать этим пользователям дом, а также вход в систему через ssh.

У меня проблемы с пониманием правильных настроек пользователей / групп, которые я должен создать, чтобы это произошло.

Приведу пример;

Имея:

  1. MyUser@MyServer
  2. MyUser принадлежит к группе MyGroup
  3. Дом MyUser будет, скажем, /home/MyUser
  4. SFTPGuy1@OtherBox1
  5. SFTPGuy2@OtherBox2

Они дают мне свои id_dsa.pubи я добавляю его в свой authorized_keys

Думаю, я бы сделал на своем сервере что-то вроде

useradd -d /home/MyUser -s /bin/false SFTPGuy1 (и то же самое для другого ..)

И напоследок useradd -G MyGroup SFTPGuy1 (опять же, для другого парня)

Тогда я ожидал, что SFTPGuys смогут sftp -o IdentityFile=id_dsa MyServer и быть доставленным в дом MyUser ...

Ну, это не тот случай ... SFTP просто продолжает спрашивать у меня пароль.

Может ли кто-нибудь указать, что мне не хватает?

Большое спасибо,

f.

[РЕДАКТИРОВАТЬ: Месса в StackOverflow меня спросили, доступен ли файл authorized_keys для чтения другим пользователям (членам MyGroup). Интересный момент, это был мой ответ:

Ну, это было не так (это было 700), но затем я изменил разрешения для каталога .ssh и файла аутентификации на 750, но все равно никакого эффекта. Думаю, стоит упомянуть, что мой домашний режиссер ( /home/MyUser) также читается группой; большинство каталогов - 750, а конкретная папка, в которую они помещают файлы, - 770.

Тем не менее, что касается файла аутентификации, я считаю, что аутентификация будет выполняться локальным пользователем на MyServerне так ли? если так, то я не понимаю необходимости, чтобы другие пользователи читали это ... ну ... просто интересно. ]

Перед тем, как попробовать это, прочтите, пожалуйста, до конца.

Вы можете делать то, что хотите, создав 2 пользователя, поместив их в одну группу и предоставив им один и тот же домашний каталог. Затем создайте файл ~ / .ssh / authorized_keys в общем доме с ключами в.

У учетных записей должна быть оболочка, поэтому заблокируйте их, используя usermod -L LOGIN что предотвратит интерактивный вход.

Разрешения для каталога ~ / .ssh должны быть g: r-x, а ~ / .ssh / authorized_keys должны быть g: r--

chmod g+rx ~/.ssh
chmod g+r ~/.ssh/authorized_keys

Затем это вызывает боль у sshd, поскольку он ожидает, что каталог будет не более g: r--, а файл будет g: --- вы получите сообщение об ошибке

Authentication refused: bad ownership or modes for file /home/test/.ssh/authorized_keys

Чтобы эта схема работала, вам нужно сломать встроенные проверки sshd путем редактирования /etc/sshd_config и установка StrictModes no по умолчанию StrictModes yes. Перезапустите sshd, чтобы изменения были известны.

Он должен работать так, как вы хотите. К сожалению, вы сняли меры безопасности с sshd и можете позже внести изменения, которые оставят вашу систему полностью открытой.

Чтобы сделать это более безопасно, не вносите никаких изменений выше.

Создайте 2 учетные записи пользователей в одной группе и настройте их ключи ~ / .ssh / authorised_keys. Создайте ссылку из каждого домашнего каталога на место, куда вы хотите, чтобы они поместили данные.

ln -s -n /path/to/stuff content

Заблокируйте права доступа к домашнему каталогу, чтобы пользователи не писали в них.

Остановить интерактивный вход учетных записей в систему

usermod -L LOGIN

Измените разрешения на / path / to / stuff, чтобы разрешить групповой доступ.

Ответ на этот вопрос - Как я могу создать учетную запись пользователя, которая разрешает загрузку только через sftp? - рекомендует пакет под названием scponly - Я никогда не использовал его, но похоже, что он может делать то, что вы хотите.

Похоже, вы хотите предоставить доступ к идентификатору пользователя, который действует как Dropbox для файлов. Вы можете ограничить действия пользователей в файле авторизованных ключей.

Поскольку вы хотите, чтобы они подключались только к этому идентификатору пользователя на сервере, вы можете предоставить им файл .ssh / config, который сопоставляет их непосредственно с правильным идентификатором пользователя.

У вас могут быть проблемы с sshd (и, следовательно, sftp), которым не нравятся разрешения файла authorized_keys.

Возможно, вам удастся обойтись без установки "StrictModes" в sshd - но на данный момент я не уверен, каковы другие последствия этой настройки ...

Цитирование вопрос 3.14 в FAQ по openssh : -

Обычно это вызвано тем, что права доступа к файлам в $ HOME, $ HOME / .ssh или $ HOME / .ssh / authorized_keys более разрешены, чем позволяет sshd по умолчанию.

В этом случае ее можно решить, выполнив на сервере следующее.

$ chmod go-w $ HOME $ HOME / .ssh $ chmod 600 $ HOME / .ssh / authorized_keys $ chown whoami $ HOME / .ssh / authorized_keys

Если это невозможно по какой-либо причине, альтернативой является установка StrictModes no в sshd_config, однако это не рекомендуется.

Надеюсь, это поможет.

может помочь проверка файлов журнала. Пожалуйста, введите следующее после "неудачного" входа в систему

tail -n 50 /var/log/secure

и опубликуйте вывод

Мог этот быть вариантом? Я не уверен, что правильно понимаю вашу проблему, но я почти уверен, что вы не можете использовать SFTP, если у вашего пользователя есть / bin / false shell.

Я думаю, что наиболее прямой путь для вас - предоставить каждому пользователю учетную запись, но настроить ее с помощью rssh (ограниченная) оболочка вместо обычной оболочки, например bash или ksh. Это псевдо-оболочка, используемая с OpenSSH, и предназначена только для таких операций, как scp, sftp. Вы можете прочитать справочную страницу для полного описания. Затем вы можете настроить целевую систему, группы и любые «выпадающие» каталоги так, чтобы они были заблокированы по вашему желанию (например, «одноразовые» группы, chroot jail и т. Д.).

Если просто просмотреть содержимое, кажется, что одним из решений было бы создание и распространение ключей для каждого конкретного контекста. На целевом хосте вы можете установить ограничения на то, что каждый ключ может делать в файле authorized_keys, включая команду. Его можно найти на странице руководства для sshd_config.

Приведенный пример: (извините за форматирование)

Пример файла authorized_keys:

    # Comments allowed at start of line
    ssh-rsa AAAAB3Nza...LiPk== user@example.net
    from="*.sales.example.net,!pc.sales.example.net" ssh-rsa
    AAAAB2...19Q== john@example.net
    command="dump /home",no-pty,no-port-forwarding ssh-dss
    AAAAC3...51R== example.net
    permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-dss
    AAAAB5...21S==
    tunnel="0",command="sh /etc/netstart tun0" ssh-rsa AAAA...==
    jane@example.net

Я не думаю, что есть прямой простой способ сделать это из-за строгих разрешений, которые обеспечивает sshd, но сработает ли это, чтобы настроить их с помощью ssh chroots, все указывающие на одно и то же место? Это также помешало бы им действительно взаимодействовать с системой, если бы они использовали ssh вместо scp / sftp.