如何让某些 Unix 用户只能访问一个目录,例如
我想让以下用户名方面 仅访问以下目录 /var/opt/test/reports/*
我如何通过 Unix 实现这一点?
答案1
最简单的方法是使用负面 ACL,IE,明确禁止用户(称他用户编号)使用除您提到的目录之外的任何目录。
安装ACL后,以下命令
setfacl -m user:user_no:0 /home/my_home
会阻止他进入您的家。您必须记住明确阻止您希望禁止他进入的每个地方,但您必须记住允许使用某些目录(/usr、/bin..),否则您也会禁止他使用常规 Unix 命令。
您还应该允许他使用他的主目录(我认为帐户根本无法使用它)和您上面提到的目录。
或者,您也可以chroot账户。这可以通过两种方式完成:第一种,你只允许 ssh 访问,第二种,你 chroot shell 账户。第二种方法更复杂,我从未尝试过,所以我无法提供任何指导。你可以谷歌chroot shell 帐户。第一种方法很简单,只需修改文件 /etc/ssh/sshd_config,在最底部添加以下几行:
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
这会将用户绑定到其主目录(上面的 %h),并确保他可以访问 internal-sftp 帮助。此外,将 user_no 添加到 sftp 组,如下所示:
# usermod -G sftp user_no
# usermod -s /bin/false user_no
# chown root:root /home/user_no
# chmod 0755 /home/user_no
重要的命令是第二个命令:它确保用户永远不会获得 shell 访问权限。
最后,在用户主目录中创建指向您希望允许他访问的目录的符号链接:
# cd /home/user_no
# ln -s /var/opt/test/reports work
这将创建一个他可以访问的子目录,但不能创建任何文件,只能处理现有文件。如果您想允许他创建文件,则必须更改 /var/opt/test/reports 的权限。