Samba
安装
修改配置文件
1
2
3
4
5
6
| [share]
path = /home/xyz/share/
create mask = 0664
directory mask = 0775
writable = yes
valid users = xyz
|
其中:
[share]是你共享出来文件夹的名称create mask 设置的是当新文件创建时的权限(该配置为664权限)directory mask 设置的是当新文件夹创建时的权限(该配置为664权限)valid users 表示只有名单内的用户才有权限访问
配置一个guest只读的共享:
1
2
3
4
| [latest_qfil]
path = /mnt/build/artifact/latest
writable = no
guest ok = yes
|
添加用户
用户xyz必须是系统中存在的用户,和当前用户没有关系.
启动服务
1
| sudo service smbd start
|
FTP
安装
1
| sudo apt install vsftpd
|
配置一个匿名共享
1.创建共享文件夹
1
| sudo mkdir /var/ftp/pub
|
2.修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| sudo vi /etc/vsftpd.conf
---
# 1.如果只需要读权限
anonymous_enable=YES
anon_root=/var/ftp/
---
# 2.如果还需要写权限,在1的基础上继续增加
## anon_mkdir_write_enable=YES: 增加匿名用户新建文件夹的权限
## anon_other_write_enable=YES: 增加匿名用户删除/重命名的权限
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
---
# 3.可选配置
## 命令行中匿名用户不再需要输入密码
no_anon_password=YES
## 限制被动模式的端口范围
pasv_min_port=40000
pasv_max_port=50000
## 配置匿名用户创建文件的umask
anon_umask=022
|
注意: 虽然配置了匿名用户可写, 但/var/ftp/本身必须是可写的, 可以配置为777权限
3.重启服务
1
| sudo systemctl restart vsftpd.service
|
https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-anonymous-downloads-on-ubuntu-16-04
https://gist.github.com/rikka0w0/32678ec92fe210ffaf1c0f73e631c0bc
配置一个使用用户名/密码访问,可读写的共享
1.创建共享文件夹
1
| sudo mkdir /var/testftp
|
2.创建用户
1
2
3
4
5
6
| # -d: 指定家目录为/, 至于为什么这么指定, 后面会说到
sudo useradd -d / testftp
# 可选配置, nologin还需要进一步配置,参见后文
# sudo useradd -d / testftp -s /usr/sbin/nologin
sudo passwd testftp
...
|
3.修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| sudo vi /etc/vsftpd.conf
---
write_enable=YES
local_root=/var/testftp
# 使用chroot,禁止访问local_root
chroot_local_user=YES
allow_writeable_chroot=YES
# 使用用户白名单
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
---
# 可选配置
local_umask=022
|
4.修改用户白名单
1
2
3
| echo "testftp" | sudo tee -a /etc/vsftpd.userlist
# 打开白名单后,匿名用户便被禁用,除非在白名单列表里加入"anonymous"
echo "anonymous" | sudo tee -a /etc/vsftpd.userlist
|
5.(可选)配置shell为/usr/sbin/nologin
我不希望testftp能够登录终端, 那么可以配置对应的shell为/usr/sbin/nologin
1
| sudo chsh testftp -s /usr/sbin/nologin
|
但仅仅这么配置会导致ftp无法登录, 还需要在/etc/shells添加/usr/sbin/nologin
1
2
| # 添加前最好先检查一下是不是已经存在了
echo /usr/sbin/nologin | sudo tee -a /etc/shells
|
https://serverfault.com/questions/358324/ftp-doesnt-allow-usr-sbin-nologin-user
6.重启服务
1
| sudo systemctl restart vsftpd.service
|
为什么要设置testftp的家目录为/ ?
使用useradd创建testftp用户后, /etc/passwd中会有如下记录:
1
| testftp:x:1001:1001::/home/testftp:/bin/sh
|
但/home/testftp这个目录并不存在, 所以使用登录后会提示OOPS: cannot change directory:/home/testftp, 导致无法登录. 因此, 我想到了一个workaround, 即把testftp的家目录设为一个存在的目录/, 或许还有其他更优雅的方法.
https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-a-user-s-directory-on-ubuntu-18-04
其他
使用中发现, 使用Chrome访问时, 显示的"修改日期"与本地日期不一致, 后来发现有一个use_localtime的选项默认为YES:
1
2
3
4
5
| # If enabled, vsftpd will display directory listings with the time
# in your local time zone. The default is to display GMT. The
# times returned by the MDTM FTP command are also affected by this
# option.
use_localtime=YES
|
不过, 根据注释以及网上别人的介绍, use_localtime配置为YES才应该是我预期的"修改日期"与本地时间一致的方法. 当我尝试改为NO之后, “修改日期"与本地日期竟然一致了, 很是奇怪.