Como criar um usuário FTP com / dir / access específico apenas em uma instalação do Centos / linux

44

Então, eu estou em uma instalação do VPS - CentOS Linux. Eu tenho vsFTPd no servidor. Atualmente, tenho acesso SFTP ao servidor via meu usuário root, mas agora estou tentando criar um novo usuário com acesso FTP a um diretório específico apenas no servidor, fiz o seguinte:

1. mkdir /var/www/mydomain.com
2. mkdir /var/www/mydomain.com/html
3. useradd <-username>
4. passwd <-username>
5. chown –R <-username> /var/www/mydomain.com
5. groupadd <-groupname>
6. gpasswd -a <-username> <-groupname>
7. chgrp -R <-groupname> /var/www/mydomain.com
8. chmod -R g+rw /var/www/mydomain.com

O que estou tentando fazer é criar o usuário SOMENTE para ter acesso /var/www/mydomain.com - observei que o usuário efetua login corretamente na pasta correta, no entanto, o usuário pode procurar "voltar" para outros diretórios. Eu quero que o usuário fique na pasta específica e não consiga "navegar" de volta .

Alguma ideia?

Encontrei artigos diferentes sobre chrooting, mas simplesmente não consegui usá-lo nas etapas incluídas acima.

user1231561
fonte
digitalocean.com/community/tutorials/… Você pode seguir este procedimento para resolver seu problema #
Jack
para quem está no Ubuntu 18 aqui está a versão digitalocean.com/community/tutorials/…
Dung

Respostas:

39

É bem simples

Você deve adicionar a seguinte opção no arquivo vsftpd.conf

chroot_local_user=YES

A documentação dentro do arquivo de configuração é auto-explicativa:

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().

Isso significa que o usuário terá apenas acesso à pasta que você configurou como HOME do usuário. Abaixo, tenho um exemplo de uma entrada de senha do usuário:

upload_ftp:x:1001:1001::/var/www/sites/:/bin/bash

Defina o diretório inicial do usuário com o seguinte comando

usermod -d /var/www/my.domain.example/ exampleuser

Nota: No meu exemplo, este usuário também é um usuário válido para algumas tarefas agendadas no Linux. Se você não tiver essa necessidade, altere o shell do usuário para em /sbin/nologinvez de bash.

Jeff Schaller
fonte
Oi nwildner! Muito obrigado por reservar um tempo para me responder sobre isso. Então, no meu arquivo vsftpd.conf, adicionei a seguinte linha "chroot_local_user = YES" - então, pelo que entendi, preciso adicionar uma linha semelhante à exibida para o meu usuário? Devo admitir que não tenho muita certeza do que escrever lá com o exemplo que você fornece. o "1001" etc o que é isso? Vamos supor que meu usuário se chame: "im_a_linux_noob" e o diretório para esse usuário seja: "/var/www/mydomain.com" - como seria isso?
user1231561
E eu seria capaz de fazer isso sem nenhuma etapa adicional do que foi feito na minha postagem? Então, fazer 1-8 e adicionar o que você descreve deve fazer o truque?
user1231561
Oi. O exemplo acima é apenas uma linha (modificada, é claro) do /etc/passwdarquivo, que representa um usuário chamado upload_ftp, 1001: 1001 é o ID do usuário e o ID do grupo, / var / www / sites é o diretório inicial do usuário (e o parâmetro do qual o vsftpd lê) e / bin / bash, o shell. Provavelmente o que está faltando no seu caso é um diretório home para o usuário, e que poderia ser resolvido com o seguinte comando: usermod -d /var/www/mydomain.com <username>. Cheers :)
3
Sim, muito obrigado. Uma questão embora. Ele funciona bem através do FTP normal, no entanto, quando eu entro como SFTP - então posso navegar novamente - alguma idéia?
user1231561
1
Certamente porque o sftp está sendo tratado pelo seu servidor ssh, não pelo seu servidor ftp. De uma maneira "bruta": SFTP = SSH + FTP; FTPS = FTP + SSL. Há um tópico sobre o sftp aqui, e vou citar para aviod duplicação de assunto ok? ;) unix.stackexchange.com/a/64541/34720
6

Depois de alterar sua configuração para incluir chroot_local_user=YES

Você pode alterar o shell do usuário para, /usr/sbin/nologinpara que, se a senha vazar, você reduza alguns riscos (defina também o diretório inicial). O shell também precisa ser listado /etc/shellsou a autenticação falhará.

usermod -d /var/www/my.domain.example -s / usr / sbin / nologin exampleuser

-d, --home HOME_DIR O novo diretório de login do usuário. Se a opção -m for fornecida, o conteúdo do diretório inicial atual será movido para o novo diretório inicial, criado se ele ainda não existir.

-s, --shell SHELL O nome do novo shell de login do usuário. Definir este campo como em branco faz com que o sistema selecione o shell de login padrão.

https://security.appspot.com/vsftpd/FAQ.txt

Shapeshifter
fonte
4

Aqui estão as etapas para configurar um usuário e permitir que o usuário acesse apenas via FTP (ou seja, sem SSH) e também limite o acesso a um diretório específico (home do usuário) no proftpd :

  1. Adicionar novo usuário: adduser newusername

  2. Configurar senha: passwd newusername

  3. Modifique o diretório inicial do usuário do padrão para uma nova pasta:

    usermod -d /target/directory username

  4. Editar shellsarquivo: vi /etc/shellse adicione /dev/nullno final

  5. Modifique a newusernameentrada no passwdarquivo: vi /etc/passwdpara adicionar /./antes do newusernamepara que a entrada fique assim:

    newusername:x:502:502::/home/ftp/./newusernamehomedirectory/:/dev/null

    Detalhes para as etapas 4 e 5 aqui:

  6. Edite o /etc/proftpd/proftpd.confarquivo e remova o comentário da linhaDefaultRoot ~

pTeJa
fonte
-4

Defina as permissões da pasta raiz como 711 com sua conta root.

Leping Zou
fonte
-4

Execute este comando:

useradd -d ftp_user:chown 711 /etc/init.d/
Lunix Pro
fonte
2
Você deve expandir sua postagem para ter, pelo menos, alguma explicação ou documentação útil.
HalosGhost
Esta é uma resposta terrível. Você está essencialmente dando ao usuário do ftp acesso total ao diretório /etc/init.d/ - loucura completa. 711 explicado - Permissions-calculator.org/decode/0711
Tisch