我已经阅读了各种 ftp 守护进程和各种长线程的文档,了解在授予用户写访问权限时将 chroot 环境用于 ftp 服务器的安全隐患。如果您阅读了 vsftpd 文档,特别是它意味着使用 chroot_local_user 是一个安全隐患,而不使用它则不是。似乎没有涵盖允许用户访问整个文件系统的含义(在他们的用户和组成员资格允许的情况下),也没有涵盖这可能造成的混乱。
所以,我想了解在实践中使用的正确方法是什么。具有经过身份验证的写访问用户的 ftp 服务器是否应该提供非 chroot 环境、chroot 环境或其他一些选项?鉴于 Windows ftp 守护进程没有使用 chroot 的选项,否则它们需要实现隔离。是否有任何 unix ftp 守护进程做类似的事情?
我即将开发一个小脚本来为 chroot-jail 收集信息。
就我而言,这看起来(乍一看)非常简单:该应用程序具有干净的 rpm-install,并且确实将几乎所有文件安装到 /opt 的子目录中。
我的想法是:
现在我想知道 - 是否有任何脚本已经完成了这样的工作(perl/bash/python)?
到目前为止,我只找到了针对单个应用程序(如 sftp-chroot)的专门解决方案。
虽然无关紧要(恕我直言) - 操作系统是 CentOS 5 x86_64 当前次要版本和补丁级别。
rpm -ql恕我直言不够通用,因为它只会涵盖基于rpm的发行版。上面提到的“全新安装”只是提到软件的文件没有分布在整个文件系统中。所以我的出发点是 - 目前 - 一个find /opt/directory/......几乎可以在任何系统(甚至不是Linux)上运行。
我正在运行带有 Postfix 2.11.3-1 作为 MTA 的 Debian GNU/Linux 8.7 机器。突然之间,也就是没有更改 MTA 设置,邮件停止发送,并且以下错误开始出现在/var/log/mail.err:
root@schroeder:~# tail /var/log/mail.err
Mar 21 12:51:01 schroeder postfix/smtp[25421]: fatal: unknown service: smtp/tcp
Mar 21 12:54:11 schroeder postfix/smtp[26397]: fatal: unknown service: smtp/tcp
Mar 21 12:54:12 schroeder postfix/smtp[26398]: fatal: unknown service: smtp/tcp
Mar 21 12:59:26 schroeder postfix/smtp[26553]: fatal: unknown service: smtp/tcp
Mar 21 12:59:26 schroeder postfix/smtp[26554]: fatal: unknown service: smtp/tcp
Mar 21 12:59:26 schroeder postfix/smtp[26555]: fatal: unknown service: smtp/tcp
Mar 21 12:59:26 schroeder postfix/smtp[26556]: fatal: unknown service: smtp/tcp …Run Code Online (Sandbox Code Playgroud) 我想要一个明确的答案,为什么应该对暴露于潜在敌对网络(即 Internet)的服务进行这种做法。据我了解,有一种突破 chroot jail 的方法,所以如果这种安全措施没有真正的价值,那为什么有些装置还在追求它呢?
我正在尝试为自己设置 chroot 环境,但失败了。这已在 Ubuntu 的多个版本(10.04 和 11.04)上重现。我通过以下方式进行设置:
$ mkdir -p /srv/chroot/squeeze64
$ debootstrap --arch amd64 squeeze /srv/chroot/squeeze64 http://ftp.debian.org/debian/
$ cat /etc/schroot/schroot.conf
[squeeze64]
description=Whatever
directory=/srv/chroot/squeeze64
users=ajtack
root-users=ajtack
type=directory
Run Code Online (Sandbox Code Playgroud)
进入 chroot 失败,因为:
$ schroot -c squeeze64
E: Failed to change to directory '/var/lib/schroot/mount/squeeze64-d1d6ed5e-b217-4319-94ee-ff0422a75671': No such file or directory
Run Code Online (Sandbox Code Playgroud)
我不知道如何调试这个。出了什么问题?
附加信息:来自详细运行。
$ schroot --verbose -c squeeze64
I: Executing ‘00check setup-start ok’
I: 00check: STAGE=setup-start
I: 00check: STATUS=ok
I: 00check: AUTH_GID=1000
I: 00check: AUTH_HOME=/home/ajtack
I: 00check: AUTH_RGID=1000
I: 00check: AUTH_RGROUP=ajtack
I: 00check: AUTH_RUID=1000
I: …Run Code Online (Sandbox Code Playgroud) 我试图使用 rssh 将用户严格限制在他们的 /home/user/public_html 目录中。我让它在一个帐户可以在测试服务器上成功通过 SFTP 进入系统的地方工作,但是一旦我以该帐户登录,我注意到我可以将目录更改为我希望的任何位置并查看文件的内容。我可能无法编辑或转移到这些目录,但我认为能够监禁它们的全部目的是为了防止这种事情发生?
SSHD 设置子系统 sftp internal-sftp RSSH 指定用户只能使用 scp 和 sftp 用户帐户使用 /usr/bin/rssh 作为 shell 和 /home/user/public_html 用户的主目录是 root:用户所有者:组
我已经注意到,他们可以查看的唯一文件和他们可以 cd 进入的目录都是世界可读的,这是有道理的,但为什么他们完全允许离开他们的目录?请不要说我只是回答了我自己的问题。目的是找到防止这种情况的最佳实践解决方案。
期望的结果是限制他们对任何不属于他们的目录进行 cd 的能力。
我在这里错过了什么吗?
这是 rssh.conf 文件的内容;
logfacility = LOG_USER
allowscp
allowsftp
#allowcvs
#allowrdist
#allowrsync
#allowsvnserve
# set the default umask
umask = 022
user=wwwtest1:077:110000:/home/wwwtest1/public_html
Run Code Online (Sandbox Code Playgroud)
这是 sshd_config 文件的内容;
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use …Run Code Online (Sandbox Code Playgroud) 我正在用 C 语言编写一个社交网站,并使用 Nginx 为其提供服务。我怎样才能让经过身份验证的用户转到他们自己的目录 - 仅 - 用户特定的 index.html 所在的目录。我不是在问如何用用户特定的指令填充 index.html,而是如何将它们锁定到他们自己的目录中
我正在尝试使用 chroot监狱运行bind9。我按照以下提到的步骤进行操作:http://www.howtoforge.com/debian_bind9_master_slave_system
我的系统日志中出现以下错误:
Jul 27 16:53:49 conf002 named[3988]: starting BIND 9.7.3 -u bind -t /var/lib/named
Jul 27 16:53:49 conf002 named[3988]: built with '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sysconfdir=/etc/bind' '--localstatedir=/var' '--enable-threads' '--enable-largefile' '--with-libtool' '--enable-shared' '--enable-static' '--with-openssl=/usr' '--with-gssapi=/usr' '--with-gnu-ld' '--with-dlz-postgres=no' '--with-dlz-mysql=no' '--with-dlz-bdb=yes' '--with-dlz-filesystem=yes' '--with-dlz-ldap=yes' '--with-dlz-stub=yes' '--with-geoip=/usr' '--enable-ipv6' 'CFLAGS=-fno-strict-aliasing -DDIG_SIGCHASE -O2' 'LDFLAGS=-Wl,-Bsymbolic-functions' 'CPPFLAGS='
Jul 27 16:53:49 conf002 named[3988]: adjusted limit on open files from 4096 to 1048576
Jul 27 16:53:49 conf002 named[3988]: found 4 CPUs, using 4 worker threads
Jul 27 16:53:49 conf002 named[3988]: …Run Code Online (Sandbox Code Playgroud) Ubuntu 10.04.4 LTS
我正在尝试 chroot 用户“sam”。根据那里的所有文章,这应该有效,但显然我仍然做错了什么。
用户:
sam:x:1005:1006::/home/sam:/bin/false
Run Code Online (Sandbox Code Playgroud)
我像这样更改了 /etc/ssh/sshd_config(在文件底部):
#Subsystem sftp /usr/lib/openssh/sftp-server
# CHROOT JAIL
Subsystem sftp internal-sftp
Match group users
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)
我将 sam 添加到用户组:
$groups sam
sam : sam users
Run Code Online (Sandbox Code Playgroud)
我更改了 sam 的主文件夹的权限:
$ ls -la /home/sam
drwxr-xr-x 11 root root 4096 Sep 23 16:12 .
drwxr-xr-x 8 root root 4096 Sep 22 16:29 ..
drwxr-xr-x 2 sam users 4096 Sep 23 16:10 awstats
drwxr-xr-x 3 sam users 4096 Sep 23 16:10 etc …Run Code Online (Sandbox Code Playgroud) 如果用户登录,他会从 chroot 的 / 开始(在真机上是 /var/jail)。我希望他从他的家庭目录开始。此外,他似乎没有加载任何他的个人资料文件(.bash.rc 等)。我按照本教程创建了 chroot 环境。这是我的 /etc/passwd 的样子:
test:x:1004:1008:,,,:/var/jail/home/test:/bin/bash
Run Code Online (Sandbox Code Playgroud)
这是我的 /var/jail/etc/passwd 文件的样子:
test:x:1004:1008:,,,:/home/test:/bin/bash
Run Code Online (Sandbox Code Playgroud)
我还发现,如果我删除
Match User test
ChrootDirectory /var/jail
AllowTCPForwarding no
X11Forwarding no
Run Code Online (Sandbox Code Playgroud)
从我的 /etc/ssh/sshd_config 中,用户从他正确的主文件夹中开始,并加载了他的 bash 设置。但是,如果我删除该部分,他就可以离开 chroot 环境。我之前问过的这个问题有些相关,因为我认为命令行的错误外观是由未加载的配置文件引起的。那么任何想法如何解决这个问题?