歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> IBM AIX >> IBM AIX和Microsoft Active Directory與Kerberos和LDAP的集成

IBM AIX和Microsoft Active Directory與Kerberos和LDAP的集成

日期:2017/3/3 15:21:16   编辑:IBM AIX

為什麼是 Kerberos 和 LDAP

LDAP 對於存儲和檢索 AIX 用戶的用戶屬性非常有效,但使用 LDAP 進行身份驗證仍然需要用戶提供一個 AIX 密碼和一個 AD 密碼。Kerberos 支持 AIX 使用本地 AD 協議,參照用戶的 Microsoft Windows 密碼進行用戶身份驗證。

使用的 Active Directory 屬性

下列 AD 屬性可被 AIX 用於獲取用戶信息。

開始之前 - 先決條件

開始該流程之前需要對下列各項進行配置。

您的 Windows DNS 服務器中的 AIX 主機的域名系統 (DNS) 記錄(A 和 PTR)。

Active Directory 中匹配 AIX 主機名的計算機對象。

包含 AIX 對象的組織單元 (OU) 。

目標 OU 中至少包含一個支持 UNIX 的 用戶。

可用於將 LDAP 綁定到 AD 的 AD 服務帳戶。服務帳戶在任何將會具有支持 UNIX 的用戶的 OU 上都應有完整的讀權限。

確保 hostname 命令返回 AIX 服務器的完全限定域名(FQDN)。主機的 /etc/hosts 條目應為 {IP} {FQDN} {Short Name}

確保 AIX 主機將會使用 DNS 域控制器。

在 AIX 服務器上配置 Network Time Protocol (NTP) 。(如果時鐘超過 5 分鐘,Kerberos 將會失敗。)

配置 syslog 或驗證它是否按預期運行。

示例環境

示例場景可使用 AIX 6.1 TL 6 和 TL 8 以及 AIX 7.1 TL 1 進行測試,Server 2008 R2 域控制器上的 Active Directory 在 2003 功能級別運行。需要重點強調的是,域控制器必須是 Windows Server 2003 R2 或其更高版本,以便包含開箱即用的 UNIX LDAP 屬性。如果您擁有 Server 2003 域控制器,那麼可以使用 Microsoft Windows Services for UNIX 附加組件來擴展 LDAP 模式,以包括 UNIX 屬性。(本文並不打算介紹該場景。)

安裝和配置 LDAP

安裝下列 LDAP 客戶端文件集:

idsldap.clt32bit61.rte.6.1.0.40.bff

idsldap.clt64bit61.rte.6.1.0.40.bff

idsldap.cltbase61.rte.6.1.0.40.bff

idsldap.cltjava61.rte.6.1.0.40.bff

idsldap.msg61.en_US.6.1.0.40.bff

使用下列命令驗證安裝:

lslpp -L | grep ldap

示例輸出

idsldap.clt32bit61.rte 6.1.0.40 C F Directory Server - 32 bit
idsldap.clt64bit61.rte 6.1.0.40 C F Directory Server - 64 bit
idsldap.cltbase61.adt 6.1.0.40 C F Directory Server - Base Client
idsldap.cltbase61.rte 6.1.0.40 C F Directory Server - Base Client
idsldap.cltjava61.rte 6.1.0.40 C F Directory Server - Java Client
idsldap.msg61.en_US 6.1.0.40 C F Directory Server - Messages -

檢查 LDAP 實用程序是否已安裝:

ls -l /opt/IBM/ldap/V6.1/

示例輸出

total 64
drwxr-xr-x 4 root system 4096 Jan 25 13:26 bin
drwxr-xr-x 2 root system 8192 Apr 08 2011 codeset
drwxr-xr-x 2 root system 256 Jan 25 13:26 etc
drwxr-xr-x 3 root system 4096 Apr 08 2011 examples
drwxr-xr-x 2 root system 4096 Apr 08 2011 include
drwxr-xr-x 8 bin bin 4096 Jan 25 13:25 java
drwxr-xr-x 2 bin bin 256 Apr 08 2011 javalib
drwxr-xr-x 2 root system 4096 Jan 25 13:26 lib
drwxr-xr-x 2 root system 4096 Jan 25 13:26 lib64
drwxr-xr-x 3 root system 256 Apr 08 2011 nls

