实现的功能:
三个用户,其中一个管理员用户和两个普通用户;管理员用户可以对普通用户的的家目录拥有写的
权限,普通用户对自己的家目录只有读的权限;而且进入服务器之后直接进入到自己的家目录下,无法进入到其他普通用户的家目录下。
新建普通用户组和管理员用户组
groupadd sftpadmin
groupadd sftp
创建普通用户和管理员用户
useradd -g sftp -s /bin/false user1
useradd -g sftp -s /bin/false user2
useradd -g sftpadmin -s /bin/falsesftpadmin
创建密码:
passwd user1 mV4!zDieCDgYG6n
passwd user2
passwd sftpadmin
创建对应用户的根目录。
mkdir -pv /data/sftp/{user1,user2}/share
指定用户的根目录
usermod -d /data/sftp/ sftpadmin
usermod -d /data/sftp/user1/ user1
usermod -d /data/sftp/user2/ user2
修改配置文件:
vim /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server(注释此行)
添加以下内容
Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Match user sftpadmin
ChrootDirectory /data/sftp
ForceCommand internal-sftp
设置目录的权限:
chown root:sftp /data/sftp/{user1,user2}
chmod 755 /data/sftp/{user1,user2}
chown root:sftpadmin /data/sftp/
chmod 755 /data/sftp/
chown sftpadmin:sftp /data/sftp/{user1,user2}/share/
chmod 750 /data/sftp/{user1,user2}/share/
重启服务:
service sshd restart
systemctl restart sshd
新建了一个sftp的管理员账号:sftpadmin密码:12345
两个普通用户:user1 user2 密码都是12345
sftpadmin他的根目录是/data/sftp/
user1的根目录/data/sftp/user1/share
user2的根目录/data/sftp/user2/share
以管理员的身份登录会看到两个普通用户的目录,管理员对其目录有写的权限
如下:
sftp sftpadmin@127.0.0.1
sftp> ls
user1 user2
管理员需要将文件写到普通用户的share目录下。
普通用户登录的话可以直接 就会进入到本用户的家目录
sftpuser1@127.0.0.1
Connected to 127.0.0.1.
sftp> ls
share
sftp>
指定端口连接:sftp -oport=58822sftpadmin@127.0.0.1
错误总结:
#此命令可以查看sshd的配置文件里有错的。
/usr/sbin/sshd -T
2、sftp连接时特别慢,而且警告:reverse mapping checking getaddrinfo for bogon [10.91.0.227] failed- POSSIBLE BREAK-IN ATTEMPT!
可能原因:在sftp服务器上找到配置文件/etc/ssh/sshd_config,将GSSAPIAuthentication
yes 改为GSSAPIAuthentication no
该问题是由dns解析导致,在客户端的配置文件/etc/ssh/ssh_config中查看是否有UseDNS no,如果有,注释掉该行
3. 另外需要注意的是:ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root, 权限是 750 或者 755。注意以下两点原则:
目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。
目录开始一直往上到系统根目录为止都不可以具有群组写入权限
sftp> get /var/index.php /home/libai/
这条语句将从远程主机的 /var目录下将 index.php 下载到本地 /home/libai/目录下。
sftp> put/home/libai/downloads/linuxgl.pdf /var/
这条语句将把本地 /home/libai/downloads/目录下的 linuxgl.pdf文件上传至远程主机/var 目录下。