Linux-centos7配置SFTP(安全文件传送协议)

2 篇文章 0 订阅

根目录只能是root用户或是root用户组

r是4,w是2,x是1
根目录下除了root用户其他用户最高权限755(否则会无法连接sftp)

当为[ d ]则是目录
当为[ - ]则是文件;
若是[ l ]则表示为链接文档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
查看用户:cut -d : -f 1 /etc/passwd
cat /etc/passwd
创建一个新用户 useradd user1 
删除user1这个用户:userdel -r user1
查看用户组:cut -d : -f 1 /etc/group
cat /etc/group
创建一个新用户组 groupadd group_name 
删除一个用户组 groupdel group_name 
passwd 修改口令
passwd user1 修改一个用户的口令 (只允许root执行)

1、常用创建sftp用户

1、创建 sftp 用户组

groupadd sftp

1.1、创建用户mysftp (开始)
-s Shell文件 指定用户的登录Shell
-G 加入 sftp 用户组
-M:不要自动建立用户的登入目录。

useradd -s /sbin/nologin -M mysftp
useradd -s /sbin/nologin -M  mysftp2

1.2、设置用户密码

passwd mysftp
passwd mysftp2

2、修改配置文件sshd_config
使用vim编辑/etc/ssh/sshd_config:

  注释掉下面这一行:
#Subsystem sftp /usr/libexec/openssh/sftp-server
启用internal-sftp添加
Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp

在sshd_config最后加入下面这几行:限制用户mysftp,mysftp2访问的根目录
AllowTcpForwarding no
X11Forwarding no

Match User mysftp #这行用来匹配用户
ChrootDirectory /home/sftp #用chroot将用户的根目录指定到/home/sftp ,这样用户就只能在/home/sftp下活动
ForceCommand    internal-sftp #指定sftp命令

Match User mysftp2
ChrootDirectory /home/sftp
ForceCommand    internal-sftp

3、重启SSH服务(结束)
systemctl restart sshd
#关闭SElinux:

vi /etc/sysconfig/selinux

#找到如下这行 
SELINUX=enforcing

#修改为
SELINUX=disabled

4、mysftp2 用户访问sftp
sftp mysftp2@IP

2、其他案例:创建sftp用户,但是需要读取user1下的文件 (默认不创建home目录)

前提:创建sftp用户,但是需要读取user1 /var/opt/ntp 和/var/opt/ntp2下的文件
 user1:user1group  /var/opt/ntp
 user1:user1group  /var/opt/ntp2

1、sudo useradd -s /sbin/nologin -M leosftp1
2、passwd leosftp1 # leojiang@123
3、编辑 /etc/ssh/sshd_config 文件
注释掉下面这一行:
#Subsystem sftp /usr/libexec/openssh/sftp-server
启用internal-sftp添加
Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp
Match User leosftp1
    ChrootDirectory /var/opt_sftp
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no
    PermitTunnel no
    AllowAgentForwarding no
    PermitOpen none

4、mount
# mount --bind 源目录(实际存放文件的目录) 目标目录(临时创建的空目录)
sudo mount --bind /var/opt/ntp /var/opt_sftp/ntp
sudo mount --bind /var/opt/ntp2 /var/opt_sftp/ntp2
# 检查有哪些目录mount了
mount | grep /var/opt_sftp/
# 解除绑定 (不会删除源目录的文件)
#umount /var/opt_sftp/ntp
#umount /var/opt_sftp/nt2

5、为 /var/opt/ntp 和 /var/opt/ntp2 目录设置get 文件的权限
chmod 755 /var/opt_sftp/ntp
# 或读写执行权限
chmod 775 /var/opt_sftp/ntp2

# 按照组指定也可以,下面执行完权限是drwxrwsr-x+ 
#sudo setfacl -R -m u:leosftp1:rwx /var/opt/ntp
#setfacl: 设置文件访问控制列表 (ACL)。
#-R: 递归地应用权限修改,包括目录下的所有文件和子目录。
#-m: 添加指定的权限。
#u:user1: 对用户 user1 应用权限设置。
#rwx: 赋予读、写和执行权限。

