zoukankan      html  css  js  c++  java
  • relay(跳板机)搭建

    初始化上线一台机器

    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 ("""
    
    33[1;22;32m
    ************************************ 公告 ************************************
    说明:
    33[0m
    
    33[1;22;32m1.33[0m  Server ssh 登陆: 33[1;33;32m现在由apptree鉴权33[0m;
    
    33[1;22;32m2.33[0m  从Relay登陆Server, 若鉴权失败时, 会遇到相关错误;
        33[1;33;32m错误内容:33[0m Permission denied (publickey, keyboard-interactive)
    
    33[1;22;32m3.33[0m  莫慌, 33[1;33;32m请阅读wiki33[0m, 从应用树申请权限;
        33[1;33;32m
        wiki:
        http://wiki.corp.bianlifeng.com/pages/viewpage.action?pageId=13238414533[0m
    
    33[1;22;32m
    ******************************************************************************
    33[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 模块名看就行

  • 相关阅读:
    day21
    day19
    【淘淘商城项目】jsonp解决ajax跨域问题
    【淘淘商城项目】商品规格参数的表结构设计
    打印日志的时机
    【javascript】call和apply的区别
    MySQL timestamp自动更新时间
    spring管理属性配置文件properties——PropertiesFactoryBean和PropertyPlaceholderConfigurer的区别
    【Maven】修改nexus默认的工作目录
    URIEncoding和UseBodyEncodingForURI的解释
  • 原文地址:https://www.cnblogs.com/ybsport/p/12294173.html
Copyright © 2011-2022 走看看