Linux sftp服务搭建,新增账户
注意:操作前记得多开一个窗口用top挂起,修改失败可能会导致ssh再也连接不上!
1、创建用户,并且不允许登录
#创建用户,并且不允许登录
useradd -M -s /bin/false pppsftp
#设置密码
passwd pppsftp
#设置用户不过期
chage -M -1 pppsftp
2、创建文件夹作为 sftp 账户的上传文件目录
上传文件目录目录拥有者必须是root,并且其他用户不能拥有写入的权限(ChrootDirectory 这个选项要求的),即权限不能超过755(否则连不上)
也就是 /data/sftp/pppsftp 每一层目录拥有者必须是root,并且权限不能超过755
#创建sftp根文件夹,/data/sftp/拥有者必须是root,并且其他用户不能拥有写入的权限,/data/sftp/每一层目录权限都不能超过755,且都是root用户
mkdir -p /data/sftp
chmod -R 755 /data/sftp
# 创建专属用户的文件,并修改文件夹属性和权限
mkdir -p /data/sftp/pppsftp
chown pppsftp:pppsftp /data/sftp/pppsftp
chmod 700 /data/sftp/pppsftp
3、修改 sftp 配置文件
vim /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server #注释掉此行并添加一下行
Subsystem sftp internal-sftp # SFTP子系统使用内置的SFTP服务器
#Match Group pppsftp # 匹配组,这里我没有使用组来匹配,我使用的下面用户来匹配。
Match User pppsftp # 以下配置仅这里配置的用户或者组有效。多个用户或者组之间用逗号分割。
ChrootDirectory /data/sftp/%u # 这里%u代表用户的用户名,以便为不同的用户动态地设置 chroot 目录。
ForceCommand internal-sftp # 强制用户使用内置的SFTP服务器进行会话,而不允许执行其他命令
AllowTcpForwarding no # 禁止TCP转发
X11Forwarding no #禁止X11转发
实际使用的配置
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User pppsftp
ChrootDirectory /data/sftp/
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
PermitTTY no
根据需要,修改并发数,打开注释并设置 MaxStartups 1000
默认是”# MaxStartups 10:30:60”,去掉注释,并修改为”MaxStartups MaxStartups 50:30:60”
sftp加载并发数较大时偶发报错
在测物理机版本的gcdw时遇到这样一个问题:
在脚本中并发了20个加载(sftp加载)语句,查看脚本执行结果发现会偶发性报错:
Gbase general error:Task 6088 failed,I/O operation on sftp://gbase:@10.10.14.88/opt/lineitem1.tbl failed with error - Failed initialization. File name sftp://gbase:@10.10.14.88/opt/lineitem1.tbl
但是把该load语句手动在数据库中执行又发现可以执行成功。
原因:”MaxStartups 10:30:60”代表的含义是:当连接数达到10时就开始拒绝连接了;当达到10时,之后的连接有30的概率被拒绝掉;达到60,之后的连接就全部拒绝,
所以加载并发数超过10之后会有概率被拒绝,出现以上报错,更改MaxStartups使其大于加载并发数即保证并发加载能正常执行。
4、检查配置是否正确,并重启sshd
#没有任何提示 或者 没有错误提示 就是正确的
sshd -t
#重启sshd
service sshd restart 或者 systemctl restart sshd
#查看sftp服务启动状态:
service sshd status
5、登录测试,默认端口22
sftp pppsftp@192.168.111.201
sftp pppsftp@192.168.111.201
Authorized users only. All activity may be monitored and reported
pppsftp@192.168.111.201's password:
Connected to pppsftp@192.168.111.201.
sftp> ls
data
# 使用其他端口号:sftp -oPort=10022 pppsftp@192.168.111.201
6、再添加一个账户的正确做法
比如再新增一个用户:hhhsftp
#创建用户,并且不允许登录
useradd -M -s /bin/false hhhsftp
#设置密码
passwd hhhsftp
#设置用户不过期
chage -M -1 hhhsftp
#创建sftp文件夹,/data/sftp/hhhsftp 每一层目录权限都不能超过755,且都是root用户 (这一步在上面已经创建过了,可以跳过)
mkdir -p /data/sftp/
chmod -R 755 /data/sftp/
# 创建专属用户的文件,并修改文件夹属性和权限
mkdir -p /data/sftp/hhhsftp/
chown hhhsftp:hhhsftp /data/sftp/hhhsftp/
chmod 700 /data/sftp/hhhsftp/
# 修改配置文件
vim /etc/ssh/sshd_config
### 修改配置如下:
Match User pppsftp,hhhsftp # 多个用户或者组之间用逗号分割
# 检查配置是否正确,并重启sshd
#没有任何提示 或者 没有错误提示 就是正确的
sshd -t
#重启sshd
service sshd restart
7、专属用户的目录跟ChrootDirectory配置的关系说明
使用如下命令创建专属用户的目录
mkdir -p /data/sftp/hhhsftp
chown hhhsftp:hhhsftp /data/sftp/hhhsftp/
chmod 755 /data/sftp/hhhsftp/ # 注意是755,不是700
那么ChrootDirectory需要设置为:/data/sftp/
用户hhhsftp使用winSCP登陆后查看到的根目录是/data/sftp/,但是只能对/data/sftp/hhhsftp目录有权限(755)
(能看到其他用户,比如/data/sftp/pppsftp的目录,不过没有操作权限),因此保险起见,可以把用户专属目录权限设置为700,这样一来,只有自己能查看,其他用户无法查看自己目录下的文件
若ChrootDirectory设置为:/data/sftp/%u,则用户hhhsftp使用winSCP不能登陆

浙公网安备 33010602011771号