【问题标题】:SSH user response promptSSH 用户响应提示
【发布时间】:2016-12-03 09:54:01
【问题描述】:

我们目前有几个用户在通过 SSH 登录服务器时使用管理员用户。他们都有自己的用户,但不幸的是,他们仍然偶尔使用管理员用户。我们当然可以将其锁定并采取措施确保从未使用过该用户,但我正在寻找是否有办法强制每次登录输入他们使用该用户的原因,然后才能登录并在他们使用管理员用户时访问服务器。

通过这种方式,我们可以轻松地将访问日志文件与员工姓名以及他们使用该用户的原因进行比较。

有什么想法吗?

【问题讨论】:

  • 我投票结束这个问题,因为它属于Unix & Linux
  • 随机设置管理员密码。然后,您将有 2 个选项。选项 1:使用sudo。这会将用户sudoing 记录为管理员。选项 2:对管理员用户使用基于 ssh 密钥的身份验证。每个人都需要向这个管理员用户注册他们的 ssh-key。

标签: bash shell ssh


【解决方案1】:

这就是我要做的。

将每个人的 ssh 公钥注册到管理员用户的authorized_keys。在每个条目中,将环境 EMPLOYEE 设置为 employeename。这将要求在/etc/ssh/sshd_config 中将PermitUserEnviroment 设置为yes。示例条目应如下所示。

environment="EMPLOYEE=employee1" ssh-rsa AAAAB3NzaC1y.....EU88ovYKg4GfclWGCFYTuw8==

现在我们有了一个名为EMPLOYEE的环境变量,我们可以编写一个简单的脚本来询问原因。

创建一个文件/etc/profile.d/reason.sh。该文件不需要是可执行的,因为它将被获取。

if [[ $(whoami) = "admin" ]]; then
    read -p "Please specify the reason for logging in as $USER user: " reason
    if [ -z "$reason" ]; then
        logout
    fi
fi

现在您可以登录 $EMPLOYEE$reason

【讨论】:

    【解决方案2】:

    这是一个想法

    #!/bin/bash
    
    # if the user tries Ctrl+C to avoid this check
    trap INT no_shell_for_you
    
    no_shell_for_you() { exec /bin/false; }
    
    read -p "Your username please: " username
    
    if getent password "$username" >/dev/null 2>&1; then
        echo "Welcome, $username"
        # log $username somewhere
        exec /bin/bash -l
    else
        no_shell_for_you
    fi
    
    1. 另存为 ~admin_user/bin/get_real_user.sh
    2. 将 /full/path/to/admin_user/bin/get_real_user.sh 添加到/etc/shells
    3. sudo chsh -s /full/path/to/admin_user/bin/get_real_user.sh admin_user

    这是未经测试的。在第 3 步之前彻底测试

    【讨论】:

    • 谢谢!这帮助我找到了正确的方向。
    • 这对虚假陈述是开放的。任何用户都可以伪装成另一个用户。
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多