在上层使用swift提供的云存储服务的过程中,提出了无需验证的使用需求。

在参考了:http://my.oschina.net/alanlqc/blog/160196(curl命令操作)

官方文档:

http://docs.openstack.org/api/openstack-object-storage/1.0/content/special-metadata-acls.html(ACL基本介绍)

以及:

http://blog.fsquat.net/?p=40(ACL修改)

三篇文章之后,我总结出了以下步骤:

找到两个方法来修改ACL,一个是通过swift命令,另一个是使用curl工具。下面先讲一下使用swift命令:

因为container是属于account的,从curl使用的方法http://my.oschina.net/u/138210/blog/164619来看,account就是由tenant决定。因此,只有对要操作的tenant拥有role的user,才能被修改ACL。

目前的帐户情况是:

一个tenant: test-newcomer

二个user: test-swift, test-swift2
user对tenant拥有的role分别为:admin, _Member_

1. 首先查看下当前的ACL情况:

user:test-swift
# swift --os-tenant-name=test-newcomer --os-username=test-swift --os-password=testswift --os-auth-url=http://localhost:5000/v2.0 stat y1
Account: ff5bd8fb39a5429cbd2495576ebff5f7
Container: y1
Objects: 0
Bytes: 0
Read ACL:
Write ACL:
Sync To:
Sync Key:
Accept-Ranges: bytes
X-Timestamp: 1386227063.30466
Content-Type: text/plain; charset=utf-8

user:test-swift2
# swift --os-tenant-name=test-newcomer --os-username=test-swift2 --os-password=testswift2 --os-auth-url=http://localhost:5000/v2.0 stat y1
Container HEAD failed: http://localhost:8888/v1/ff5bd8fb39a5429cbd2495576ebff5f7/y1 403 Forbidden

2. 使用命令修改y1的ACL,读权限:

# swift --os-tenant-name=test-newcomer --os-username=test-swift --os-password=testswift --os-auth-url=http://localhost:5000/v2.0 post y1 -r 'test-newcomer:test-swift2'

3. 再次查看:
user:test-swift
# swift --os-tenant-name=test-newcomer --os-username=test-swift --os-password=testswift --os-auth-url=http://localhost:5000/v2.0 stat y1
Account: ff5bd8fb39a5429cbd2495576ebff5f7
Container: y1
Objects: 1
Bytes: 916
Read ACL: test-newcomer:test-swift2
Write ACL:
Sync To:
Sync Key:
Accept-Ranges: bytes
X-Timestamp: 1386227063.30466
Content-Type: text/plain; charset=utf-8

user:test-swift2
L# swift --os-tenant-name=test-newcomer --os-username=test-swift2 --os-password=testswift2 --os-auth-url=http://localhost:5000/v2.0 stat y1
Account: ff5bd8fb39a5429cbd2495576ebff5f7
Container: y1
Objects: 1
Bytes: 916
Read ACL:
Write ACL:
Sync To:
Sync Key:
Accept-Ranges: bytes
X-Timestamp: 1386227063.30466
Content-Type: text/plain; charset=utf-8

4. 此时使用swift其他操作命令,可以发现,test-swift2已经可以对y1进行stat/download/list操作,但是对post/upload/delete依然没有权限。

5. 继续修改读权限:
# swift --os-tenant-name=test-newcomer --os-username=test-swift --os-password=testswift --os-auth-url=http://localhost:5000/v2.0 post y1 -r '.r:*,.rlistings'
此时即可实现匿名读取container。在浏览器中输入http://localhost:8888/v1/ff5bd8fb39a5429cbd2495576ebff5f7/y1,可以直接看到container的内容。

6. 接下来是写权限:
L# swift --os-tenant-name=test-newcomer --os-username=test-swift --os-password=testswift --os-auth-url=http://localhost:5000/v2.0 post y1 -w 'test-newcomer:test-swift2'

7. 此时查看信息:
# swift --os-tenant-name=test-newcomer --os-username=test-swift --os-password=testswift --os-auth-url=http://localhost:5000/v2.0 stat y1
Account: ff5bd8fb39a5429cbd2495576ebff5f7
Container: y1
Objects: 1
Bytes: 916
Read ACL: test-newcomer:test-swift2
Write ACL: test-newcomer:test-swift2
Sync To:
Sync Key:
Accept-Ranges: bytes
X-Timestamp: 1386227063.30466

这样就可以进行upload/delete操作。
需要注意两点:
1).  经验证,可以仅赋予写权限。但是只能在拥有读权限的情况下,写权限才可以发挥作用。
2).  不支持匿名写操作。