測試 LDAP 客戶端:

/opt/IBM/ldap/V6.1/bin/ldapsearch -h pdc1.test.local -D [email protected] -w \? -b DC=test,DC=local -v sAMAccountName=aixtest

其中:

pdc1.test.local 是域控制器的 IP 地址。

[email protected] 是您的 AD 服務帳戶的名稱和領域(域)。

-w \? 提示密碼。

DC=test,DC=local 是 OU(在其中開始搜索)的可識別名稱。

sAMAccountName=aixtest 是搜索過濾器。為簡便起見,這裡選中了 sAMAccountName。

示例輸出

Enter password ==>
ldap_init(pdc1.test.local, 389)
filter pattern: sAMAccountName=aixtest
returning: ALL
filter is: (sAMAccountName=aixtest)
CN=AIX TEST,OU=AIX,DC=test,DC=local
objectClass=top
objectClass=person
objectClass=organizationalPerson
objectClass=usercn=AIX TESTsn=TEST
description=User to Test AIX LDAP Integration
givenName=AIX
distinguishedName=CN=AIX TEST,OU=AIX,DC=test,DC=local
instanceType=4
whenCreated=20130124211358.0Z
whenChanged=20130125174941.0Z
 displayName=AIX TESTuSN
Created=24337388uSN
Changed=24435474
name=AIX TEST
objectGUID=NOT ASCII
userAccountControl=4194816
codePage=0
countryCode=0
lastLogon=130036097814205000pwd
LastSet=130035356383925796
primaryGroupID=513
objectSid=NOT ASCII
acountExpires=130061592000000000
logonCount=1
sAMAccountName=aixtest
sAMAccountType=805306368
[email protected]
Category=CN=Person,CN=Schema,CN=Configuration,DC=test,DC=localdS
CorePropagationData=16010101000000.0Z
lastLogonTimestamp=130036097814205000
msDS-SupportedEncryptionTypes=0uid=aixtestmanager=CN=Jeff Geiger,OU=IT,DC=test,
DC=local
uidNumber=50001
gidNumber=10001
gecos=AIX Test User
unixHomeDirectory=/home/aixtest
loginShell=/usr/bin/ksh
1 matches

使用 LDAP 服務器測試 LDAP 客戶端有幾個目的:

通過檢查確保正確安裝了 LDAP 實用程序和庫。

驗證您將在配置 LDAP 時使用的選項是正確的。

配置 AIX LDAP 客戶端:

mksecldap -c -h pdc1.test.local -a "CN=AIX Service,OU=Service Accounts,DC=TEST,DC=LOCAL" -d OU=AIX,DC=test,DC=local -p examplePassword

其中:

pdc1.test.local 是域控制器的主機名。

CN=AIX Service,OU=Service Accounts,DC=TEST,DC=LOCAL 是服務帳戶的可識別名稱。

OU=AIX,DC=test,DC=local 是 OU(在此 OU 中,您的 AIX 位於 AD 中)的可識別名稱。

examplePassword 是服務帳戶密碼。 mksecldap 可在配置文件中對密碼進行加密。

注意:可在 6.1TL8 上進行加密,不能在 6.1TL6 上進行加密

該命令在成功完成時沒有產生輸出。

通過查找未注釋行來驗證 ldap.cfg 文件:

grep '^[:a-z:]' /etc/security/ldap/ldap.cfg

示例輸出

ldapservers:pdc1.test.local
binddn:CN=AIX Service,OU=Service Accounts,DC=test,DC=local
bindpwd:examplePassword
authtype:unix_auth
useSSL:no
userattrmappath:/etc/security/ldap/sfur2user.map
groupattrmappath:/etc/security/ldap/sfur2group.map
userbasedn:OU=AIX,DC=test,DC=local
groupbasedn:OU=AIX,DC=test,DC=local
userclasses:user,person,organizationalperson
groupclasses:group
ldapport:389
searchmode:ALL
defaultentrylocation:LDAP
serverschematype:sfur2

