Ответы пользователя по тегу CentOS
  • Как отрыть доступ пользователю к конкретной папке по sftp?

    @luka1sv
    Web, Swift, Servers
    Вот небольшая инфа

    Создаем нового пользователя:

    useradd -m -s /sbin/nologin crazyadmin
    -m - указывает необходимость создать домашнюю директорию пользователя в каталоге /home;
    -s - задает оболочку пользователя - /sbin/nologin запрещает пользователю использовать shell.
    crazyadmin - имя пользователя

    Устанавливаем созданному пользователю пароль:

    passwd crazyadmin
    Если что-то пошло не так, то всегда можно удалить пользователя командой userdel username, например:

    userdel crazyadmin
    И создадим для нового пользователя папку chroot, о её предназначении будет рассказано ниже.

    mkdir /home/crazysadmin/chroot
    Настройка сервера SSH
    Теперь отправляемся в конфиг SSH - /etc/ssh/sshd_config

    Ищем следующую строчку:

    Subsystem sftp /usr/lib/openssh/sftp-server
    и меняем на

    Subsystem sftp internal-sftp
    Теперь отправляемся в самый конец конфига, и там дописываем:



    Match User crazyadmin
            X11Forwarding no
            AllowTcpForwarding no
            AllowAgentForwarding no
            PermitTunnel no
            ForceCommand internal-sftp
            ChrootDirectory %h/chroot

    ChrootDirectory - родительский каталог той папки, к которой мы хотим открыть доступ по SFTP. В данном примере используется директория chroot, которая лежит в папке пользователя.

    Если на вашем сервере настроен доступ по SSH только через файл ключа, а нужно сделать возможность заходить по паролю, то тогда дописываем еще следующее:

    PasswordAuthentication yes
    Если на сервере установлен метод авторизации по паролю, а есть желание сделать более надежную авторизацию через файл ключа, то можно воспользоваться данной статьей.
    После завершения всех манипуляций с SSH сервером, его нужно перезагрузить:

    service ssh restart
    Настройка директорий для пользователя SFTP
    Отправляемся в директорию /home и там ищем папку свежесозданного пользователя, а в ней папку chroot. Устанавливаем её владельцем пользователя root:

    chown root:root /home/crazyadmin/chroot
    Устанавливаем нужные права на папку:

    chmod 755 /home/crazyadmin
    Внимание! Ни в коем случае не следует выставлять ChrootDirectory какие-либо другие права, в таком случае будет выскакивать следующая ошибка: fatal: bad ownership or modes for chroot directory component.
    Теперь представим, что нам нужно предоставить доступ к нескольким папкам, и они все лежат за пределами ChrootDirectory. Выход из ситуации следующий:

    Допустим нам нужно разрешить доступ к папке /var/www/sysadmin.ru. Создаем в домашнем каталоге пользователя /home/crazyadmin папку с названием sysadmin.ru.

    mkdir /home/crazyadmin/sysadmin.ru
    Теперь смонтируем в эту папку ту директорию, доступ к которой нам нужно обеспечить:

    mount --bind /var/www/sysadmin.ru/ /home/crazyadmin/sysadmin.ru/chroot

    Выставляем необходимые для редактирования права для нашей директории /var/www/sysadmin.ru:

    chmod 777 /var/www/sysadmin.ru
    find /var/www/sysadmin.ru -type f -exec chmod 664 {} +
    find /var/www/sysadmin.ru -type d -exec chmod 777 {} +

    Если в процессе монтирования директории что-то пошло не так, то можно убрать монтирование командой unmount:

    umount /home/crazysyadmin/sysadmin.ru
    На этом настройка SFTP сервера завершена.

    Частые ошибки
    fatal: bad ownership or modes for chroot directory component
    - как писалось выше, данная ошибка появляется тогда, когда владельцем ChrootDirectory является не пользователь root, и права не равны 755.
    No supported authentication methods available (server sent public key)
    - сервер настроен на авторизацию по ключу. Если нужна авторизация по паролю, то в конфиге /etc/ssh/sshd_config нужно поменять значение у переменной PasswordAuthentication с no на yes, а после перезапустить сервер командой service ssh restart.
    Ответ написан
    2 комментария