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

Создание ограниченных учетных записей пользователей на сервере Ubuntu

Используя сервер Ubuntu, мне нужно создать несколько учетных записей пользователей, которые имеют следующие ограничения:

(1) Пользователь может просматривать файлы и управлять ими только в своем домашнем каталоге.

(2) Пользователь может выполнять только команды, относящиеся к rsync и sftp.

Я хочу, чтобы пользователи могли создавать резервные копии файлов с помощью rsync, и я хочу, чтобы они могли извлекать файлы с помощью клиента sftp, такого как FileZilla.

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

Я больше использую Ubuntu Desktop, и у меня очень мало опыта администрирования Linux-сервера. Большинство найденных мной руководств предполагают, что я знаю то, чего не знаю. Так что у меня проблемы с настройкой.

Все, что делает пользователь, требует доступа к большим частям файловой системы. Чтобы доказать это самому себе, выполните следующую команду:

strace -e trace=file /bin/ls/$HOME

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

Системы Unix разработаны на основе концепции пользователей, имеющих доступ только для чтения к большей части ОС. Тщательно настроив разрешения и группы, вы можете легко запретить им просматривать содержимое каталогов друг друга. С участием pam_apparmor вы сможете ограничить, какие приложения они могут запускать.

РЕДАКТИРОВАТЬ: Я просто перечитал ваши требования. Похоже, они вам не нужны, чтобы иметь возможность войти в полностью интерактивную оболочку. В этом случае вы можете продолжить двумя способами:

  1. aptitude install scponly. Затем установите оболочку пользователя как «scponly». Не позволяйте этому имени заполнять вас; он также работает с sftp. Если вы хотите заблокировать их еще больше, посмотрите документацию в /usr/local/share/doc/scponly по поводу настройки "chroot" для каждого пользователя.
  2. Если вам нужно разрешить доступ к большему количеству команд, чем только 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» (вам, конечно, придется добавить группу), и они будут ограничены командами, разрешенными вашим скриптом.

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

  • Может быть, пользователям не нужна учетная запись unix в системе.
  • Можно ли добиться подобного, настроив, например, сервер sftp (или что-то подобное, например, WebDAV) в этой системе? А система предоставляет автоматизированное решение для резервного копирования? (При желании вы даже можете обеспечить автоматическое управление версиями с помощью Subversion + WebDAV.)

... Просто идея, потому что всегда есть определенный риск безопасности (и это требует управления правами пользователей и файлов) при предоставлении пользователям системной учетной записи - по крайней мере, до тех пор, пока вы не настроите виртуальный сервер для всех.