Используя сервер Ubuntu, мне нужно создать несколько учетных записей пользователей, которые имеют следующие ограничения:
(1) Пользователь может просматривать файлы и управлять ими только в своем домашнем каталоге.
(2) Пользователь может выполнять только команды, относящиеся к rsync и sftp.
Я хочу, чтобы пользователи могли создавать резервные копии файлов с помощью rsync, и я хочу, чтобы они могли извлекать файлы с помощью клиента sftp, такого как FileZilla.
Кроме этого, я не хочу, чтобы пользователи могли просматривать другие файлы в системе или выполнять какие-либо команды, которые могут нарушить работу системы.
Я больше использую Ubuntu Desktop, и у меня очень мало опыта администрирования Linux-сервера. Большинство найденных мной руководств предполагают, что я знаю то, чего не знаю. Так что у меня проблемы с настройкой.
Все, что делает пользователь, требует доступа к большим частям файловой системы. Чтобы доказать это самому себе, выполните следующую команду:
strace -e trace=file /bin/ls/$HOME
Вы увидите, что для отображения содержимого вашего собственного домашнего каталога необходимо открыть и прочитать не менее 40 других файлов, разбросанных по вашей системе. Другие команды, такие как sftp и другие, требуют гораздо более широкого доступа.
Системы Unix разработаны на основе концепции пользователей, имеющих доступ только для чтения к большей части ОС. Тщательно настроив разрешения и группы, вы можете легко запретить им просматривать содержимое каталогов друг друга. С участием pam_apparmor вы сможете ограничить, какие приложения они могут запускать.
РЕДАКТИРОВАТЬ: Я просто перечитал ваши требования. Похоже, они вам не нужны, чтобы иметь возможность войти в полностью интерактивную оболочку. В этом случае вы можете продолжить двумя способами:
aptitude install scponly
. Затем установите оболочку пользователя как «scponly». Не позволяйте этому имени заполнять вас; он также работает с sftp. Если вы хотите заблокировать их еще больше, посмотрите документацию в /usr/local/share/doc/scponly
по поводу настройки "chroot" для каждого пользователя.Если вам нужно разрешить доступ к большему количеству команд, чем только sftp / scp (например, rsync), вам нужно будет развернуть свой собственный валидатор команд и настроить ssh «принудительную команду». Добавьте в свой /etc/ssh/sshd_config
:
Match group sftponly
ForceCommand /usr/local/bin/validate_sftp
Затем напишите /usr/local/bin/validate_sftp
сценарий. Что-то похожее на это:
#!/bin/bash
if [[ $SSH_ORIGINAL_COMMAND = "rsync --server" ]]
then
exec $SSH_ORIGINAL_COMMAND
elif [[ $SSH_ORIGINAL_COMMAND = "/usr/lib/openssh/sftp-server" ]]
then
exec $SSH_ORIGINAL_COMMAND
else
echo "You are only allowed rsync or sftp access to this server."
fi
Добавьте пользователя (ов) в группу «sftponly» (вам, конечно, придется добавить группу), и они будут ограничены командами, разрешенными вашим скриптом.
Я не знаю, может ли это соответствовать вашим требованиям, но, поскольку вы говорите, что это должен быть серверный компьютер, возможно, стоит подумать о том, чтобы решить проблему с другой стороны:
... Просто идея, потому что всегда есть определенный риск безопасности (и это требует управления правами пользователей и файлов) при предоставлении пользователям системной учетной записи - по крайней мере, до тех пор, пока вы не настроите виртуальный сервер для всех.