要求:
openssh-server版本大于等于4.8p1, 这主要因为本文介绍的配置需要用到新配置项ChrootDirectory。
首先,检查下自己机器上的ssh版本:
下面开始步入正题吧,教给大家具体的配置方法。
1、创建一个用户组,专门用于sftp用户
2、创建一个用户test
注意这里我们将test用户的shell设置为/bin/false使他没有登陆shell的权限
3. 编辑 /etc/ssh/sshd_config
找到Subsystem这个配置项,将其修改为
然后再到文件最尾处增加配置设定属于用户组sftpusers的用户都只能访问他们自己的home文件夹
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
保存,关闭文件。
4. 修改test用户home文件夹的权限,让其属于root用户
5. 重启sshd服务
6. 测试用户账号
$ ssh test@localhost
连接会被拒绝或者无法登陆
$ sftp tesst@localhost
登陆后你会发现你的账号无法切换到除自己home目录之外的地方的
可能的问题:
链接服务器时有这样的提示:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
原因在于:
ChrootDirectory的权限不满足要求。
请确保设定的目录必须为root用户所有,即确保sftp用户根目录的所有人为root, 权限为755或750。
我们通常会使用linux下的wc命令和其它命令结合来计算行和其他信息。
在Linux下用wc进行计数。返回文件的行数、字数、字节数等。
例如:
3 5 16 wc1.txt
输出信息依次:行数 字数 字节数 文件名称。再具体点,单个统计。
#wc -l filename:显示一个文件的行数
#wc -L filename:显示一个文件中的最长行的长度
#wc -w filename:显示一个文件的字数
注意:貌似wc统计的行算是用换行符来确定的。就是说最后一行要有换行符,最后wc的行数才是正确的,否则将会少一行。
为了说明这个问题,看一个perl的测试:
0 1 1
perl -e ‘print “a\n”‘|wc
1 1 2
上面的例子中print命令将a打印出来,如果不带换行符\n,则认为这一行不存在。
说明:
1:一个汉字占三个字节(未经验证,个人认为是两个字节),一个回车符等不可见字符也占一个字节
2:一行的末尾如果没有回车符,则不算是一行,也就是说,如果一个文件的最后一行末尾没有换行符,wc命令统计的行数会比实际行数少一,所谓实际行数是你所看到的行数,实际上,没有回车符,确实不能算作一行(注:若是在一个已存在的文本中,则默认为所有的行都有一个不可见的回车符)
找出在一个path下的最大文件,可以使用du命令:
du -sh[dirname|filename]
当前目录大小
du -sh.
当前目录下文件或目录的大小
du -sh*
显示前十个占用空间最大的文件或目录
du -s * | sort -nr | head
说明:
-h已易读的格式显示指定目录或文件的大小
-s选项指定对于目录不详细显示每个子目录或文件的大小