通過編輯來添加額外的 LDAP 服務器,並檢查基本可識別名稱 (DN) 和緩存大小。我建議至少提供兩個 LDAP 服務器,在地理上,它們位於具有 AIX 主機的局域網中,以避免延遲並提供故障轉移。

編輯 :/etc/security/ldap/ldap.cfg 並確保以下設置正確:

userattrmappath:/etc/security/ldap/sfur2user.map

groupattrmappath:/etc/security/ldap/sfur2group.map

serverschematype:sfur2

Windows Server 2008 R2 Active Directory 包含 R2 UNIX 屬性,無需安裝 Microsoft Windows Services for UNIX 程序包。sfur2 映射最適合此場景。

注意:在 6.1TL8 上,我必須更改從 sfu30 到 sfur2 的映射;在 TL6 上不需要這樣做。

查看文本結尾 示例配置文件 中的示例 ldap.cfg。

在某些情況下,用戶的 AIX 用戶名(AD UID)可能與 AD 中的 sAMAccountName 不匹配。如果是這樣的話,請將下列代碼行添加到 /etc/security/ldap/sfur2user.map,以支持用戶更改其密碼 uring Kerberos。

auth_name SEC_CHAR sAMAccountName s na yes

啟動 LDAP 客戶端服務:

restart-secldapclntd

示例輸出

The secldapclntd daemon terminated successfully.

Starting the secldapclntd daemon.The secldapclntd daemon started successfully.

驗證 LDAP 客戶端服務正在運行:

ls-secldapclntd

示例輸出

ldapservers=pdc1.test.local 
ldapport=389active connections=1
ldapversion=3
userbasedn=OU=AIX,DC=test,DC=local
groupbasedn=OU=AIX,DC=test,DC=local
idbasedn=
usercachesize=1000
usercacheused=1
groupcachesize=100
groupcacheused=2
usercachetimeout=300
groupcachetimeout=300
heartbeatT=300
numberofthread=10
connectionsperserver=10
alwaysmaster=no
authtype=UNIX_AUTH
searchmode=ALL
defaultentrylocation=LDAP
ldaptimeout=60
serverschematype=SFUR2
userobjectclass=user,person,organizationalperson
groupobjectclass=group

測試 LDAP 分辨率:

lsuser -R LDAP ALL

輸出應返回您使用 UNIX 屬性創建的用戶。

示例輸出

aixtest id=50001 pgrp=AIXLDAP groups=AIXLDAP home=/home/aixtest shell=/usr/bin/ksh 
gecos=AIX Test User login=true su=true rlogin=true daemon=true admin=false sugroups=ALL 
admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 
registry=LDAP SYSTEM=KRB5LDAP or compat logintimes= loginretries=0 pwdwarntime=0 
account_locked=false minage=0 maxage=0 
maxexpired=-1 minalpha=0 minother=0 mindiff=0 maxrepeats=8 minlen=0 histexpire=0 
histsize=0 
pwdchecks= dictionlist= fsize=-1 cpu=-1 data=262144 stack=65536 core=2097151 rss=65536 
nofiles=-1 time_last_login=1359144648 tty_last_login=/dev/pts/1 
host_last_login=pc42.test.local 
unsuccessful_login_count=0 roles=

安裝和配置 Kerberos

驗證 Kerberos 客戶端尚未安裝:

lslpp -l | grep krb

如果未安裝 Kerberos,則不會產生輸出。

從 IBM AIX Web Download Pack Programs 網站下載 AIX Network Authentication Service (NAS) 程序包。

注意:我對 AIX 6.1 TL8 和 AIX 7.1 使用了 NAS 版本 1.5.0.4,對 AIX 6.1 TL6 使用了版本 1.5.0.2 。

提取和安裝 NAS 程序包:

#list contents to verify a good download:
         
tar tf NAS_1.5.0.x_aix_image.tar
         
#untar
         
tar xf NAS_1.5.0.x_aix_image.tar
         
#rename folder tosomething more descriptive
         
mv images AIX_NAS

安裝下列程序包:

krb5.client.rte

krb5.client.samples

krb5.doc.en_US.html

krb5.doc.en_US.pdf

krb5.lic

krb5.client.rte

注意:在 smit 中選擇 client、doc 和 lic 程序包將向您提供要安裝的程序包。

配置 Kerberos:

mkkrb5clnt -c pdc1.test.local -r TEST.LOCAL -s pdc1.test.local -d TEST.LOCAL -i LDAP -D

其中:

pdc1.test.local 是域控制器的 FQDN(在兩個交換機中)。

TEST.LOCAL 是域名、域的 FQDN,全部大寫(在兩個交換機中)。

LDAP 是用戶注冊信息的來源。這將觸發 /etc/methods.cfg 中 KRB5LDAP stanza 的創建。

示例輸出

Initializing configuration...

Creating /etc/krb5/krb5_cfg_typeCreating /etc/krb5/krb5.confThe command mkkrb5clntcompleted successfully.

編輯 Kerberos 配置文件:

打開生成的 Kerberos 配置文件 (/etc/krb5/krb5.conf) 並進行如下修改。在示例配置文件(本文結尾處)中,可以使用 krb5.conf 作為模板。

要點:

將兩個 enctypes 都設置成 arcfour-hmac。

添加 dns_lookup_kdc 和 dns_lookup_realm,並將它們設置成 true。

將本地域控制器的其他 kdc 條目添加到 AIX 框中。(避免 WAN 遍歷。)

添加 master_kdc 條目,並讓它們指向您的主要本地域控制器。

確保具有適用於大寫域、小寫域和點分域 (dotted domain) 的解析器。

使用 /usr/krb5/bin/kinit 測試 Kerberos:

/usr/krb5/bin/kinit [email protected]

這應該提示輸入密碼,並且不會沒有輸出返回。(使用任何有效的 AD 帳戶。)

示例輸出

Password for [email protected]:

驗證是否發布了 Kerberos 票據:

/usr/krb5/bin/klist

這應該返回一個都帶有截止日期和更新截止日期的有效票據。

示例輸出

Default principal: [email protected] starting Expires Service principal01/25/13 13:56:23 01/25/13 23:56:20 krbtgt/[email protected] until 01/26/13 13:56:23

清除票據緩存(沒有輸出)。

/usr/krb5/bin/kdestroy

為了支持在 AIX 服務器和 Active Directory 之間進行無密碼 Kerberos 通信,需要在域控制器上生成一個主機主體 keytab。這可以通過域控制器中的 ktpass 命令完成,而且必須使用一個具有域管理權限的帳戶運行此命令。

生成主機主體密鑰表:

ktpass /princ host/[email protected] /ptype KRB5_NT_PRINCIPAL /out aix1.keytab /pass examplePassword /crypto RC4-HMAC-NT /mapuser TEST\aix1 /kvno 2

其中:

host/[email protected] 是 AIX 主機的 FQDN。請將 host/ 後綴記錄下來。

KRB5_NT_PRINCIPAL 是 Kerberos 主體類型。該類型不會發生改變。aix1.keytab 是將要創建的 keytab 文件。該文件將被轉移到 AIX 主機,為了清楚起見,該文件被命名為 {hostname}.keytab 。

examplePassword 是將為主機主體設置的密碼。該密碼應該比較復雜,但您可能永遠不會用到它。

RC4-HMAC-NT 是已使用的加密類型。RC4 是 2008 R2 上的 Kerberos 的默認值 。

TEST\aix1 是 AD 中的計算機對象的 {domain}\{hostname} 。

/kvno 2 是密鑰版本號。

想提示改變對象密碼時回答 yes。請記錄所用的密碼。

示例輸出

C:\Windows\system32>ktpass /princ host/[email protected] /ptype KRB
5_NT_PRINCIPAL /out aix1.keytab /pass examplePassword /crypto RC4-HMAC-NT /mapu
ser TEST\aix1 /kvno 2
Targeting domain controller: PDC1.test.local
Successfully mapped host/aix1.test.local to AIX1$.
WARNING: Account AIX1$ is not a user account (uacflags=0x1021).
WARNING: Resetting AIX1$'s password may cause authentication problems if AIX1$ is
being used as a server.
Reset AIX1$'s password [y/n]? y
Password succesfully set!
WARNING: pType and account type do not match. This might cause problems.
Key created.
Output keytab to st1iaxnb07.keytab:
Keytab version: 0x502
keysize 70 host/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 2
etype 0x17 (RC4-HMAC) keylength 16 (0xb19656597cd0e7cec30561afaa7e09d4)

