最小化权限的ssh账号-只能使用TCP转发
Linux 二月 22nd, 2010建立只能使用ssh“转发”功能的系统账户
为了满足“翻墙”的需要,在国外的Linux主机上(比如 DreamHost )上建个可 ssh登录的用户,使用 ssh 的 Tunnel 来作代理是十分常见的方法。
但是主人往往又想最小化用户权限,以避免对系统造成影响。最简单的办法就是,禁止用户登录。
其实 ssh 可以连接到 sshd 但是不执行远程命令(默认是启动用户设定的 shell ),使用 -N 参数即可。
在服务器上建一个 username :
添加用户:useradd -s /bin/false username,将用户的shell设置成/bin/false。这样用户就无法与系统进行交互。
设置密码:passwd username
小技巧:
也可以使用 /usr/bin/passwd 作为用户的 shell ,这样用户就可以通过登录而来自主修改密码。需要注意的是,需要将 /usr/bin/passwd 这一行写进 /etc/shells文件。
sshd 认证通后之后,会检查设定的 shell 是否登记在 /etc/shells 文件中,若已经登记,则fork自己,然后fork出来的子进程再exec 设定的 shell 。而 ssh 的 -N 参数,则是告诉 sshd 不需要执行 shell。
建立Tunnel:
ssh -D 1080 -qfnN username@hostname
输入密码即可使用(也可以用key认证)。
Windows的话,可以使用plink.exe或者MyEnTunnel(MyEnTunnel 本质上也是使用plink.exe来建立Tunnel)。
此时账号username 可以通过sshd的认证使用 TcpForwarding ,但是不能运行 shell,不能与系统交互。刚好可以用来为朋友提供国外的代理翻墙。
参数详解:
-D 1080 建立动态Tunnel,监听在本地1080端口。
-q 安静模式。
-f ssh在后台运行,即认证之后,ssh退居后台。
-n 将 stdio 重定向到 /dev/null,与-f配合使用。
-N 不运行远程程序。即通知 sshd 不运行设定的 shell。
二月 22nd, 2010 at 9:17
很好,正好需要
二月 22nd, 2010 at 9:21
很好,正好需要
补充一下:对已有帐号禁止其shell交互使用:
usermod -s /bin/false username
曹宇伟 Reply:
二月 22nd, 2010 at 13:09
Nice!
二月 22nd, 2010 at 22:10
[...] 感谢老曹,本文原址:http://www.bsdmap.com/2010/02/22/create-tunnel-user/ [...]
二月 22nd, 2010 at 22:10
大家都nice…
二月 22nd, 2010 at 23:16
你要是再写个邮件系统配置那就完美了哈哈
曹宇伟 Reply:
二月 22nd, 2010 at 23:38
啥样的邮件系统配置啊?
你要干啥?
二月 22nd, 2010 at 23:26
已阅….
二月 23rd, 2010 at 0:06
这样之后,用putty还能登陆么?
曹宇伟 Reply:
二月 23rd, 2010 at 0:44
不能。
三月 6th, 2010 at 16:51
很不错的博客,顶下你
三月 23rd, 2010 at 9:24
请问下怎么禁止用户的SFTP ?
曹宇伟 Reply:
四月 25th, 2010 at 3:42
这样建的用户本来就不可以使用sftp
四月 24th, 2010 at 3:29
[...] http://www.bsdmap.com/2010/02/22/create-tunnel-user/ 分类: 系统网络 标签: ssh 评论 (0) Trackbacks (0) 发表评论 [...]
五月 1st, 2010 at 15:06
[...] 为了满足“翻墙”的需要,在国外的Linux主机上(比如 DreamHost )上建个可 ssh登录的用户,使用 ssh 的 Tunnel 来作代理是十分常见的方法。 但是主人往往又想最小化用户权限,以避免对系统造成影响。最简单的办法就是,禁止用户登录。 其实 ssh 可以连接到 sshd 但是不执行远程命令(默认是启动用户设定的 shell ),使用 -N 参数即可。 在服务器上建一个 username : 添加用户:useradd -s /bin/false username,将用户的shell设置成/bin/false。这样用户就无法与系统进行交互。 设置密码:passwd username 小技巧: 也可以使用 /usr/bin/passwd 作为用户的 shell ,这样用户就可以通过登录而来自主修改密码。需要注意的是,需要将 /usr/bin/passwd 这一行写进 /etc/shells文件。 sshd 认证通后之后,会检查设定的 shell 是否登记在 /etc/shells 文件中,若已经登记,则fork自己,然后fork出来的子进程再exec 设定的 shell 。而 ssh 的 -N 参数,则是告诉 sshd 不需要执行 shell。 建立Tunnel: ssh -D 1080 -qfnN username@hostname 输入密码即可使用(也可以用key认证)。 Windows的话,可以使用plink.exe或者MyEnTunnel(MyEnTunnel 本质上也是使用plink.exe来建立Tunnel)。 此时账号username 可以通过sshd的认证使用 TcpForwarding ,但是不能运行 shell,不能与系统交互。刚好可以用来为朋友提供国外的代理翻墙。 参数详解: -D 1080 建立动态Tunnel,监听在本地1080端口。 -q 安静模式。 -f ssh在后台运行,即认证之后,ssh退居后台。 -n 将 stdio 重定向到 /dev/null,与-f配合使用。 -N 不运行远程程序。即通知 sshd 不运行设定的 shell。 zt from http://www.bsdmap.com/2010/02/22/create-tunnel-user/ [...]