Configuração do Chroot

Configuração do Chroot

Gostaria de registrar comandos SFTP em um arquivo separado, mas ele funciona apenas para rootusuários com chroot, mas não:

# cat /etc/ssh/sshd_config
...
Subsystem       sftp    internal-sftp -l INFO
Match Group user1
   ChrootDirectory /chroot
   ForceCommand internal-sftp -l INFO
   AllowTcpForwarding no
   X11Forwarding no

-

O recurso padrão é AUTH de acordo compágina de manual

# cat /etc/rsyslog.d/sshd.conf
auth.* /var/log/sftp.log

-

tail -F /var/log/secure /var/log/sftp.log

==> /var/log/secure <==
Dec 27 12:35:09 lab sshd[43014]: Accepted publickey for root from 192.168.1.100 port 44706 ssh2
Dec 27 12:35:09 lab sshd[43014]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 27 12:35:09 lab sshd[43014]: subsystem request for sftp

==> /var/log/sftp.log <==
Dec 27 12:35:09 lab internal-sftp[43016]: session opened for local user root from [192.168.1.100]
Dec 27 12:35:10 lab internal-sftp[43016]: opendir "/root/"
Dec 27 12:35:10 lab internal-sftp[43016]: closedir "/root/"
Dec 27 12:35:27 lab internal-sftp[43016]: session closed for local user root from [192.168.1.100]

==> /var/log/secure <==
Dec 27 12:35:27 lab sshd[43014]: Received disconnect from 192.168.1.100: 11: disconnected by user
Dec 27 12:35:27 lab sshd[43014]: pam_unix(sshd:session): session closed for user root
Dec 27 12:35:31 lab sshd[43017]: Accepted password for user1 from 192.168.1.100 port 44708 ssh2
Dec 27 12:35:31 lab sshd[43017]: pam_unix(sshd:session): session opened for user user1 by (uid=0)
Dec 27 12:35:31 lab sshd[43019]: subsystem request for sftp
Dec 27 12:35:31 lab sshd[43020]: session opened for local user user1 from [192.168.1.100]
Dec 27 12:35:31 lab sshd[43020]: opendir "/"
Dec 27 12:35:31 lab sshd[43020]: closedir "/"

EDITAR: segunda-feira, 30 de dezembro 11:40:18 GMT 2013

Sistema: CentOS 6.5

Adicionei as seguintes opções, mas os eventos ainda são registrados no arquivo de log /var/log/secure:

# id user1
uid=501(user1) gid=501(user1) groups=501(user1)
# mkdir /chroot/dev
# cat /etc/rsyslog.d/sshd.conf
$AddUnixListenSocket /chroot/dev/log
auth.* /chroot/dev/sftp.log
# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
# ll /chroot/dev/
total 0
srw-rw-rw- 1 root   root   0 Dec 30 11:44 log
-rw------- 1 nobody nobody 0 Dec 30 11:39 sftp.log

Responder1

De acordo comesse linkAcredito que você atenda a um dos três critérios para obter registros detalhados de usuários sftp com chroot:

  • o registro detalhado deve ser configurado na configuração do sftpd. Você parece ter feito isso usando o"ForceCommand interno-sftp -l INFO"diretiva.
  • um arquivo de log deve ser especificado dentro do diretório chroot, pois um usuário chroot não tem permissão para gravar no diretório /var/log.
  • um soquete de registro deve ser adicionado ao rsyslogd para facilitar o registro no novo arquivo de log.

Comparando outros links, comoesta instrução genéricaeesta instrução CentOSparece que a configuração exata varia um pouco entre as distros no que diz respeito aos nomes de diretório personalizados preferidos para o caminho de registro, o arquivo exato onde colocar a configuração do soquete de registro e a expressão da configuração do soquete de registro.

[EDITAR] Mon Dec 30 21:50:00 GMT 2013

Não tenho acesso a um CentOS no momento, mas encontrei o que parece ser um excelente guia em um link na página do CentOS acima. O link está quebrado mas consegui acessar a página através doMáquina Wayback. Mas como o guia parece em risco de desaparecer, copiarei agora descaradamente as partes relevantes para suas perguntas em uma citação magnífica abaixo. Espero que ajude você, mas como dito no momento não tenho como testar na distro que você usa.

Parece que você fez algumas coisas de maneira diferente, então, com os dedos cruzados, você encontrará ouro abaixo.