注意:/kvno 2 值是通過試驗、錯誤和程序包捕獲發現的。在沒有將該參數傳遞給 ktpass 命令的情況下,我沒有進行此設置工作。

在 AIX 中復制並導入 keytab 文件:

將您的 keytab 文件通過 SFTP 協議傳遞到 AIX 服務器。(本例中,該文件是 /tmp/aix1.keytab。)

首先,刪除所有現有 keytab。打開 ktutil 並讀取 keytab 文件 (rkt),列出密鑰 (l),然後將 keytab (wkt) 寫入默認 Kerberos keytab 文件 (/etc/krb5/krb5.keytab)。

示例輸出

rm /etc/krb5/krb5.keytab

/usr/krb5/sbin/ktutil

ktutil: rkt /tmp/aix1.keytab

ktutil: l

slot KVNO Principal------ ------ ------------------------------------------------------>

1 2 host/[email protected]: wkt /etc/krb5/krb5.keytab

ktutil: q

驗證 keytab:

/usr/krb5/bin/klist –ke

這應該在域控制器上提供 ktpass 生成的密鑰。

示例輸出

Keytab name: FILE:/etc/krb5/krb5.keytab

KVNO Principal

---- ---------

2 host/[email protected] (ArcFour with HMAC/md5)

測試 keytab:

/usr/krb5/bin/kinit -k

注意:這裡應該沒有輸出。如果您得到錯誤消息,很可能存在 DNS 問題。我花了大量時間在這一步進行 KVNO、加密類型和 DNS 錯誤的故障排除。我使用 tcpdump (tcpdump -i en0 -s 65535 -w krb5ldap_ts.pcap host 10.10.0.5) 命令捕獲傳入或傳出域控制器的程序包,並加載 Wireshark 中的 pcap 文件,查看發生了什麼。

使用 klist 實用程序查看已發布的票據:

/usr/krb5/bin/klist

這應該顯示主機主體的票據。

示例輸出

Ticket cache: FILE:/var/krb5/security/creds/krb5cc_0

Default principal: host/[email protected]

Valid starting Expires Service principal

01/25/13 13:59:10 01/25/13 23:59:03 krbtgt/[email protected]

Renew until 01/26/13 13:59:10

配置 AIX 以使用 KRB5LDAP

編輯 /etc/methods.cfg:

關鍵點:

確保 KRB5 選項包括:authonly,is_kadmind_compat=no,tgt_verify=no,allow_expired_pwd=yes

確保 KRB5LDAP stanza 包括 auth 和 db 選項。

使用示例 methods.cfg 文件(在本文結尾處提供)作為一個示例。

修改 /etc/security/user:

chsec -f /etc/security/user -s default -a SYSTEM="KRB5LDAP OR compat"

示例輸出

# lssec -f /etc/security/user -s default -a SYSTEM

default SYSTEM="compat"

# chsec -f /etc/security/user -s default -a SYSTEM="KRB5LDAP or compat"

# lssec -f /etc/security/user -s default -a SYSTEM

default SYSTEM="KRB5LDAP or compat"

將 Kerberos 添加到授權的身份認證實體並驗證:

chauthent -k5 –std

#Verify

lsauthent

這應該返回 Kerberos 5 和 Standard AIX。

示例輸出

Kerberos 5

Standard Aix

測試 KRB5LDAP

通過查詢您使用 AIX 屬性(本例中是 aixtest)在 AD 中創建的用戶來測試 KRB5LDAP:

lsuser –R KRB5LDAP aixtest

這應該從 AIX 上下文中返回有關 AD 用戶的細節。

示例輸出

aixtest id=50001 pgrp=AIXLDAP groups=AIXLDAP home=/home/aixtest shell=/usr/bin/ksh

gecos=AIX Test User login=true su=true rlogin=true daemon=true admin=false sugroups=ALL

admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22

registry=KRB5LDAP SYSTEM=KRB5LDAP or compat logintimes= loginretries=0

pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0

minother=0 mindiff=0 maxrepeats=8 minlen=0