6、把创建的leosftp1 sftp用户添加到,user1 组中
# usermod -a -G groupname username
usermod -a -G user1 leosftp1 

6、重新加载 SSH 服务
systemctl reload sshd

如果连接sftp的server想要sftp免密登录:

# 如果想使用这个sftp的ip免密登录本机的sftp,
# 需要把remote-server-ip 的~/.ssh/id_rsa.pub 放到sftp服务器的sftp用户下的authorized_keys中即可
# 如果没有homemul可以手动创建即可,不用chown 修改权限
mkdir -p /home/leosftp1/.ssh
touch /home/leosftp1/.ssh/authorized_keys

#cp ~/.ssh/id_rsa.pub(remote-server-ip) 到 ~/.ssh/authorized_keys(sftp服务器的sftp用户下)



相关命令:

1、添加用户附加到组,应该用 加上 -a 选项防止离开其他用户组,仅仅做为 这个用户组 groupA 的成员。
加 -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。

[root@master sftp]# usermod -a -G groupname username

2、查看下用户组

[root@master sftp]# cat /etc/group
root:x:0:
.
.
.
mysftp:x:1000:
mysftp2:x:1001:mysftp

3、权限设置
修改文件夹 拥有者

[root@master sftp]# chown -R mysftp2:mysftp /home/sftp/user1

查看下修改后的状态user1 user2是创建的文件夹

[root@master sftp]# ll
total 8
drwxr-xr-x 2 mysftp2 mysftp 4096 Jul 24 13:43 user1
drwxr-xr-x 2 root    root   4096 Jul 24 13:43 user2

4、修改文件权限

[root@master sftp]# chmod -R 544 /home/sftp/user1

查看下修改后的状态

[root@master sftp]# ll
total 8
dr-xr--r-- 2 mysftp2 mysftp 4096 Jul 24 13:43 user1
drwxr-xr-x 2 root    root   4096 Jul 24 13:43 user2

5、mysftp2 用户访问sftp
sftp mysftp2@IP
输入当时设置的密码即可访问

-c comment 指定一段注释性描述。备注文字保存在passwd的备注栏中。 
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户ID号,如果同时有-o选项,则可以重复使用其他用户的标识号。
-D:变更预设值。
-e:指定账号的有效期限,缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。

常见问题:

1、

[root@LXCL-Cache home]# sftp btadmin@localhost
btadmin@localhost's password:
packet_write_wait: Connection to ::1 port 22: Broken pipe
Couldn't read packet: Connection reset by peer

解决办法1
使用vim编辑/etc/ssh/sshd_config:

Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/

UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes

修改位置

UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes

Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/

重启SSH服务:
systemctl restart sshd
登录:
sftp mysftp2@IP

2、还有可能是其他的原因

[root@LXCL-Cache home]# sftp btadmin@localhost
btadmin@localhost's password:
packet_write_wait: Connection to ::1 port 22: Broken pipe
Couldn't read packet: Connection reset by peer

ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755

  • 目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。
  • 目录开始一直往上到系统根目录为止都不可以具有群组写入权限

3、如果没有导入导出权限,需要在sftp的下一层创建文件夹并给与权限即可,如果直接给关联的目录权限可能导致sftp无法使用

如果关联的sftp目录为
drwxr-xr-x 3 root mysftp  /home/testfile
如果想要有导入导出权限可以在下一层给权限eg:
drwxr-xr-x 2 mysftp2 mysftp2 /home/testfile/sftp_testfile

4、如果无法免密
SELinux:如果 SELinux 开启,可能会阻止公钥认证。临时关闭 SELinux 以测试

# 立即生效
setenforce 0

# 永久生效
vi /etc/selinux/config
SELINUX=disabled

# 检查状态
sestatus

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值