--Iniciar citação debigmite.com em Waybackmachine--


Configuração do Chroot

Neste exemplo, configurarei um grupo de usuários que requerem apenas acesso SFTP (sem SSH) e copiarão arquivos para um sistema de arquivos em um servidor SFTP. A localização do sistema de arquivos será /sftpe os usuários residirão em pastas separadas aqui.

Inicialmente deverá ser criado um novo grupo, aqui denominado “sftpuser”. Cada usuário que requer acesso SFTP será colocado neste grupo.

O sshd_config(no debian in /etc/ssh) deve ser editado e o seguinte adicionado no final: -

Match group sftpuser
 ChrootDirectory /sftp/%u
 X11Forwarding no
 AllowTcpForwarding no
 ForceCommand internal-sftp -l VERBOSE -f LOCAL6

Isso faz o seguinte: -

  1. Força todos os usuários que se conectam via ssh na porta 22 a terem apenas sftp
  2. Executa sua sessão sftp em uma prisão chroot no diretório/sftp/$USER
  3. Impede-os de conexões de encaminhamento TCP de X11
  4. Executa o servidor sftp interno fazendo com que ele registre detalhadamente e syslog o nome do canalLOCAL6

Agora um usuário deve ser criado, sem criar um diretório inicial e no grupo padrão sftpuser. No Ubuntu você pode digitar: -

(Quebra de linha adicionada por mim para facilitar a leitura! /E)

adduser --home / --gecos "First Test SFTP User" --group sftpuser --no-create-home
--shell /bin/false testuser1

A razão pela qual o diretório inicial está definido /é que o sftp fará chroot para /sftp/testuser1. Em seguida, o diretório inicial dos usuários precisará ser criado: -

mkdir /sftp/testuser1
chmod 755 /sftp/testuser1
mkdir /sftp/tstuser1/in
mkdir /sftp/testuser1/out
chown testuser1 /sftp/testuse1/in

Observe que a estrutura de diretório e as permissões definidas podem diferir dependendo de seus requisitos. A senha do usuário deve ser definida e o sshd reiniciado (no debian service ssh restart).

Agora deve ser possível enviar arquivos sftp para o host usando a ferramenta sftp de linha de comando, mas não deve ser possível fazer ssh para o servidor como user testuser1.

Exploração madeireira

Você verá o registro sftp detalhado sendo produzido no /var/logmessagesarquivo chroot para cada usuário, onde por padrão ele deve ir para o arquivo daemon.log. A razão para isso é que o processo sftp com chroot não pode ser aberto /dev/logporque não está dentro do sistema de arquivos com chroot.

Existem duas soluções para esse problema, dependendo da configuração do sistema de arquivos.

Se o diretório sftp dos usuários /sftp/user estiver no sistema de arquivos raiz

Você pode criar um link físico para imitar o dispositivo: –

mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /dev/log /sftp/testuser1/dev/log

Se o diretório sftp dos usuários NÃO estiver no sistema de arquivos raiz

Primeiro, o syslog ou rsyslog precisará usar um soquete de registro adicional no sistema de arquivos do usuário. Para o meu exemplo /sftpé um sistema de arquivos sftp separado.

Para chapéu vermelho

No redhat o syslog é usado, então alterei /etc/sysconfif/syslogpara que a linha: -

SYSLOGD_OPTIONS="-m 0"

lê: -

SYSLOGD_OPTIONS="-m 0 -a /sftp/sftp.log.socket

Finalmente, o daemon syslog precisa ser informado para registrar mensagens LOCAL6no /var/log/sftp.logarquivo, então o seguinte foi adicionado a /etc/syslog.conf: -

# For SFTP logging
local6.*                        /var/log/sftp.log

e o syslog foi reiniciado.

Para Ubuntu Lúcido

No Ubuntu lúcido eu criei /etc/rsyslog.d/sshd.confcontendo: -

# Create an additional socket for some of the sshd chrooted users.
$AddUnixListenSocket /sftp/sftp.log.socket
# Log internal-sftp in a separate file
:programname, isequal, "internal-sftp" -/var/log/sftp.log
:programname, isequal, "internal-sftp" ~

… e reiniciei o rsyslogd.

Criando dispositivos de log para usuários

Agora, para cada usuário, é /dev/log devicenecessário criar: -

mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /sftp/sftp.log.socket /sftp/testuser1/dev/log

--Fim da citação--

informação relacionada