CentOS如何限制用户只访问自己的目录?

在多用户的服务器环境中,为了增强系统安全性、限制用户的访问范围以及防止用户误操作或恶意行为对系统造成破坏,管理员常常需要将用户“囚禁”在其特定的家目录中,在 CentOS 系统中,实现这一目标主要通过 chroot(change root)机制,它能够改变一个进程及其子进程所能看到的根目录,从而创建一个隔离的运行环境。

CentOS如何限制用户只访问自己的目录?

SFTP 服务的目录锁定

最常见的需求是限制 SFTP 用户,使其只能访问自己的目录,而不能浏览服务器的其他文件系统,这可以通过配置 OpenSSH 服务轻松实现,是安全且推荐的做法。

创建监狱根目录
我们需要创建一个作为 chroot 环境根目录的文件夹,这个目录不属于任何用户的家目录,/home/sftp_jail

sudo mkdir -p /home/sftp_jail

创建用户并设置家目录
创建一个专门用于 SFTP 访问的用户,关键在于将其家目录指向监狱内的一个子目录,并将其 shell 设置为 /sbin/nologin,以禁止其通过 SSH 登录获得 shell。

sudo useradd -d /upload -s /sbin/nologin sftpuser
sudo passwd sftpuser

这里的 -d /upload 指的是该用户的家目录在 chroot 环境中看起来是 /upload,它在服务器上的实际路径是 /home/sftp_jail/upload

配置目录权限
权限设置是 chroot 成功的关键,监狱的根目录(/home/sftp_jail)必须由 root 用户拥有,且其他用户不可写入,而用户的上传目录则由该用户自己拥有。

CentOS如何限制用户只访问自己的目录?

# 在监狱根目录下创建用户实际的上传目录
sudo mkdir /home/sftp_jail/upload
# 设置监狱根目录权限 (必须由root拥有)
sudo chown root:root /home/sftp_jail
sudo chmod 755 /home/sftp_jail
# 设置用户上传目录权限
sudo chown sftpuser:sftpuser /home/sftp_jail/upload

配置 SSH 服务
编辑 SSH 的配置文件 /etc/ssh/sshd_config,在文件末尾添加以下配置:

Match User sftpuser
    ChrootDirectory /home/sftp_jail
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

这段配置的含义是:

  • Match User sftpuser: 仅对 sftpuser 用户应用以下规则。
  • ChrootDirectory /home/sftp_jail: 将该用户的根目录 chroot 到指定路径。
  • ForceCommand internal-sftp: 强制执行 SFTP 的内部进程,不提供 shell。
  • X11Forwarding noAllowTcpForwarding no: 禁用端口转发和X11转发,增强安全性。

重启服务并测试
保存配置文件后,重启 SSH 服务使配置生效。

sudo systemctl restart sshd

使用 sftpuser 账户登录,你会发现用户被成功地限制在了 /upload 目录中,无法向上浏览到服务器的其他路径。

为用户提供 Shell 的 Chroot 环境

如果需要为用户提供一个受限的 shell 环境,过程会复杂一些,你不仅需要 chroot 目录,还需要在其中构建一个最小化的 Linux 运行环境,包括必要的二进制文件(如 bash, ls)和它们所依赖的共享库,可以使用 ldd 命令查看一个二进制文件依赖哪些库,然后将它们一一复制到 chroot 目录的对应路径下(如 liblib64)。

CentOS如何限制用户只访问自己的目录?

下表小编总结了构建基础 shell chroot 环境通常需要的目录结构:

目录路径 用途
bin 存放用户可执行的二进制命令,如 bash, ls, cat
lib / lib64 存放 bin 目录下命令所依赖的共享库文件
etc 包含基本的配置文件,如 passwd, group
home 被囚禁用户的家目录
dev 创建必要的设备文件节点,如 null, zero, tty

这种方法虽然提供了更大的灵活性,但维护起来也更繁琐,通常不建议除非有特殊需求。


相关问答 (FAQs)


A1: 这通常是权限问题。chroot 的根目录(/home/sftp_jail)必须由 root 用户拥有,并且权限不能超过 755,用户在其 chroot 环境中的家目录(/home/sftp_jail/upload)必须授予该用户完全的读写执行权限(chown user:user /home/sftp_jail/upload),如果权限配置错误,用户将无法正常访问其目录或执行操作。


A2: 这是因为在 sshd_config 配置中,我们使用了 ForceCommand internal-sftp 指令,这个指令强制用户登录后只能启动 SFTP 服务,而无法获得一个交互式的 shell,如果你希望用户能够获得 shell,你需要:1) 确保用户的 shell 不是 /sbin/nologin;2) 移除或注释掉 ForceCommand internal-sftp;3) 在 chroot 目录中手动构建一个包含 shell 及其依赖库的完整运行环境,这是一个更复杂的配置,仅建议在确实需要时使用。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-06 02:11
下一篇 2025-10-06 02:14

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信