Linux下搭建sftp服务器,分配只读和读写目录

环境:Ubuntu 14.04.5 LTS

前提:sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装

需求:创建用户,并指定该用户专属的目录,该目录下用户权限为只读。并指定该目录下的某个子目录用户权限为读写

添加用户

一、创建用户组testgroup

groupadd testgroup

二、创建用户testuser并加入用户组testgroup。-g testgroup的作用是加入testgroup用户组。-s /bin/bash的作用是设置用户的shell。如果配置为-s /bin/false,则用户没有shell,用户无法ssh登录也无法sftp登录。

useradd -g testgroup -s /bin/bash testuser

三、为用户配置密码

passwd testuser

四、为用户配置专属目录。mkdir -p /home/foo/bar的作用是生成用户专属目录/home/foo以及用户有写权限的目录/home/foo/bar。-d /home/foo的作用是配置该用户的home目录为/home/foo。所以其实所谓的专属目录,就是该用户的home目录

mkdir -p /home/foo/bar
usermod -d /home/foo testuser

五、为目录设置权限。首先,为了使上述该用户专属目录对该用户只读,同时便于管理员管理,我们设置该目录所有者为管理员本身root,并设置权限为rwxr-xr-x。同时为了使该目录中的bar子目录对该用户可写,我们设置该子目录所有者为testuser,并设置权限为rwxr-xr-x

chown root:root /home/foo
chmod 755 /home/foo
chown testuser:testgroup /home/foo/bar
chmod 755 /home/foo/bar

配置ssh

一、修改ssh守护进程配置文件。首先vim /etc/ssh/sshd_config编辑该文件,然后通过#注释掉其中的Subsystem sftp /usr/libexec/openssh/sftp-server,再在末尾添加如下内容:

Subsystem sftp internal-sftp
Match Group testgroup
ChrootDirectory /home/foo
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no

其中AllowTcpForwarding设置为no的作用是,让用户只能通过sftp登录,而不能通过ssh登录

二、重启ssh

sudo service ssh restart

测试

ssh testuser@server.ip

输入密码后,会无法进入ssh,并且返回错误:This service allows sftp connections only.继续尝试以sftp模式登陆:

sftp testuser@server.ip

输入密码后,成功连上sftp,自动进入了/home/foo目录。可读取目录及下载文件。试着往/home/foo目录上传文件,发现没有权限。进入/home/foo/bar目录后继续尝试上传文件,发现上传成功。测试通过

附录

linux下面的权限是这样表示的(通过ls -ltr 可列出):
d|rwx|rwx|rwx
第一个d 表示是一个目录,如果是文件,则是-
后面的三段分别表示:
第一段是指 owner 属主的读、写、执行权限
第二段是指 group 的读、写、执行权限;
第三段是指 other 的读、写、执行权限

r=4 w=2 x=1
可以使用 chmod 754 /foo/bar
则可将bar目录的权限变成:
drwxrw-r–
即目录所有者具有读写执行权限,同组人员具有读写无执行权限,其他人只有读的权限。

参考文献

https://www.cnblogs.com/reachos/p/11157329.html

https://www.cnblogs.com/pengyunjing/p/8543026.html

https://www.cnblogs.com/pu20065226/p/10962906.html

https://www.cnblogs.com/sea-stream/p/10732847.html

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注