curl命令的使用可参考上述参考文档。curl在设置读权限时,使用了 -H "X-Container-Read"参数。
对应于上述操作,分别使用如下的操作格式,即可实现同样的效果:
-H "X-Container-Read: test-newcomer:test-swift2"
-H "X-Container-Read: .r:*,.rlistings"
要注意的是:理论上来讲,使用-H "X-Container-Write"可以设置写权限。但是在实验时,使用下述方法
-H "X-Container-Write: test-newcomer:test-swift2"出现了Unauthorized错误。

通过设置swift中container的ACL提供匿名访问及用户授权读取服务的更多相关文章

  1. SQL Server 2005中设置Reporting Services发布web报表的匿名访问

    原文:SQL Server 2005中设置Reporting Services发布web报表的匿名访问 一位朋友提出个问题:集成到SQL Server 2005中的Reporting Services ...

  2. 设置电脑中的某个程序不弹出UAC用户控制提示的方法

    有用户发现在电脑开机后总是会弹出UAC用户账户控制窗口,这是因为电脑中的某个程序设置了开机启动,这样就会在开机后启动该程序时出现UAC提示.如果想要省略该提示,可以在电脑中设置该程序不弹出UAC用户控 ...

  3. mySQL中如何给某一IP段的用户授权?

    给一个用用户use ip: 192.168.0.1 语句是: grant all on *.* to root@192.168.0.1 identified by 'pass' 来授权 其中:root ...

  4. 一览Swift中的常用关键字

    要学习Swift这门语言,就必须先了解Swift的关键字及对应的解释.这里就列一下在Swift中常用到的关键字. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...

  5. [翻译]理解Swift中的Optional

    原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你 ...

  6. 如何为基于windows验证的站点的某个页面、文件或文件夹单独设置匿名访问

    在MOSS的项目中,我们经常碰到要单独为基于windows验证的站点的某个页面.文件或文件夹单独设置匿名访问即不登录就可以直接访问.比如说站点的A的某些图片或文件URL存在B站点下的文件夹下.此时访问 ...

  7. swift 设置string 中汉字中变色等处理代码

    我们在做弹窗 或者显示label string的时候经常会用到字体变色 变大 等特殊处理, swift中提供一个函数 NSMutableAttributedString 使用方法简介 var main ...

  8. swift中第三方网络请求库Alamofire的安装与使用

    swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...

  9. Swift基础--Swift中的分类以及在分类中扩展init方法的注意事项

    Swift中的分类 1.创建一个空的swift文件 2.关键字extension,格式: extension 要扩展的类名 {} extension UIButton { } Swift中扩展init ...

随机推荐

  1. Django 模型系统(model)&ORM--基础

    ORM 映射关系: 类 ---> 表 属性 ---> 字段 对象 --->一条数据 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作 ...

  2. hash是什么?

    最近读关于php内核的资料,发现php中 在实现变量以及数据类型的实现中大量使用哈希算法,并且非常细致做出了很多优秀的细节设计.比如:在 zend.hash.h 中 static inline ulo ...

  3. python基础18 ---多态与绑定方法

    一.抽象类 1.抽象类的定义:从一堆类中抽象出相同的内容,重新组成一个新的类,这样的类属于抽象类. 2.香蕉类是一类水果,苹果类是一类水果,葡萄类是一类水果,但是他们都属于水果,从他们这些类中可以抽象 ...

  4. c的详细学习(1)C语言概述

        本节用来简要介绍c语言.     (1)C语言的特点: C语言是一种集汇编语言及高级语言为一身的,面向过程的结构化和模块化的程序设计语言. 特点: 兼具高级语言与低级语言的双重能力.C语言允许 ...

  5. php关于<<<的用法

    Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术.但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实 ...

  6. 【leetcode刷题笔记】Combination Sum

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  7. Docker 镜像篇

    镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器. docker两个跟镜像有关的命令: hello-world - 最小的镜像 hello-world 是 Docker 官 ...

  8. <再看TCP/IP第一卷>TCP/IP协议族中的最压轴戏----TCP协议及细节

    题外话:刚刚过去的半个月实在是忙得我喘不过来气,虽然手里还压着几个项目得在期末考试之前做完,但是想想还是更新一下随笔,稍微换个心情.另外小吐槽一下那些在博客园里原封不动抄书当随笔的人,唉真是....算 ...

  9. HDU 之 City Game

                                                                                      City Game Time Lim ...

  10. EntityFramework 学习 一 三种开发模式

    Entity Framework支持3种不同的开发方法 1.Code First 2.Model First 3.Database First Code First 使用Code First开发模式, ...