Я хочу разрешить некоторым доверенным пользователям загружать файлы scp на мой сервер (конкретному пользователю), но я не хочу давать этим пользователям дом, а также вход в систему через ssh.
У меня проблемы с пониманием правильных настроек пользователей / групп, которые я должен создать, чтобы это произошло.
Приведу пример;
Имея:
MyUser@MyServer
MyUser
принадлежит к группе MyGroup
/home/MyUser
SFTPGuy1@OtherBox1
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.