Chroot OpenSSH服务器

在OpenBSD环境下搭建各种服务器的相关讨论。

版主: lionuxchenjun天地乾坤

回复
头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

Chroot OpenSSH服务器

帖子 leo » 2010-01-21 13:21

此方法最早在www.openbsdonly.org(应该是国内最大的OpenBSD专门论坛吧.)上看到的,使用后效果不错。原文链接:http://www.openbsdonly.org/viewtopic.php?f=17&t=502


在OpenBSD上chroot OpenSSH
(此方法仅允许登录sftp,不提供shell)
OpenSSH的用途越来越广了,尽管没有华丽的界面,配置也不算很方便,但是有很多商业软件里全可以找到它的踪迹。
我们这里说一下有关OpenSSH的Chroot,OpenSSH默认设置并没有Chroot,这多少让人感到有些遗憾,但是通过简单配置就可以实现。

1.首先创建一个sftpuser组,再添加属于此组的用户123 (读者自己根据需要调整用户名)

代码: 全选

# groupadd sftpuser
# [color=red]adduser[/color]
Use option ``-silent'' if you don't want to see all warnings and questions.
Reading /etc/shells
Check /etc/master.passwd
Check /etc/group
Ok, let's go.
Don't worry about mistakes. There will be a chance later to correct any input.
Enter username []: [color=red]123[/color]
Enter full name []: [color=red]Enter[/color]
Enter shell csh ksh nologin sh [nologin]: [color=red]nologin[/color] (不给shell)
Uid [1000]: [color=red]Enter[/color]
Login group 123 [123]: [color=red]sftpuser[/color]
Login group is ``sftpuser''. Invite 123 into other groups: guest no
[no]: [color=red]Enter[/color]
Login class authpf daemon default staff [default]:[color=red]Enter[/color]
Enter password []:[color=red]121[/color]
Enter password again []:[color=red]121[/color]
Name: 123
Password: ****
Fullname: 123
Uid: 1000
Gid: 1001 (sftpuser)
Groups: sftpuser
Login Class: default
HOME: /home/123
Shell: /sbin/nologin
OK? (y/n) [y]: [color=red]Enter[/color]
Added user ``123''
Add another user? (y/n) [y]: [color=red]n[/color]
Goodbye!
#
2.修改用户123的主目录权限,将这个目录的权限修改为root.wheel (注意这一步是必须的,否则无法实现chroot)

代码: 全选

# [color=red]chown root.wheel /home/123[/color]
3.修改/etc/sshd_config文件,注释掉原来的"Subsystem"语句,并在结尾添加上如下内容,并保存退出

代码: 全选

Allowusers 123 456 789 (读者在这里可以随意添加用户,但用户必须属于sftpuser组,用空格分隔用户名)
Subsystem sftp internal-sftp
ChrootDirectory /home/123 (再强调一下,这里的 /home/123这个目录的属主及组必须是root.wheel)
Match Group sftpuser
ForceCommand internal-sftp
AllowTCPForwarding no
最后就可以重新启动OpenSSH,加载新配置并验证输入的内容。



附录
在其它OS上Chroot OpenSSH
这里以Opensolaris0906为例,先创建一个sshd用户;因为系统默认没有安装合适的编译器,所以选择菜单"系统"—" 系统管理"— "软件包管理器 "—搜索一下"gcc",然后选择所有的相关软件包,再选择"安装/更新"以安装GCC;然后下载最新的OpenSSH-5.2p1.tar.gz,编译安装:

代码: 全选

# tar zxf openssh-5.2p1.tar.gz
# cd openssh-5.2p1
# make package
# pkgadd -d OpenSSH-OpenSSH_5.2p1-Solaris-i386.pkg 
然后添加sftpuser组及所属用户123,123的所属目录是 /root/export/home/123/,我们假设把sftp的用户chroot在这个目录下,
这里同样需要注意的是:
1. /root/export/home/123/ 目录的属主必须是root,属组必须为root或adm,另外123的shell为false。

2.修改 /usr/local/etc/sshd_config文件,注释掉原来的“Subsystem”语句,并在文件的末尾加上如下语句:

代码: 全选

Allowusers 123
Subsystem sftp internal-sftp
ChrootDirectory /export/home/123
Match Group sftpuser
ForceCommand internal-sftp
AllowTCPForwarding no
3.先重新启动OpenSolaris,再启动OpenSSH
# /usr/local/sbin/sshd

4.如果设定的正确,此时OpenSSH已经可以正常工作了,但是你会发现系统关闭时会提示您OpenSSH无法绑定在22端口,因为已经被占用了,这也可能是OpenSolaris为自己的SunSSH预留的缘故,另外鉴于22端口经常被扫描,建议您更换一个端口,编辑OpenSSH的配置文件 /usr/local/etc/sshd_config,将里面的#port 22,前面的#去掉,然后将后面的数字修改为你需要的端口就可以了。

@gobsd.org

天地乾坤
钾 K
帖子: 17
注册时间: 2010-02-27 13:23

帖子 天地乾坤 » 2010-03-01 7:01

OpenSSH 太有名了,可能大家没觉得他的用处,实际上他从技术上挽救了民主和人权。好了不多说了,这是一个纯技术论坛。掌嘴,两个大嘴巴子。

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: Chroot OpenSSH服务器

帖子 f5b » 2012-04-13 17:45

补充最近的研究,备忘

OpenSSH 4.9以上版本sftp server的chroot说明

准备工作:
shell为ksh等或false用户可以ftp登陆服务器,容易因此泄露密码,所以sftp only用户的shell最好是nologin,
创建并加入一个叫做sftponly的组管理会比较方便

编辑/etc/ssh/sshd_config
在条件
Subsystem sftp /usr/libexec/sftp-server
后面,必须再添加Match参数,nologin用户才可以sftp登陆,否则显示错误信息

Match例子A
Match Group sftponly
ForceCommand internal-sftp
ChrootDirectory /home/chrootdir/%u

Match例子B
Match User testuser
ChrootDirectory /home/dir/
ForceCommand internal-sftp

Match例子C
Match Group sftponly
ChrootDirectory %h
ForceCommand internal-sftp

Match例子D (效果同C)
Match Group sftponly
ChrootDirectory /home/%u
ForceCommand internal-sftp

注意:
1、ChrootDirectory目录必须属于root所有并且其他用户不可写。
这样一来,非root用户在ChrootDirectory目录不能写入,用root用户在ChrootDirectory目录下面创建属主是某用户的目录即可。

2、
设置ChrootDirectory后必须相应手工配置环境参数,很复杂。
为简单化,启用internal-sftp可省却配置环境参数

3、一旦ChrootDirectory而没有做特殊配置,用户仅能sftp登陆,不能shell登陆(即使shell是 ksh)。

f5b
锆 Zr
帖子: 643
注册时间: 2011-10-22 20:43

回复: Chroot OpenSSH服务器

帖子 f5b » 2012-04-13 17:51

man sftp-server
记录上传下载文件的详细信息,需要调节-l log_level 等,最好能另外为独立的日志文件
做好这个,就完全可以替代一般的ftp server 了
改天再研究,或者有经验兄弟请分享一下


-l log_level
Specifies which messages will be logged by sftp-server. The
possible values are: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG,
DEBUG1, DEBUG2, and DEBUG3. INFO and VERBOSE log transactions
that sftp-server performs on behalf of the client. DEBUG and
DEBUG1 are equivalent. DEBUG2 and DEBUG3 each specify higher
levels of debugging output. The default is ERROR.

-R Places this instance of sftp-server into a read-only mode.
Attempts to open files for writing, as well as other operations
that change the state of the filesystem, will be denied.

-u umask
Sets an explicit umask(2) to be applied to newly-created files
and directories, instead of the user's default mask.

头像
acheng
锌 Zn
帖子: 581
注册时间: 2011-07-07 21:52

回复: Chroot OpenSSH服务器

帖子 acheng » 2012-04-15 19:38

OpenSSH的知名度要远高于OpenBSD,不过知道OpenSSH和OpenBSD关系的可能不是太多

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 23 访客