AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 563739
Accepted
HTF
HTF
Asked: 2013-12-28 04:49:44 +0800 CST2013-12-28 04:49:44 +0800 CST 2013-12-28 04:49:44 +0800 CST

SFTP:为 chroot 用户登录到单独的文件

  • 772

我想将 SFTP 命令记录到单独的文件中,但它仅适用于 chroot 用户,root但不适用于 chroot 用户:

# 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
sftp
  • 1 1 个回答
  • 20730 Views

1 个回答

  • Voted
  1. Best Answer
    ErikE
    2013-12-31T02:17:09+08:002013-12-31T02:17:09+08:00

    根据此链接,我相信您满足详细记录 chrooted sftp 用户的三个标准之一:

    • 必须在 sftpd 配置中配置详细的日志记录。您似乎已经使用“ForceCommand internal-sftp -l INFO”指令这样做了。
    • 必须在 chrooted 目录中指定日志文件,因为 chrooted 用户没有写入 /var/log 目录的权限。
    • 必须将日志记录套接字添加到 rsyslogd 以方便记录到新日志文件。

    比较其他链接,例如这个通用指令和这个 CentOS 指令,似乎在不同发行版之间,关于日志路径的首选自定义目录名称、放置日志套接字配置的确切文件和日志表达式的确切配置略有不同套接字配置。

    [编辑] Mon Dec 30 21:50:00 GMT 2013

    我目前无法使用 CentOS,但在上面的 CentOS 页面中的链接中发现似乎是一个极好的指南。链接已损坏,但我可以通过Waybackmachine访问该页面。但是由于该指南似乎有消失的风险,我现在将在下面的引文中公然复制与您的问题相关的部分。希望它会对您有所帮助,但正如目前所说,我无法在您使用的发行版上进行测试。

    看来你做了一些不同的事情,所以手指交叉你会在下面找到金子。

    --在 Waybackmachine 中从bigmite.com开始报价--


    Chroot 配置

    在此示例中,我将设置一组仅需要 SFTP 访问(无 SSH)的用户,并将文件复制到 SFTP 服务器上的文件系统。文件系统的位置将是/sftp,用户将驻留在此处的单独文件夹中。

    最初应该创建一个新组,这里称为“sftpuser”. 每个需要 SFTP 访问权限的用户都将被放置在该组中。

    应该编辑(在 debian in 上)并在最后添加以下内容:sshd_config-/etc/ssh

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

    这将执行以下操作:-

    1. 强制所有通过 ssh 在端口 22 上连接的用户只有 sftp
    2. 在目录中的 chroot 监狱中运行他们的 sftp 会话/sftp/$USER
    3. 阻止他们 TCP 的 X11 转发连接
    4. 运行内部 sftp 服务器,让它记录详细信息和 syslog 通道名称LOCAL6

    现在应该在默认组中创建一个用户,而不创建主目录sftpuser。在 ubuntu 上,您可以输入:-

    (为了便于阅读,我添加了换行符!/E)

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

    主目录设置为的原因是/sftp 将 chroot 到/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 到主机,但不应该以 user 身份 ssh 到服务器testuser1。

    日志记录

    您将看到在为每个 chroot 用户生成详细的 sftp 日志记录/var/logmessages,默认情况下这应该转到daemon.log. 原因是 chroot 的 sftp 进程无法打开/dev/log,因为它不在 chroot 文件系统中。

    这个问题有两个修复方法,具体取决于文件系统配置。

    如果用户 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
    

    最后,需要告诉 syslog 守护程序将消息记录LOCAL6到/var/log/sftp.log文件中,因此将以下内容添加到/etc/syslog.conf:-

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

    并且系统日志已重新启动。

    对于 Ubuntu 清醒

    在我创建的 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
    

    --结束报价--

    • 6

相关问题

  • 在没有硬件防火墙的情况下保护直接连接到 Internet 上的 Windows 服务器的过程

  • FTP、SCP 或其他

  • 将我的 SFTP 用户监禁到他们的主目录是否公平?

  • 为什么 scp -scp 工作但没有那个标志的 scp

  • 使用 OpenSSH 设置 chrooted SFTP 登录

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve