Chroot 구성

Chroot 구성

SFTP 명령을 별도의 파일에 기록하고 싶지만 rootchroot된 사용자에 대해서만 작동하지만 작동하지 않습니다.

# 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

-

기본 시설은 다음에 따라 AUTH입니다.매뉴얼 페이지

# 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 "/"

편집: 2013년 12월 30일 월요일 11:40:18 GMT

시스템: CentOS 6.5

다음 옵션을 추가했지만 이벤트는 여전히 /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

답변1

에 따르면이 링크chrooted SFTP 사용자에 대한 자세한 로깅을 위한 세 가지 기준 중 하나를 충족한다고 생각합니다.

  • 자세한 로깅은 sftpd 구성에서 구성되어야 합니다. 당신은 다음을 사용하여 그렇게 한 것 같습니다"ForceCommand 내부-sftp -l 정보"지령.
  • chroot된 사용자는 /var/log 디렉토리에 쓸 수 있는 권한이 없으므로 chroot된 디렉토리 내부에 로그 파일을 지정해야 합니다.
  • 새 로그 파일에 대한 로깅을 용이하게 하려면 로깅 소켓을 rsyslogd에 추가해야 합니다.

다음과 같은 다른 링크 비교이 일반 명령어그리고이 CentOS 명령어로깅 경로에 대해 선호하는 사용자 정의 디렉터리 이름, 로깅 소켓 구성을 배치할 정확한 파일 및 로깅 소켓 구성의 표현과 관련하여 정확한 구성은 배포판마다 약간씩 다른 것으로 보입니다.

[편집하다] Mon Dec 30 21:50:00 GMT 2013

현재 CentOS에 액세스할 수 없지만 위 CentOS 페이지의 링크에서 훌륭한 가이드로 보이는 내용을 찾았습니다. 링크가 깨졌으나 다음을 통해 페이지에 액세스할 수 있습니다.웨이백머신. 하지만 가이드가 사라질 위기에 처해 있는 것 같아, 이제 귀하의 질문에 해당하는 부분을 아래에 멋진 인용문으로 노골적으로 복사하겠습니다. 도움이 되기를 바라지만, 지금 말씀드린 대로 여러분이 사용하는 배포판을 테스트할 방법이 없습니다.

당신은 몇 가지 다른 일을 한 것 같으니 손가락을 교차시키면 아래에 금이 칠 것입니다.

--다음에서 인용 시작Waybackmachine의 bigmite.com--


Chroot 구성

이 예에서는 SFTP 액세스만 필요하고(SSH 없음) SFTP 서버의 파일 시스템에 파일을 복사하는 사용자 그룹을 설정하겠습니다. 파일 시스템의 위치는 다음과 같으며 /sftp사용자는 여기 아래의 별도 폴더에 상주하게 됩니다.

처음에는 새 그룹을 만들어야 합니다. 여기서는 이라고 합니다 “sftpuser”. SFTP 액세스가 필요한 각 사용자는 이 그룹에 배치됩니다.

sshd_config(on debian in ) 을 /etc/ssh편집하고 끝에 다음을 추가해야 합니다:-

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

이는 다음을 수행합니다:-

  1. 포트 22에서 SSH를 통해 연결하는 모든 사용자가 SFTP만 갖도록 강제합니다.
  2. 디렉토리의 chroot 감옥에서 sftp 세션을 실행합니다./sftp/$USER
  3. X11 전달 연결의 TCP를 방지합니다.
  4. 내부 SFTP 서버를 실행하여 자세한 정보를 기록하고 syslog 채널 이름을 기록합니다.LOCAL6

이제 홈 디렉토리를 생성하지 않고 기본 그룹에 사용자를 생성해야 합니다 sftpuser. 우분투에서는 다음을 입력할 수 있습니다:-

(가독성을 위해 줄 바꿈을 추가했습니다! /E)

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

홈 디렉토리가 로 설정된 이유는 /sftp가 로 루트되기 때문입니다 /sftp/testuser1. 다음으로 사용자 홈 디렉토리를 생성해야 합니다:-

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

설정한 디렉터리 구조와 권한은 요구 사항에 따라 다를 수 있습니다. 사용자 비밀번호를 설정하고 sshd를 다시 시작해야 합니다( debian 에서 service ssh restart).

이제 명령줄 sftp 도구를 사용하여 호스트에 sftp 파일을 전송할 수 있지만 사용자로 서버에 ssh를 전송할 수는 없습니다 testuser1.

벌채 반출

chroot된 각 사용자에 대해 자세한 SFTP 로깅이 생성되는 것을 볼 수 있습니다 /var/logmessages. 기본적으로 이는 daemon.log. 그 이유는 chroot된 sftp 프로세스가 /dev/logchroot된 파일 시스템 내에 있지 않기 때문에 열 수 없기 때문입니다.

파일 시스템 구성에 따라 이 문제에 대한 두 가지 수정 사항이 있습니다.

사용자 sftp 디렉토리 /sftp/user가 루트 파일 시스템에 있는 경우

장치를 모방하는 하드 링크를 만들 수 있습니다.

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

사용자 sftp 디렉토리가 루트 파일 시스템에 없는 경우

첫 번째 syslog 또는 rsyslog는 사용자 파일 시스템 내에서 추가 로깅 소켓을 사용해야 합니다. 내 예에는 /sftp별도의 SFTP 파일 시스템이 있습니다.

레드햇의 경우

Redhat에서는 syslog가 사용되므로 /etc/sysconfif/syslog다음 줄을 변경했습니다.

SYSLOGD_OPTIONS="-m 0"

읽습니다:-

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

LOCAL6마지막으로 syslog 데몬은 파일 에 대한 메시지를 기록하도록 지시해야 하므로 /var/log/sftp.log다음이 추가되었습니다 /etc/syslog.conf.

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

그리고 syslog가 다시 시작되었습니다.

우분투 루시드의 경우

Ubuntu lucid에서는 /etc/rsyslog.d/sshd.conf다음을 포함하여 만들었습니다.

# 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" ~

... 그리고 rsyslogd를 다시 시작했습니다.

사용자를 위한 로그 장치 생성

이제 각 사용자에 대해 /dev/log device다음을 생성해야 합니다.

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

--인용 끝--

관련 정보