如何在Ubuntu Linux系统中拒绝特定主机访问共享目录
如何在Ubuntu Linux系统中拒绝特定主机访问共享目录
嘿,针对你的场景——用scp让两台主机访问Server上的共享目录,现在要禁止Host2但保留Host1的访问权限——我给你几个实用的Ubuntu本地方案,你可以根据实际情况选择:
方案一:通过SSH访问控制列表(最直接,适合完全限制Host2的SSH/scp访问)
因为scp是基于SSH协议的,我们可以直接通过系统的hosts.allow和hosts.deny来控制主机的SSH访问权限:
- 先编辑
hosts.allow文件,添加规则允许Host1访问:
在文件末尾添加一行:sudo nano /etc/hosts.allowsshd: Host1的IP地址或主机名(比如sshd: 192.168.56.101) - 再编辑
hosts.deny文件,添加规则拒绝Host2:
在文件末尾添加一行:sudo nano /etc/hosts.denysshd: Host2的IP地址或主机名(比如sshd: 192.168.56.102)
设置完成后,Host2连SSH连接都无法建立,自然没法用scp访问共享目录。不过这个方案会完全禁止Host2的所有SSH操作,如果你只是想限制特定目录而非整个SSH,建议看下面的方案。
方案二:通过SSH密钥限制目录访问(适合密钥登录场景,精准限制单个目录)
如果Host1和Host2都是用SSH密钥登录Server的,我们可以修改Host2的密钥授权规则,让它无法访问目标共享目录:
- 登录到Server,打开密钥授权文件:
(如果是root用户,路径为nano ~/.ssh/authorized_keys/root/.ssh/authorized_keys) - 找到Host2对应的公钥行,在开头添加限制命令,示例如下:
把command="echo 'Access denied to /shared_dir'; exit 1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ.../shared_dir替换成你实际的共享目录路径。这样当Host2尝试用scp访问该目录时,会直接收到拒绝提示,无法进行操作。
方案三:通过文件系统ACL精准控制目录权限(适合不同用户登录的场景)
如果Host1和Host2在Server上使用的是不同的用户账号,我们可以用ACL(访问控制列表)给共享目录设置精细的权限:
- 先确保安装了ACL工具:
sudo apt update && sudo apt install acl - 假设Host1用的是
user1,Host2用的是user2,共享目录为/shared_dir:- 给
user1添加读写执行权限:sudo setfacl -m u:user1:rwx /shared_dir - 给
user2添加完全拒绝权限:sudo setfacl -m u:user2:--- /shared_dir
- 给
设置完成后,Host2登录的user2账号将完全无法访问该目录,而Host1的user1账号可以正常使用。
备注:内容来源于stack exchange,提问作者Rand
相关产品推荐
相关产品推荐

