É possível ativar o SFTP globalmente e desativá-lo apenas para alguns usuários.
Isso não funciona se você deseja que seu usuário receba um prompt de shell regular. Também não faz sentido, pois você pode contornar a maioria das coisas se tiver acesso ao shell.
Só funcionará se você quiser dar acesso a um programa específico.
Pessoalmente, preciso disso porque quero dar acesso a alguns repositórios git sobre SSH e gosto de desativar sistemas que não são necessários. Nesse caso, o SFTP não é necessário.
Coincidindo
Para corresponder a um conjunto de usuários, você pode configurar o SSH com a Match
palavra - chave Do sshd_config(5)
manual:
Match
...
The arguments to Match are one or more criteria-pattern pairs or the
single token All which matches all criteria. The available criteria
are User, Group, Host, LocalAddress, LocalPort, and Address. The
match patterns may consist of single entries or comma-separated
lists and may use the wildcard and negation operators described in
the PATTERNS section of ssh_config(5).
...
Alguns exemplos:
Match User eva
corresponde ao usuário "eva"
Match User stephen,maria
corresponde aos usuários "stephen" e "maria"
Match Group wheel,adams,simpsons
corresponde aos grupos "roda", "adams", "simpsons"
Se você quiser obter mais informações, há muitas cargas no sshd_config(5)
manual.
Comando forçado
Normalmente, você obtém o shell de login do usuário quando se conecta via SSH, mas o SSH pode ser configurado para forçar um determinado comando. O comando é forçado para qualquer conexão SSH, incluindo SFTP, e, portanto, você pode ter a opção de forçar o comando desejado.
O comando forçar pode ser configurado com a ForceCommand
palavra - chave. Do
sshd_config(5)
manual:
ForceCommand
Forces the execution of the command specified by ForceCommand,
ignoring any command supplied by the client and ~/.ssh/rc if
present. The command is invoked by using the user's login shell
with the -c option. This applies to shell, command, or subsystem
execution. It is most useful inside a Match block. The command
originally supplied by the client is available in the
SSH_ORIGINAL_COMMAND environment variable. Specifying a command of
“internal-sftp” will force the use of an in-process sftp server that
requires no support files when used with ChrootDirectory. The
default is “none”.
Assim, você pode forçar o comando restrito que deseja usar ForceCommand <your command>
. Por exemplo:
Match User kim
ForceCommand echo 'successful login man, congrats'
Exemplo
No meu caso em que desejo conceder acesso ao git, só preciso que o usuário tenha acesso git-shell
. Esta é a seção que desativa o SFTP para meus usuários git, juntamente com algumas opções de segurança:
Match Group git
# have to do this instead of setting the login shell to `git-shell`,
# to disable SFTP
ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"
# disable stuff we don't need
AllowAgentForwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
PermitOpen none
PermitTunnel no
PermitTTY no
X11Forwarding no
owner
para acesso de saída. Isso pressupõe que você será testado com caneta por um time vermelho. Se todos os que acessam seu sistema sempre obedecem às regras e nunca têm más intenções, minha abordagem seria pesada e excessivamente complexa.