压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

基于openldap+Kerberos+google authenticator動態口令實現的運維跳板機

  出于安全考慮,大多數公司的辦公環境和業務環境在網絡層面基本上是隔離開的,在辦公環境是無法直接連到業務生產環境的,只有做過特定白名單同性的情況下才會允許這么做。這樣做了,開發人員需要訪問生產環境服務器排查問題或者運維人員通過辦公網絡對生產環境進行維護就不太方便,但是網絡一旦開通又會出現安全風險。

  在這種情況下,就需要一種可以控制網絡入口,能夠統一授權,認證的系統,這樣運維跳板機,也就是比較嚴格意義上的AAAA認證系統就出現了。

  所謂的4A認證系統其實是指:

  統一用戶賬號(Account)

  統一認證(Authentication)

  統一授權(Authorization)

  統一安全審計(Audit)

  我們公司使用的是openldap(管理用戶信息,同時實現資源訪問控制),Kerberos(網絡鑒權),google authenticator(二次認證的動態口令),bash (修改源碼,實現賬戶遠程登錄操作

  日志記錄)

  基于openldap+Kerberos+google authenticator動態口令實現的運維跳板機

  系統環境: 64位 CentOS linux 6.3

  openldap+bdb+phpldapadmin

  openldap:

  master端:yum 安裝

  openldap

  openldap-clients

  openldap-servers

  nss_ldap

  客戶端:yum方式

  openldap

  nss_ldap

  slapd.conf配置文件修改:

  databasebdb

  suffix"dc=dianping,dc=com"

  rootdn"cn=ldapadmin,dc=dianping,dc=com"

  #Cleartextpasswords,especiallyfortherootdn,should

  #beavoid.Seeslappasswd(8)andslapd.conf(5)fordetails.

  #Useofstrongauthenticationencouraged.

  rootpw!@qwaszx

  #ThedatabasedirectoryMUSTexistpriortorunningslapdAND

  #shouldonlybeaccessiblebytheslapdandslaptools.

  #Mode700recommended.

  directory/usr/local/openldap/var/openldap-data

  #Indicestomaintain

  indexobjectClasseq

  #indexuidNumbereq

  serverid3ldap://server1

  serverid5ldap://server2

  cachesize50000

  checkpoint10245

  idletimeout20

  syncreplrid=005

  provider=ldap://server2

  binddn="cn=ldapadmin,dc=dianping,dc=com"

  bindmethod=simple

  credentials=hehehehhe,qunying.liu

  searchbase="dc=dianping,dc=com"

  type=refreshAndPersist

  interval=00:00:00:10

  retry="553005"

  timeout=1

  mirrormodetrue

  overlaysyncprov

  syncprov-checkpoint10010

  syncprov-sessionlog100

  sizelimit700

  timelimit20

  databasemonitor

  系統加入ldap認證:

  vi/etc/nsswitch.conf

  passwd:filesldap

  shadow:filesldap

  group:filesldap

  打開ldap服務日志:

  syslog中加入ldap日志文件

  vi/etc/syslog.conf

  #saveOpenLDAPlog

  local4.*/var/log/ldap.log

  客戶端修改 /etc/ldap.conf

  hostserver1

  #Thedistinguishednameofthesearchbase.

  baseou=ldap,ou=auth,dc=dianping,dc=com

  Openldapadmin配置

  Tarzxvfopenldapadmin-1.2.3.tar.gz

  Cdopenldapadmin-1.2.3

  mvphpldapadmin-1.2.3/var/www/localhost/htdocs/phpldapadmin–r

  cd/var/www/localhost/htdocs/phpldapadmin

  cpconfig/config.php.exampleconfig/config.php

  修改config.php文件

  登錄phpldapadmin,設置的登錄密碼(hehehehhe,qunying.liu)登錄

  Kerberos:

  Kerberos認證協議

  Kerberos是一種網絡認證協議,其設計目標是通過密鑰系統為客戶機 / 服務器應用程序提供強大的認證服務。

  使用Kerberos時,一個客戶端需要經過三個步驟來獲取服務:

  認證:客戶端向認證服務器發送一條報文,并獲取一個含時間戳的Ticket-Granting Ticket(TGT)。

  授權:客戶端使用TGT向Ticket-Granting Server(TGS)請求一個服務Ticket。

  服務請求:客戶端向服務器出示服務Ticket,以證實自己的合法性。該服務器提供客戶端所需服務,在Hadoop應用中,服務器可以是namenode或jobtracker。

  為此,Kerberos需要The Key Distribution Centers(KDC)來進行認證。KDC只有一個Master,可以帶多個slaves機器。slaves機器僅進行普通驗證。Mater上做的修改需要自動同步到slaves。

  另外,KDC需要一個admin,來進行日常的管理操作。這個admin可以通過遠程或者本地方式登錄。

  搭建Kerberos

  1.安裝:通過yum安裝即可,組成KDC。

  yuminstall-ykrb5-serverkrb5-libkrb5-workstation

  2.配置:Kerberos的配置文件只有兩個。在server1中創建以下兩個文件,并同步/etc/krb5.conf到所有機器。

  /var/kerberos/krb5kdc/kdc.conf:包括KDC的配置信息。默認放在 /usr/local/var/krb5kdc。或者通過覆蓋KRB5_KDC_PROFILE環境變量修改配置文件位置。

  配置示例:

  [kdcdefaults]

  kdc_ports=88

  kdc_tcp_ports=88

  [realms]

  Qunying.liu={

  master_key_type=aes128-cts

  acl_file=/var/kerberos/krb5kdc/kadm5.acl

  dict_file=/usr/share/dict/words

  admin_keytab=/var/kerberos/krb5kdc/kadm5.keytab

  max_renewable_life=7d

  supported_enctypes=aes128-cts:normaldes3-hmac-sha1:normalarcfour-hmac:normaldes-hmac-sha1:normaldes-cbc-md5:normaldes-cbc-crc:normal

  }

  說明:

  QUNYING.LIU:是設定的realms。名字隨意。Kerberos可以支持多個realms,會增加復雜度。大小寫敏感,一般為了識別使用全部大寫。這個realms跟機器的host沒有大關系。

  max_renewable_life=7d涉及到是否能進行ticket的renwe必須配置。

  master_key_type:和supported_enctypes默認使用aes256-cts。由于,JAVA使用aes256-cts驗證方式需要安裝額外的jar包。推薦不使用。

  acl_file:標注了admin的用戶權限,需要用戶自己創建。文件格式是

  Kerberos_principalpermissions[target_principal][restrictions]

  支持通配符等。最簡單的寫法是

  */admin@QUNYING.LIU*

  代表名稱匹配*/admin@QUNYING.LIU都認為是admin,權限是*。代表全部權限。

  admin_keytab:KDC進行校驗的keytab。后文會提及如何創建。

  supported_enctypes:支持的校驗方式。注意把aes256-cts去掉。

  /etc/krb5.conf:包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的機器上的配置文件都同步。這里僅列舉需要的基本配置。詳細介紹參考:krb5conf:http://web.mit.edu/~kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html

  配置示例:

  [logging]

  default=FILE:/var/log/krb5libs.log

  kdc=FILE:/var/log/krb5kdc.log

  admin_server=FILE:/var/log/kadmind.log

  [libdefaults]

  default_realm=QUNYING.LIU

  dns_lookup_realm=false

  dns_lookup_kdc=false

  ticket_lifetime=24h

  renew_lifetime=7d

  max_life=12h0m0s

  forwardable=true

  udp_preference_limit=1

  [realms]

  QUNYING.LIU={

  kdc=server1:88

  admin_server=server1:749

  default_domain=DIANPING.COM

  }

  [appdefaults]

  說明:

  [logging]:表示server端的日志的打印位置

  [libdefaults]:每種連接的默認配置,需要注意以下幾個關鍵的小配置

  default_realm=QUNYING.LIU默認的realm,必須跟要配置的realm的名稱一致。

  udp_preference_limit=1禁止使用udp可以防止一個Hadoop中的錯誤

  [realms]:列舉使用的realm。

  kdc:代表要kdc的位置。格式是機器:端口

  admin_server:代表admin的位置。格式是機器:端口

  default_domain:代表默認的域名

  [appdefaults]:可以設定一些針對特定應用的配置,覆蓋默認配置。

  初始化并啟動:完成上面兩個配置文件后,就可以進行初始化并啟動了。

  A.初始化數據庫:在server1上運行命令。其中-r指定對應realm。

  kdb5_utilcreate-rQUNYING>LIU-s

  如果遇到數據庫已經存在的提示,可以把/var/kerberos/krb5kdc/目錄下的principal的相關文件都刪除掉。默認的數據庫名字都是principal。可以使用-d指定數據庫名字。(尚未測試多數據庫的情況)。

  B.啟動kerberos。如果想開機自啟動,需要stash文件。

  /usr/local/sbin/krb5kdc

  /usr/local/sbin/kadmind

  至此kerberos,搭建完畢。

  測試kerberos,搭建完畢后,進行以下步驟測試Kerberos是否可用。

  A. 進入kadmin在kadmin上添加一個超級管理員賬戶,需要輸入passwd

  kadmin.local

  addprincadmin/admin

  B. 在其它機器嘗試通過kadmin連接,需要輸入密碼

  kinitadmin/admin

  kadmin

  如果能成功進入,則搭建成功。

  kerberos日常操作

  管理員操作

  登錄到管理員賬戶: 如果在本機上,可以通過kadmin.local直接登錄。其它機器的,先使用kinit進行驗證。

  kadmin.local

  kinitadmin/admin

  kadmin

  增刪改查賬戶:在管理員的狀態下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。

  kamdin:addprinc-randkeyhdfs/hadoop1

  kamdin:delprinchdfs/hadoop1

  kamdin:listprincs命令

  生成keytab:使用xst命令或者ktadd命令

  kadmin:xst-k/xxx/xxx/kerberos.keytabhdfs/server1

  用戶操作

  查看當前的認證用戶:klist

  認證用戶:kinit-kt/xx/xx/kerberos.keytabhdfs/server1

  刪除當前的認證的緩存:kdestroy

  google authenticator:

  基于TOTP(Time-based One-time Password,基于時間的一次性密碼)

  TOTP(基于時間的一次性密碼算法)是支持時間作為動態因素基于HMAC一次性密碼算法的擴展。

  http://tools.ietf.org/html/rfc6238

  條件:

  1)Prover與Verifier之間必須時鐘同步;

  2)Prover與Verifier之間必須共享密鑰;

  3)Prover與Verifier之間必須使用相同的時間步長

  算法:

  K 共享密鑰

  T 時間

  T0 開始計數的時間步長

  X 時間步長

  TOTP = Truncate(HMAC-SHA-1(K, (T – T0) / X))

  使用Google Authenticator的步驟:

  1. 服務器端對每個用戶生成一個唯一的密鑰SecretKey。

  2. 用戶在手機上安裝Google Authenticator。首次使用需要將密鑰輸入到Google Authenticator。可通過手動和掃描系統生成的二維碼等兩種方式輸入密鑰信息。

  3. Google Authenticator每隔一段時間為系統自動生成一個新的密碼。用戶在輸入口令前需先輸入生成的動態驗證碼。

  客戶端實現

  python實現:

  #!/usr/bin/envpython

  #-*-coding:utf-8-*-

  importhmac,base64,struct,hashlib,time,sys,os

  defget_hotp_token(secret,intervals_no):

  key=base64.b32decode(secret)

  msg=struct.pack(">Q",intervals_no)

  h=hmac.new(key,msg,hashlib.sha1).digest()

  o=ord(h[19])&15

  h=(struct.unpack(">I",h[o:o+4])[0]&0x7fffffff)%1000000

  returnh

  defget_totp_token(secret):

  returnget_hotp_token(secret,intervals_no=int(time.time())//30)

  #Sec=str(sys.argv[1])

  Sec='xxxxxxx'

  validation_code=str(get_totp_token(Sec))

  printvalidation_code

  ruby實現:

  #!/usr/bin/ruby

  require'rubygems'

  require'base32'

  require'openssl'

  int=30

  now=Time.now.to_i/int

  key=Base32.decode'xxxxxxxx'

  sha=OpenSSL::Digest::Digest.new('sha1')

  (-1..1).eachdo|x|

  bytes=[now+x].pack('>q').reverse

  hmac=OpenSSL::HMAC.digest(sha,key.to_s,bytes)

  offset=hmac[-1]&0x0F

  hash=hmac[offset…offset+4]

  code=hash.reverse.unpack('L')[0]

  code&=0x7FFFFFFF

  code%=1000000

  putscode

  end

  跳板機登錄增加谷歌二次認證

  Google Authenticator模塊安裝:

  EPEL源安裝: yum install libpam-google-authenticator

  2.源碼安裝:

  yuminstallmakegccpam-devel

  #cd/tmp

  #wgethttp://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2

  #bunzip2libpam-google-authenticator-1.0-source.tar.bz2

  #tarxflibpam-google-authenticator-1.0-source.tar

  #cdlibpam-google-authenticator-1.0

  #make

  gcc–std=gnu99-Wall-O2-g-fPIC-c-fvisibility=hidden-ogoogle-authenticator.ogoogle-authenticator.c

  gcc–std=gnu99-Wall-O2-g-fPIC-c-fvisibility=hidden-obase32.obase32.c

  gcc–std=gnu99-Wall-O2-g-fPIC-c-fvisibility=hidden-ohmac.ohmac.c

  gcc–std=gnu99-Wall-O2-g-fPIC-c-fvisibility=hidden-osha1.osha1.c

  gcc-g-ogoogle-authenticatorgoogle-authenticator.obase32.ohmac.osha1.o-ldl

  gcc–std=gnu99-Wall-O2-g-fPIC-c-fvisibility=hidden-opam_google_authenticator.opam_google_authenticator.c

  gcc-shared-g-opam_google_authenticator.sopam_google_authenticator.obase32.ohmac.osha1.o-lpam

  gcc–std=gnu99-Wall-O2-g-fPIC-c-fvisibility=hidden-odemo.odemo.c

  gcc-DDEMO–std=gnu99-Wall-O2-g-fPIC-c-fvisibility=hidden-opam_google_authenticator_demo.opam_google_authenticator.c

  gcc-g-rdynamic-odemodemo.opam_google_authenticator_demo.obase32.ohmac.osha1.o-ldl

  gcc-DTESTING–std=gnu99-Wall-O2-g-fPIC-c-fvisibility=hidden

  -opam_google_authenticator_testing.opam_google_authenticator.c

  gcc-shared-g-opam_google_authenticator_testing.sopam_google_authenticator_testing.obase32.ohmac.osha1.o-lpam

  gcc–std=gnu99-Wall-O2-g-fPIC-c-fvisibility=hidden-opam_google_authenticator_unittest.opam_google_authenticator_unittest.c

  gcc-g-rdynamic-opam_google_authenticator_unittestpam_google_authenticator_unittest.obase32.ohmac.osha1.o-lc-ldl

  #makeinstall

  cppam_google_authenticator.so/lib64/security

  cpgoogle-authenticator/usr/local/bin

  設置Google Authenticator

  運行/usr/local/bin/google-authenticator

  會在當前帳號home目錄下生成相關配置文件。

  Doyouwantmetoupdateyour"~/.google_authenticator"file(y/n)y

  https://www.google.com/chart?chs=200×200&chld=M|0&cht=qr&chl=otpauth://totp/user@server%3Fsecret%3DABCD12E3FGHIJKLMN

  Yournewsecretkeyis:ABCD12E3FGHIJKLMN

  Yourverificationcodeis98765432

  Youremergencyscratchcodesare:

  01234567

  89012345

  67890123

  45678901

  23456789

  Doyouwanttodisallowmultipleusesofthesameauthentication

  token?Thisrestrictsyoutooneloginaboutevery30s,butitincreases

  yourchancestonoticeorevenpreventman-in-the-middleattacks(y/n)y

  Bydefault,tokensaregoodfor30secondsandinordertocompensatefor

  possibletime-skewbetweentheclientandtheserver,weallowanextra

  tokenbeforeandafterthecurrenttime.Ifyouexperienceproblemswithpoor

  timesynchronization,youcanincreasethewindowfromitsdefault

  sizeof1:30mintoabout4min.Doyouwanttodoso(y/n)y

  Ifthecomputerthatyouareloggingintoisn'thardenedagainstbrute-force

  loginattempts,youcanenablerate-limitingfortheauthenticationmodule.

  Bydefault,thislimitsattackerstonomorethan3loginattemptsevery30s.

  Doyouwanttoenablerate-limiting(y/n)y

  sshd配置加入谷歌認證模塊:

  /etc/pam.d/sshd

  #%PAM-1.0

  authrequiredpam_google_authenticator.so

  authincludesystem-auth

  accountrequiredpam_nologin.so

  accountincludesystem-auth

  passwordincludesystem-auth

  sessionoptionalpam_keyinit.soforcerevoke

  sessionincludesystem-auth

  sessionrequiredpam_loginuid.so

  修改/etc/ssh/sshd_config

  加入hallengeResponseAuthenticationyes

  本地網絡登錄帳號跳過谷歌認證模塊設置:

  /etc/pam.d/sshd 增加

  auth[success=1default=ignore]pam_access.soaccessfile=/etc/security/access-local.conf

  authrequiredpam_google_authenticator.so

  在/etc/security/access-local.conf文件中增加:

  #GoogleAuthenticatorcanbeskippedonlocalnetwork

  +:ALL:192.168.0.0/24

  +:ALL:LOCAL

  -:ALL:ALL

  允許192.196.0.0網段的用戶登錄帳號時跳過谷歌認證步驟。

  整個跳板機部署完畢后,用戶如何登錄對于很多開發人員完全未知,站在用戶的角度我們進行了一次內部分享,對如何登錄跳板機做了簡要說明。

  基于openldap+Kerberos+google authenticator動態口令實現的運維跳板機

  基于openldap+Kerberos+google authenticator動態口令實現的運維跳板機

  基于openldap+Kerberos+google authenticator動態口令實現的運維跳板機

  基于openldap+Kerberos+google authenticator動態口令實現的運維跳板機

  基于openldap+Kerberos+google authenticator動態口令實現的運維跳板機

  基于openldap+Kerberos+google authenticator動態口令實現的運維跳板機

  基于openldap+Kerberos+google authenticator動態口令實現的運維跳板機

  當然較于現在出現的比較高大上的堡壘機而言,運維跳板機的功能還是相當簡單,只實現了用戶信息和權限管理的統一,同時也只是事后的安全審計,目前還不能事前控制以避免人員的誤操作。堡壘機一般支持的協議有圖形(RDP/VNC/X11)、字符(SSH/TELNET)、文件(FTP/SFTP)和一些數據庫協議(MySQL、Oracle)等等。除此之外,除了未實現高端的圖形界面顯示和一些比較人性化的交互功能外,目前大部分的功能(比如單點登錄,審計,帳號管理,操作也可以定位到來源和人員)我們都是具有的。

 

上一篇:安卓防火墻 PS DroidWall

下一篇:Metasploit滲透技巧:后滲透Meterpreter代理