1. 介绍

有时候,我们需要提供下载服务器给别人文件,但是又不想给所有人看到,从而保证安全性。 这种时候,对目录访问进行认证,并且每天改变随机密码,共享的时候提供地址、用户名和密码就可以了。

2. nginx 设置

1) 设置 nginx 的配置文件(/etc/nginx/sites-enabled/default):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
location /download/ {
    # 下载目录为 /home/myname/download
    root /home/myname;

    # 设置目录浏览
    autoindex on;

    # 默认为on,显示出文件的确切大小,单位是bytes。
    # 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
    autoindex_exact_size off;

    # 默认为off,显示的文件时间为GMT时间
    # 注意:改为on后,显示的文件时间为文件的服务器时间
    autoindex_localtime on;

    # 在第一次访问目录时,会弹出输入验证框
    auth_basic "Restricted";

    # 存放密码的文件,/etc/nginx/passwd/download
    auth_basic_user_file passwd/download;

    # 设置charset,解决中文乱码问题
    charset utf-8,gbk;
}

2) 生成密码文件:

1
2
3
4
sudo mkdir /etc/nginx/passwd
sudo chmod 777 /etc/nginx/passwd
sudo vi /etc/nginx/passwd/download
sudo chmod 777 /etc/nginx/passwd/download

输入用户名和密码(密码会在第三步被替换):

1
admin: admin
  • admin 为自己使用的用户名密码
  • guest 提供给他人使用的用户名和密码

3) 设置 admin 的密码(apt-get install apache2-utils):

1
sudo htpasswd /etc/nginx/passwd/download admin

4) 重启 nginx 就可以了:

1
sudo service nginx restart

3. 每天随机生成 guest 密码

1) 编写 shell 脚本(random_password.sh):

1
2
3
4
5
#!/bin/bash

passwd=`cat /dev/urandom | head -1 | md5sum | head -c 6`
echo guest $passwd > /home/myname/download/password.txt
htpasswd -b /etc/nginx/passwd/download guest $passwd

2) 编辑 crontab:

1
crontab -e

添加内容:

1
0 0 * * * random_password.sh

3) 登录查看密码:

http://yourhost/download/password.txt