一、minio初介

  • 是一款高性能、分布式的对象存储系统。如果有商业需求则需要申请授权。http://www.minio.org.cn/overview.shtml
  • 之前有在内网中进行文件传输的想法,试过filebrower,FileRun,Minio,Nextcloud
    • 它们都支持多用户管理
    • filebrower对文件的管理效果更偏向window的文件管理器,可以复制、移动、删除、还能播放视频资源
    • minio操作更类似现在各大互联网公司推出的oss或者说对象存储,提供了文件存储、访问以及强大的访问权限管理功能
    • 其他两个已经没什么印象了,因为没在用(没错,家里用了filebrower,公司搭了minio)

恰巧公司有个闲置的台式机,加上年末时间还算充裕,嗯~,搞起!

二、内网环境

  • rufusUbuntu Server 20.04到U盘中,电脑U盘启动,安装系统
  • 系统默认的cn源也慢,换阿里源
    cp /etc/apt/sources.list /etc/apt/sources.list.bak_`date "+%y_%m_%d"`
    sed -i 's/http:\/\/.*.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list
    apt update
    apt upgrade
  • 安装docker:https://docs.docker.com/engine/install/ubuntu/
  • 添加docker的daemon.json镜像加速源,自行查找,也是复制粘贴的事

三、docker搭建minio服务端

docker run -d -p 9000:9000 --name minio -v /home/graham/docker/minio/data:/data -e "MINIO_ROOT_USER=nobug" -e "MINIO_ROOT_PASSWORD=5eR40IxkNkIVbH5P" --restart=unless-stopped minio/minio server /data
  • 管理员账号:MINIO_ROOT_USER nobug
  • 管理员密码:MINIO_ROOT_PASSWORD 5eR40IxkNkIVbH5P
  • 存储的文件路径:容器/data映射本机的/home/graham/docker/minio/data目录

访问 http://内网ip:9000 使用设置的账号密码登录即可。如果是一个人用的话,做到这一步就可以结束了。

但是 在公司用还是稍微加一下下访问限制好一点点

四、minio中介

minio的服务端类似redis-server,想要进行具体的用户添加、权限设置等等,还得装个redis-cli,在minio中指的就是mc客户端。

五、minio客户端-mc

http://docs.minio.org.cn/docs/master/minio-client-quickstart-guide

1.mc客户端安装

  • cd /usr/local/bin && sudo wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
  • sudo chmod +x mc

客官看到了这里,如果没有再继续看下去的动力,建议直接跳到第八章,进入实操,接下来都是干巴巴的文字说明 ---》

2.mc命令说明

就说几个用得到的,更多高级使用去官网看:

http://docs.minio.org.cn/docs/master/minio-client-quickstart-guide
http://docs.minio.org.cn/docs/master/minio-client-complete-guide
http://docs.minio.org.cn/docs/master/minio-admin-complete-guide

  • mc存储连接命令:mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE]
    • :当前使用的存储服务别名(必需,之后的命令都是对它的操作)
    • :存储服务的访问地址(也就是本机的 http://内网ip:9000)
    • :账号密码
    • 这个命令是mc的初始命令,需要连接上已安装的minio服务端后才能继续后续操作,所以是必须滴。
  • 连接测试命令:mc admin info <ALIAS>
  • 添加新用户:mc admin user add <ALIAS> username password
  • 给用户设置访问策略:mc admin policy set <ALIAS> 策略别名 user=username
    • 策略别名:readonlyreadwritewriteonly自定义策略别名
  • 禁用用户:mc admin user disable <ALIAS> username
  • 列出所有用户:mc admin user list <ALIAS>
  • 删除策略:mc admin policy remove <ALIAS> 策略别名
  • 将一个或多个用户添加到特定组中:mc admin group add <ALIAS> 组名 username1 username2
  • 启动组:mc admin group enable <ALIAS> 组名
  • 从组中删除用户:mc admin group remove <ALIAS> 组名 username1 username2
  • 删除组:mc admin group remove <ALIAS> 组名

六、minio末介

  • 看了上节的这堆命令,可能min na会一头雾水,这是个啥?(啊,除了用过对象存储产品的童鞋外,比如本银)
  • 遮就是minio的用户权限管理命令,对哒是命令,没有可视化的操作
  • 说一说命令中提到的几个关键词,粗浅地解释一下,如果有错的地方也欢迎指正:(哼,怎么可能有错,即使错了也是官方文档的错[歪嘴])
    • 官方客户端命令一共有三十个命令,有兴趣去上面提到的官网看看,有需要再实操,如果就限制权限的需求,看本文就好了,这东西看多了不用等于白看。
    • config:就拿来配置了与minio服务端的连接,其他用途还没看到。
    • admin:包含了十四个子命令可以使用
      • 可以用user子命令对用户进行增删;
      • group子命令对用户组进行管理;
      • policy子命令对访问权限进行管理;
      • 最基本和常用的就这三个了,下面的实操主要也是这三个命令的使用,更多请看详情官网。

这里主要说一说minio的权限策略,跟博主使用过的阿里云权限控制很像,基本可以说是一个模子印出来的,在它官网还有接入的sdk,那这完全可以申请商业用途弄个阿里云的oss出来。

可能这也是选择minio的原因,后续的操作性很强,虽然现在还没必要,硬盘也贵。

七、minio的访问策略

默认提供有diagnosticsreadonlyreadwritewriteonly这四种访问策略给你(使用mc admin policy list <ALIAS>命令看得到),这肯定是不够精准的。

1.编写策略文件

设置用户只能上传、下载、罗列这个叫public的bucket(把bucket理解成目录就行,一个叫public的目录)

# 得在config连接服务端之后再执行下面这些命令
cd ~/.mc
vim publicbucket.json
// publicbucket.json
{
  "Version": "2021-01-16",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::public/*"
      ]
    }
  ]
}

2.生成新的访问策略

命令格式:mc admin policy add <ALIAS> 新的策略名称 策略文件

3.访问策略

  • Effect(效果)
    • Allow
    • Deny
  • Action(操作)
    • s3:GetObject
    • s3:ListBucket
    • s3:PutObject
    • s3:GetBucketLocation
    • s3:DeleteObject
    • s3:AbortMultipartUpload
    • s3:ListBucketMultipartUploads
    • s3:ListMultipartUploadParts
  • Resource(资源)
    • arn:aws:s3:::bucketName//

八、Minio客户端实操!!!!!!!

1.连接服务端

mc config host add lemon http://内网ip:9000 nobug 5eR40IxkNkIVbH5P

  mc: Configuration written to `/home/graham/.mc/config.json`. Please update your access credentials.
  mc: Successfully created `/home/graham/.mc/share`.
  mc: Initialized share uploads `/home/graham/.mc/share/uploads.json` file.
  mc: Initialized share downloads `/home/graham/.mc/share/downloads.json` file.
  Added `lemon` successfully.

从此这个存储服务的服务端被称之为lemon

2.测试连接

mc admin info lemon

  ●  内网ip:9000
  Uptime: 48 minutes 
  Version: 2021-01-16T02:19:44Z
  Network: 1/1 OK 
  1.5 MiB Used, 7 Buckets, 1 Object

3.添加公共访问用户-public

mc admin user add lemon public fKlAtdMPtmLkg7X2

4.添加一个名为public的bucket

mc mb lemon/public

5.创建一个公共访问策略

  • 5.1写策略文件:
    cd ~/.mc
    vim publicbucket.json
    {
    "Version": "2021-01-16",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "s3:ListBucket",
          "s3:GetObject",
          "s3:PutObject"
        ],
        "Resource": [
          "arn:aws:s3:::public/*"
        ]
      }
    ]
    }
  • 5.2生成策略:mc admin policy add lemon public_policy ~/.mc/publicbucket.json
    此时使用mc admin policy list lemon就会看到我们新增的public_policy

6.给public用户添加创建的公共访问策略

mc admin policy set lemon public_policy user=public

min na可以尝试新建个访问组,通过把用户添加到组的形式来限制访问。

ok,用public fKlAtdMPtmLkg7X2登录http://内网ip:9000就只能看到public这一个bucket,在其中只能点击展开文件,上传文件和下载文件,删除和修改相关的操作就都无效了。

完(不方便截图)

ref: