更新:新版已發見 http://laoguang.blog.51cto.com/6013350/1576729
----------------------------------------------------------
更新:有疑問qq羣 399218702
更新:建議大家第一遍做的時候,所有的都與文檔一致,由於筆者懶把所有的密碼設置成redhat了,所以導致好多小夥伴部署的時候遇到問題,抱歉,筆者正在努力碼代碼,修改一下bug,更新一些功能,另如果有小夥伴對該項目有興趣,可以一起做做,筆者水平確實有限。
環境:系統CentOS6.4 iptables, selinux已關閉
jumpserver ldapserver : 192.168.2.130
測試服務器: 192.168.2.132
mysql數據庫: 192.168.2.130
一、安裝ldapserver
1. yum安裝openldap server
1 yum install -y openldap openldap-servers openldap-clients
2. 準備配置文件
1 cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
2 cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
3. 修改配置文件 注意:rootpw後面的密碼前面最好有3個tab,配置文件嚴格,每行後面不能有空格
1 vim /etc/openldap/slapd.conf
2
3 1) 設置目錄樹的後綴
4 suffix "dc=dianping,dc=com"
5 2) 設置管理員DN
6 rootdn "cn=admin,dc=dianping,dc=com"
7 3) 設置管理員密碼
8 rootpw redhat
9 或機密格式, 加密格式可通過 slappasswd命令來生成
10 rootpw {SSHA}j6OO++o76F2yhww2Cg/+Hy8oDPixx6C3
11 4) 設置ldap日誌,在argsfile下面添加
12 loglevel 1
13 修改系統日誌配置文件
14 vim /etc/rsyslog.conf # centos5版應該是syslog.conf
15 local4.* /var/log/ldap.log
16 service rsyslog restart
17 5) 修改完配置文件後用以下命令生成新的配置文件,以後不再特殊說明
18 service slapd start # 第一次需要啓動一下
19 rm -rf /etc/openldap/slapd.d/*
20 slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
21 chown -R ldap:ldap /etc/openldap/slapd.d/
22 service slapd restart
4. 查看啓動情況
1 [root@localhost openldap]# netstat -tulnp | grep slapd
2 tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 48776/slapd
3 tcp 0 0 :::389 :::* LISTEN 48776/slapd
5. 安裝migrationtools,遷移本地賬戶密碼到ldap
爲了測試,我們先在服務器上建立一個測試賬號,這個賬號是爲了測試ldap是否成功的
1 useradd guanghongwei
2 echo 'redhat' | passwd --stdin guanghongwei
1). 安裝並修改配置文件
1 yum -y install migrationtools
2 cd /usr/share/migrationtools/
3 vim migrate_common.ph # 71行左右
4 $DEFAULT_MAIL_DOMAIN = "dianping.com";
5 $DEFAULT_BASE = "dc=dianping,dc=com";
2). 使用腳本導出ldif文件
1 ./migrate_base.pl > /tmp/base.ldif
2 ./migrate_passwd.pl /etc/passwd > /tmp/passwd.ldif
3 ./migrate_group.pl /etc/group > /tmp/group.ldif
3). 導入到ldap中,會提示輸入密碼,密碼slapd.conf配置文件中設置的那個rootpw
1 ldapadd -x -W -D "cn=admin,dc=dianping,dc=com" -f /tmp/base.ldif
2 ldapadd -x -W -D "cn=admin,dc=dianping,dc=com" -f /tmp/passwd.ldif
3 ldapadd -x -W -D "cn=admin,dc=dianping,dc=com" -f /tmp/group.ldif
二、測試服務器安裝ldap客戶端
1. 安裝LDAP客戶端及依賴組件
1 yum -y install openldap openldap-clients nss-pam-ldapd pam_ldap #centos6
2 yum -y install openldap openldap-clients nss_ldap #centos5
2. 增加BIND策略,避免LDAP無法連接時無法開機
1 echo "bind_policy soft" >> /etc/openldap/ldap.conf
3. 自動創建目錄設置
1 echo "session required pam_mkhomedir.so skel=/etc/skel umask=0077" >> /etc/pam.d/system-auth
4. 設置LDAP啓用,後面的ldapserver改爲實際中的
1 #centos6
2 authconfig --savebackup=auth.bak
3 authconfig --enableldap --enableldapauth --enablemkhomedir --enableforcelegacy --disablesssd --disablesssdauth --ldapserver=192.168.2.130 --ldapbasedn="dc=dianping,dc=com" --update
4
5 #centos5
6 authconfig --enableldap --enableldapauth --enablemkhomedir --ldapserver=192.168.2.130 --ldapbasedn="dc=dianping,dc=com" –-update
5. 從主上測試連接服務器,該用戶是剛纔添加的那個
1 ssh guanghongwei@192.168.2.132 #132上沒有useradd該用戶哦,如果能連接上證明ldap使用ok
三、 讓ldap server負責sudo管理
1. 拷貝sudo schema,centos版本不一樣,可能sudo的版本不是1.8.6,其他的也可以
1 cp /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema ## 拷貝schema
2. 配置文件導入schema,切記 配置文件比較敏感,行尾不要有多餘空格
1 vim /etc/openldap/slapd.conf # 增加一項一項
2 include /etc/openldap/schema/sudo.schema
3 rm -rf /etc/openldap/slapd.d/*
4 slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
5 chown -R ldap:ldap /etc/openldap/slapd.d/*
6 service slapd restart
3. 將sudo base導入到ldap
1) 建立數據庫ldif文件,切記該數據文件每行最後也不允許有空格,並刪掉註釋,可以用羣共享裏那個
1 vim sudo.ldif
2
3 dn: ou=Sudoers,dc=dianping,dc=com
4 objectClass: top
5 objectClass: organizationalUnit
6 ou: Sudoers
7
8 dn: cn=defaults,ou=Sudoers,dc=dianping,dc=com
9 objectClass: top
10 objectClass: sudoRole
11 cn: defaults
12 sudoOption: !visiblepw
13 sudoOption: always_set_home
14 sudoOption: env_reset
15 sudoOption: requiretty
16
17 dn: cn=guanghongwei,ou=Sudoers,dc=dianping,dc=com ## dn, 使用時 請刪除註釋,並不能有空格
18 objectClass: top
19 objectClass: sudoRole
20 cn: guanghongwei ## 對應的是用戶名或者組
21 sudoCommand: ALL ## 可以執行的命令
22 sudoHost: ALL ## 可以登錄的Host
23 sudoOption: !authenticate ## 是否需要輸入密碼
24 sudoRunAsUser: ALL ## 以哪個用戶執行
25 sudoUser: guanghongwei ## 用戶或者組
2) 導入到ldap中,如果報錯很有可能是空格的原因
1 ldapadd -x -W -D "cn=admin,dc=dianping,dc=com" -f sudo.ldif
測試服務器:
4. 測試服務器設置,讓ldap代理sudo,行尾不能有空格
1 vi /etc/sudo-ldap.conf
2 uri ldap://192.168.2.130
3 Sudoers_base ou=Sudoers,dc=dianping,dc=com
4 vi /etc/nsswitch.conf 增加
5 Sudoers: ldap files
5. 測試,用戶並沒在服務器的sudoer file中,如果sudo成功,證明已使用ldap的sudo
1 [root@localhost tmp]# ssh [email protected]
2 guanghongwei@192.168.2.132's password:
3 Last login: Mon Mar 10 02:27:50 2014 from 192.168.2.130
4 [guanghongwei@2namenode ~]$ sudo su
5 [root@2namenode guanghongwei]#
上面這部分其實是ldap配置的過程,如果用過的朋友應該很熟悉,再部署個phpldapadmin纔算完整,不過我們先不用,下面進入主題,講講如何部署跳板機 http://laoguang.blog.51cto.com/6013350/1540793
四、 部署jumpserver
1). 下載代碼
1 cd /opt/
2 git clone https://github.com/ibuler/jumpserver
如果克隆不下來去https://github.com/ibuler/jumpserver 下載代碼
2. 如果是下載的,需要重命名
1 mv jumpserver-master jumpserver ## 切記最終是 /opt/jumpserver/哦
3. 下載建立數據庫, 並授權
1 yum -y install mysql-server
2 serivce mysqld start
3 mysql
4 mysql> create database jumpserver charset='utf8'; # 否則中文可能亂碼
5 mysql> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'redhat';
6 mysql> grant all on jumpserver.* to 'jumpserver'@'localhost' identified by 'redhat';
4. 編輯配置文件
1) 修改jumpserver的配置文件, 主要是修改一下db和key,下面的不動
1 vim jumpserver.conf
2 #coding:utf-8
3
4 [db]
5 host = 127.0.0.1
6 port = 3306
7 user = jumpserver # 授權的用戶
8 password = redhat # 授權密碼
9 db = jumpserver # 數據庫
10
11 [jumpserver]
12 log_dir = /opt/jumpserver/logs/
13 user_table = UserManage_user
14 assets_table = Assets_assets
15 assets_user_table = Assets_assetsuser
16 key = 88aaaf7ffe3c6c04 #可修改此key需要是16位
17 useradd_shell = /opt/jumpserver/useradd.sh
18 userdel_shell = /opt/jumpserver/userdel.sh
19 sudoadd_shell = /opt/jumpserver/sudoadd.sh
20 sudodel_shell = /opt/jumpserver/sudodel.sh
21 keygen_shell = /opt/jumpserver/genkey.sh
22 chgpass_shell = /opt/jumpserver/chgpass_shell.sh
2) 修改bash調用的配置文件 shell.conf
1 vim shell.conf
2
3 #!/bin/bash
4
5 host=127.0.0.1
6 ldapassword=redhat
7 domain=dianping
8 suffix=com
9 #host2=172.16.2.74
10 #host2_port=2001
3) 添加一個admin用戶
1 useradd admin
2 echo 'redhat' | passwd --stdin admin
4) 安裝依賴的python庫,如果有epel源可以 yum -y installl python-pip,也可以源碼安裝參考: http://my.oschina.net/zhangxu0512/blog/175208
1 yum -y install python-devel python-crypto mysql-devel # MySQLdb也就是mysql-python依賴
2 pip install django==1.6 paramiko pam mysql-python pexpect pycrypto-on-pypi -i http://pypi.douban.com/simple
3
5) 初始化庫
1 cd webroot/AutoSa/
2 python manage.py syncdb
3 no
6) 測試運行
1 chmod +x manage.py
2 chmod +x runserver
3 chmod +x ../../*.sh
4 chmod 777 ../../logs
5 ./runserver #默認監聽80,可以修改
6
7 瀏覽器查看,密碼是 第3步 admin的賬號和密碼
五、 測試添加用戶主機登錄
1) 登錄
賬號是admin,密碼是 第3部添加的那個密碼
2) 添加用戶, 提示添加成功,纔算成功,如果不成功,請看./runserver那裏的提示
密碼:是指登錄web和跳板機的密碼(如果禁用密碼登錄就不能登錄了),key密碼是登錄跳板機密鑰的密碼,我的想法是不允許跳板機使用密碼登錄,只允許使用密鑰,需要修改sshd_config,另外查看用戶裏面的Key目前不允許admin下載
3) 添加主機
4) 授權
添加權限-添加權限
5) 退出admin,登錄jery賬號,可以更改各種密碼,然後下載密鑰
6) 將下載的密鑰導入xshell或者其他shell中,輸入密碼
7) 使用密鑰登錄跳板機
8) 登錄測試
1 cd /opt/jumpserver
2 python jumpserver.py
3 試試各種功能
9) 查看日誌 /opt/jumpserver/logs中
10) 最終沒確認沒問題將目錄下面的jumpserver.sh移動到 /etc/profile.d/中,來讓登錄時運行堡壘機腳本
1 mv jumpserver.sh /etc/profile.d/
11) 目前web版本沒有管理sudo的功能,所以需要安裝phpldapadmin來管理sudo,可以控制該用戶再哪些服務器上有sudo權限,可以執行哪些命令 ,phpldapadmin安裝參考 http://zhumeng8337797.blog.163.com/blog/static/100768914201010994913503/
題後:目前版本有些bug, 不建議生產中使用,雖然筆者已經在生產中使用了,因爲需要考慮ldap的主備,jumpserver的主備,如果能理解原理,可以對代碼進行改進,並應用到生產中,
其實部署ldap佔用了太多時間,有興趣的朋友可以試試,將來打算寫個一鍵腳本,有問題可以聯繫我 [email protected] 有疑問可以加羣,見最前面!