histexpire=0 histsize=0 pwdchecks= dictionlist= fsize=-1 cpu=-1

data=262144 stack=65536 core=2097151 rss=65536 nofiles=-1 roles=

查看本欄目更多精彩內容:http://www.bianceng.cn/OS/unix/

試著將用戶轉換成 AD 定義的用戶:

su – aixtest

這應該可以正常運行。如果用戶主目錄不存在的話,您可能看到無法將目錄更改為用戶主目錄的錯誤。(這可以通過將該選項設置成自動創建主目錄來修復。)如果沒有對用戶的主要組進行設置,或者如果沒有將該組定義成一個 AD 對象,那麼有可能也會出現錯誤。

嘗試以 AD 定義的用戶的身份使用 Secure Shell (SSH) 連接到主機:

ssh aixtest@localhost

您應該能夠進行登錄。登錄之後,檢查 AUTHSTATE 環境變量和 klist 輸出(類似下列示例),以確保 Kerberos 被用於身份驗證。

示例輸出

aixtest@localhost's password:
*******************************************************************************
* *
* *
* Welcome to AIX Version 6.1! *
* *
* *
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
* *
* *
*******************************************************************************
Could not chdir to home directory /home/aixtest: The file access permissions do not allow
the specified action.
$ pwd
/
$ echo $AUTHSTATE
KRB5LDAP
$ /usr/krb5/bin/klist
Ticket cache: FILE:/var/krb5/security/creds/krb5cc_x0000000000000001
Default principal: [email protected]
    
Valid starting Expires Service principal
01/25/13 14:02:59 01/26/13 00:02:52 krbtgt/[email protected]
Renew until 01/26/13 14:02:59
$ exit
Connection to localhost closed.

注意:AUTHSTATE 變量應包含 KRB5LDAP,而且運行 klist 應該返回一個有效的 Kerberos 票據。

示例配置文件

/etc/krb5/krb5.conf

[libdefaults]
default_realm = TEST.LOCAL
default_keytab_name = FILE:/etc/krb5/krb5.keytab
default_tkt_enctypes = arcfour-hmac
default_tgs_enctypes = arcfour-hmac
dns_lookup_kdc = true
dns_lookup_realm = true
    
[realms]
TEST.LOCAL = {
kdc = PDC1.TEST.LOCAL:88
kdc = PDC2.TEST.LOCAL:88
admin_server = PDC1.TEST.LOCAL:749
master_kdc = PDC1.TEST.LOCAL
default_domain = TEST.LOCAL
}
    
[domain_realm]
.TEST.LOCAL = TEST.LOCAL
TEST.LOCAL = TEST.LOCAL
PDC1.TEST.LOCAL = TEST.LOCAL
PDC2.TEST.LOCAL = TEST.LOCAL
test.local = TEST.LOCAL
.test.local = TEST.LOCAL
    
[logging]
default = SYSLOG:debug:local1

/etc/security/ldap/ldap.cfg

ldapservers:pdc1.test.local
binddn:CN=AIX Service,OU=AIX,DC=test,DC=local
bindpwd:{DESv2}AAAAAAAAAAAABBBBBBBBBBCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEE
authtype:unix_auth
useSSL:no
userattrmappath:/etc/security/ldap/sfur2user.map
groupattrmappath:/etc/security/ldap/sfur2group.map
userbasedn:OU=AIX,DC=test,DC=local
groupbasedn:OU=AIX,DC=test,DC=local
userclasses:user,person,organizationalperson
groupclasses:group
ldapport:389
searchmode:ALL
defaultentrylocation:LDAP
serverschematype:sfur2

/etc/methods.cfg

LDAP:
program = /usr/lib/security/LDAP
program_64 =/usr/lib/security/LDAP64
    
NIS:
program = /usr/lib/security/NIS
program_64 = /usr/lib/security/NIS_64
    
DCE:
program = /usr/lib/security/DCE
    
KRB5:
program = /usr/lib/security/KRB5
program_64 = /usr/lib/security/KRB5_64
options = authonly,is_kadmind_compat=no,tgt_verify=no,allow_expired_pwd=yes
    
KRB5LDAP:
options = auth=KRB5,db=LDAP
Copyright © Linux教程網 All Rights Reserved