初始化上線一台機器
pass
搭建otp認證模塊
yum install gcc gcc-c++ pam-devel curl-devel -y git clone http://git.corp.bianlifeng.com/sec/otp.git cd otp/pam sh build.sh mv pam_otp.so /lib64/security/pam_otp.so
pam模塊配置
./postlogin-ac
#%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. session [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet session optional pam_lastlog.so silent noupdate showfailed
password-auth-ac
#%PAM-1. auth required pam_env.so auth [default=1 success=ok] pam_localuser.so auth [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass auth sufficient pam_unix.so auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth sufficient pam_sss.so forward_pass auth required pam_deny.so account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account [default=bad success=ok user_unknown=ignore] pam_sss.so account required pam_permit.so password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_sss.so use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session optional pam_oddjob_mkhomedir.so umask=0077 session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_sss.so
sshd
#%PAM-1.0 auth requisite pam_otp.so host=127.0.0.1 port=28080 path=/auth.php user_field=user token_field=otp appid_field=appid appid_value=relay_pam auth required pam_sepermit.so auth substack password-auth auth include postlogin # Used with polkit to reauthorize users in remote sessions -auth optional pam_reauthorize.so prepare account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session required pam_namespace.so session optional pam_keyinit.so force revoke session include password-auth session include postlogin # Used with polkit to reauthorize users in remote sessions -session optional pam_reauthorize.so prepare
nginx相關配置
yum install nginx -y mkdir -p /data/logs/nginx/ systemctl restart nginx
cat /etc/nginx/conf.d/otp.vip.blibee.com.conf upstream otp { server 10.253.60.189:28080 max_fails=1 fail_timeout=10s; server 10.253.60.194:28080 max_fails=1 fail_timeout=10s; } server { listen 127.0.0.1:28080; server_name otp.vip.blibee.com; access_log /data/logs/nginx/otp.vip.blibee.com.log main; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_403 http_404; proxy_next_upstream_tries 1; location / { proxy_pass http://otp; } }
crontab -l
crontab -l
# Lines below here are managed by Salt, do not edit # for user key # sync acount for relay * * * * * /usr/local/bin/keys_sync -home=/home/ -d -r -a # user key from relay1 to relay2, 已關閉 # */2 * * * * rsync -auz --password-file=/etc/.rsyncd/.secrets /home/ relay1.sys.ops.bj1.wormpex.com:/home/ # clean user home dir 01 04 * * * [ $(df -h|awk '$NF=="/"{split($4,F,"G");print F[1]}') -lt 100 ] && find /home -maxdepth 2 -mindepth 2 -type d|awk -F"/" '$NF!~/\./'|xargs -i rm -rf {} # SALT_CRON_IDENTIFIER:sh /usr/local/uarchive/archive-data-collector.sh >>/var/log/cron-archive-data-collector.log 2>&1 39 0 * * * sh /usr/local/uarchive/archive-data-collector.sh >>/var/log/cron-archive-data-collector.log 2>&1 # kube key sync 30 * * * * sh /home/kube.sh >>/dev/null 2>&1
登錄后的輸出
[root@Relay profile.d]# cat /etc/profile.d/motd.sh #motd motd () { python /usr/local/bin/motd.py } [ "$(who -u am i|awk '{print $1}')" == "$(whoami)" ] && motd
cat /usr/local/bin/motd.py
#!/usr/bin/python #-*- coding:utf8 -*- print (""" \033[1;22;32m ************************************ 公告 ************************************ 說明: \033[0m \033[1;22;32m1.\033[0m Server ssh 登陸: \033[1;33;32m現在由apptree鑒權\033[0m; \033[1;22;32m2.\033[0m 從Relay登陸Server, 若鑒權失敗時, 會遇到相關錯誤; \033[1;33;32m錯誤內容:\033[0m Permission denied (publickey, keyboard-interactive) \033[1;22;32m3.\033[0m 莫慌, \033[1;33;32m請閱讀wiki\033[0m, 從應用樹申請權限; \033[1;33;32m wiki: http://wiki.corp.bianlifeng.com/pages/viewpage.action?pageId=132384145\033[0m \033[1;22;32m ****************************************************************************** \033[0m """)
整體的認證說明
#%PAM-1.0 auth requisite pam_otp.so host=127.0.0.1 port=28080 path=/auth.php user_field=user token_field=otp appid_field=appid appid_value=relay_pam auth required pam_sepermit.so # 因為我們禁用的selinux,這個模塊是完全沒有什么用的。 auth required pam_env.so # 讀取/etc/security/pam_env.conf 這個文件配置環境變量 auth [default=1 success=ok] pam_localuser.so require users to be listed in /etc/passwd 查看這個數據庫中的的用戶是否存在 auth [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass # 當用戶主密碼沒有通過的時候再次提示數據密碼 auth sufficient pam_unix.so # 記錄日志 auth requisite pam_succeed_if.so uid >= 1000 quiet_success # 如果用戶uid大約1000才會通過認證 auth sufficient pam_sss.so forward_pass # 將用戶輸入的密碼放在堆棧中方便其他的模塊使用 auth required pam_deny.so # # Used with polkit to reauthorize users in remote sessions -auth optional pam_reauthorize.so prepare account required pam_nologin.so # 如果/etc/nologin存在會認證不通過 account required pam_unix.so # 記錄日志 account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account [default=bad success=ok user_unknown=ignore] pam_sss.so # 如果返回bad就標記沒有返回狀態, 如果返回ok認證通過, 如果返回user_unknown,就忽略,認證通過 account required pam_permit.so # 將此行添加到其他登錄條目以禁用帳戶管理,但繼續允許用戶登錄。這個模塊是永遠通過的 password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= # 密碼質量檢查 password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_sss.so use_authtok # 更改密碼時,強制模塊將新密碼設置為先前堆疊的密碼模塊提供的密碼。 對於我們現在的使用情況來看是沒有什么用的。 password required pam_deny.so # pam_selinux.so close should be the first session rule session required pam_selinux.so close # 沒啥用 session required pam_loginuid.so # 在切換用戶的時候回修改登錄的uid # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session required pam_namespace.so session optional pam_keyinit.so force revoke session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session optional pam_oddjob_mkhomedir.so umask=0077 session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_sss.so session [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet session optional pam_lastlog.so silent noupdate showfailed # Used with polkit to reauthorize users in remote sessions -session optional pam_reauthorize.so prepare
- pam_sepermit.so
pam_sepermit模塊根據SELinux強制狀態允許或拒絕登錄。 當登錄的用戶與配置文件中的條目匹配時,僅當SELinux處於強制模式時,才允許其訪問。否則,他將被拒絕訪問。對於不匹配配置文件中任何條目的用戶,pam_sepermit模塊返回PAM_IGNORE返回值。 配置文件包含每行一個用戶名的列表,並帶有可選參數。如果名稱前面帶有@字符,則表示組名稱中的所有用戶都匹配。如果以%字符作為前綴,則SELinux用戶用於匹配名稱而不是帳戶名稱。請注意,禁用SELinux時,無法確定分配給該帳戶的SELinux用戶。這意味着在禁用SELinux時,此類條目永遠不會匹配,並且pam_sepermit將返回PAM_IGNORE。
- pam_env.so
pam_env PAM模塊允許(取消)設置環境變量。支持使用先前設置的環境變量以及PAM_ITEM(例如PAM_RHOST)。
默認情況下,如果未指定其他文件,則用於(取消)設置變量的規則來自配置文件/etc/security/pam_env.conf。 此模塊還可以在單獨的行(默認情況下為/etc/environment)中使用簡單的KEY = VAL對解析文件。您可以使用envfile標志更改要解析的默認文件,並通過設置readenv將其打開或關閉。分別標記為1或0。 由於設置PAM環境變量可能會對其他模塊產生副作用,因此該模塊應該是堆棧中的最后一個模塊。
- pam_localuser.so
pam_localuser是一個PAM模塊,可幫助實施站點范圍的登錄策略,該策略通常包括網絡用戶的子集和特定工作站本地的一些帳戶。使用pam_localuser或pam_wheel或pam_listfile是一種限制本地用戶和/或網絡用戶子集訪問的有效方法。
也可以使用pam_listfile.so和cron調用的一個很短的awk腳本來實現,但是它很常見,已經被分離出來了。
.......具體的直接man 模塊名看就行