1. 受权网站开发人员使用 sftp 上传项目文件 2. 必须使用密钥方式,去掉密码验证方式 3. 简单起见,所有放在 /var/www 目录下 4. 熟练以后,能够在继续修改 sshd 配置文件指定到具体的子目录下 5. 咱们的人员很少,采用对每个帐号分别设置的方法 6. 是否使用组策略方式更方便,目前不熟练!之后再处理
1. 建立 sftp 帐户 (假设名字:sftp123) 2. 复制管理员的 .ssh 目录到这个 sftp 帐户的 home 下(/home/sftp123) 3. 修改 /home/sftp123/.ssh 目录的全部者为 sftp123 4. 修改 authorized_keys 文件,只保留管理员和 sftp123 的 publickey 5. 修改 sshd 配置,限制 sftp123 的目录和命令权限 ** 如下必须有root权限的管理员帐号来操做,假设 dhbm
sudo adduser sftp123 禁止 sftp 帐户 shell 登陆 sudo usermod -s /usr/sbin/nologin sftp123
直接从管理员 cp sudo cp -R /home/dhbm/.ssh /home/sftp123 改变 .ssh 目录的拥有者 sudo chown -R sftp123:sftp123 /home/sftp123/.ssh 改变 .ssh 目录属性 sudo chmod -R 755 /home/sftp123/.ssh 只保留管理员和 sftp123 的 publickey cd /home/sftp123/.ssh ls authorized_keys id_rsa id_rsa.pub sudo vim authorized_keys sudo systemctl restart sshd ** 若是只操做到这里,sftp123 是能够ssh 登陆到服务器的
sudo vim /etc/ssh/sshd_config 文件最后已经有一个 Example of overriding settings,在最后追加 # add by wzh 20190122 only SFTP users # only in /var/www # 告诉SSH服务器仅将如下命令应用于指定的用户 Match User sftp123 # 强制SSH服务器在登陆时运行SFTP服务器,禁止shell访问 ForceCommand internal-sftp # 容许此用户进行密码验证 PasswordAuthentication no # 只容许访问这个目录 ChrootDirectory /var/www # 不容许端口转发 PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no 保存退出后 sudo systemctl restart sshd
1. ssh sftp123@192.168.1.192 返回结果: sftp123@192.168.1.192's password: This service allows sftp connections only. Connection to 192.168.1.192 closed. 2. sftp sftp123@192.168.1.192 返回结果 Connected to sftp123@192.168.1.192. sftp> 3. FileZilla 创建一个站点,以下图
链接成功
html
发现问题: 测试发现,sftp123,sftp456 在本地是能够登陆的,说明没有彻底限制到 Shell 继续学习,找找怎么回事?
如下两种方式均可以去掉用户的 shell 权限 sudo usermod -s /bin/false sftp456 sudo usermod -s /usr/sbin/nologin sftp123 登陆时,返回一个错误状态,而后当即退出 ** 在 useradd 的时候直接加上 shell 限制,就不会有这个问题了! sudo adduser sftp789 --shell /bin/false 继续复习一次 sftp789
sftp sftp123@192.168.1.161 返回错误: packet_write_wait: Connection to 192.168.1.161 port 22: Broken pipe Connection closed 以上操做先在 ubuntu 18.04 下操做的,没有发现问题 可是回到 ubuntu 16.04 Server ,出现以上错误! 1. 按照网上的建议,/var/www 目录拥有者都是 root ,可是 SFTP 上传一个文件以后,文件固然属于 sftp456 了! sudo chown -R root:root /var/www sudo chmod 755 /var/www *** 删除了刚刚上传的文件!仍是同样的问题啊! 2. 按照以上操做设置,一条一条的加上去,最后 PasswordAuthentication 这一条加上就出错! 再删除这一条,也不行! # add by wzh 20190122 only SFTP users # only in /var/www Match User sftp123 ForceCommand internal-sftp ChrootDirectory /var/www PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no PasswordAuthentication no 3. 只能删除掉 Match User 这一段以后,从新来过! 再加上的时候,不要 PasswordAuthentication no z h这一行! 从新来过!发现问题还在 /var/www 这个目录的拥有者问题 sudo rm -rf /var/www sudo mkdir /var/www 以后,sftp 马上就正常了! 那么上传文件以后,怎么办? 四、使用 adduser 加上的帐号,会自动创建 /home/XXXX ,可是该目录属于XXX:XXX 将它改为 root:root 五、通过屡次尝试,最终问题仍是在 ChrootDirectory 目录的权限上
sudo adduser sftp193 sudo cp -R /home/dhbm/.ssh /home/sftp193 sudo chown -R sftp193:sftp193 /home/sftp193/.ssh sudo chown -R root:root /home/sftp193 sudo chown -R sftp193:sftp193 /home/sftp193/.ssh sudo chmod -R 755 /home/sftp193/.ssh sudo chmod -R 755 /var/www/ 测试SSH: ssh -p 3193 sftp193@192.168.1.193 返回错误 This service allows sftp connections only. Connection to 192.168.1.193 closed. 测试SFTP: sftp -P 22 sftp193@192.168.1.193 在 /var/www/ 创建几个测试目录 sudo chmod -R 777 /var/www/test sudo chmod -R 777 /var/www/test.XXXX.cn sudo chmod -R 777 /var/www/html ** 原本还作了按照组和成员分别控制的操做,直接贴出来我参考的博文 ** 我是彻底照着该篇文章走了一遍以后,才获得最终的解决办法的!谢谢这位朋友! ** 不过,文章中不少命令都没有空格分开!
https://blog.csdn.net/gong_xucheng/article/details/39319941shell