自动创建 bash 配置文件?

自动创建 bash 配置文件?

按照这个精彩演练中的说明进行操作这里

我已成功配置我的 CentOS 6.5 服务器以通过我的域进行身份验证。此外,它仅有的允许该组的域用户domain-ssh-users通过SSH登录。我的拼图还需要一块。

当域用户第一次通过 SSH 登录时,会自动为其创建一个主目录(根据我上面发布的演练)。对于为 group 的这些域用户创建的所有主目录domain-ssh-users,但是不是对于本地用户,我想.bash_profile创建一个特定的。其中“简单”的部分是,.bash_profile所有的 都将是相同的domain-ssh-users

谁能给我任何线索如何去做这件事?

编辑:本地登录和域登录之间的环境变量差异。

除了这些差异(出于安全考虑而进行了混淆)之外,一切都几乎相同。

本地用户:

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/LOCALUSER/bin
PWD=/home/LOCALUSER
HOME=/home/LOCALUSER
LOGNAME=LOCALUSER

域用户:

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/local.mydomainname.com/DOMAINUSER/bin
PWD=/home/local.mydomainname.com/DOMAINUSER
KRB5CCNAME=FILE:/tmp/krb5cc_gibberish_8839
HOME=/home/local.mydomainname.com/DOMAINUSER

所以...嗯,也许这非常简单。我可以让 bash 创建脚本根据用户是否在/home或 in 来使用不同的 bash_profile/home/local.mydomainname.com吗?

编辑2:

因此,我尝试创建它.bash_profile作为测试并将其放入本地用户和域用户的 /home 目录中:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
       . ~/.bashrc
fi

env='env'

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

if echo $env grep -q "local.mydomain.com"
       then
               umask 000
               /domain/menu.sh
               clear;exit
fi

但现在,当我以本地用户或域用户身份登录时,它会启动 menu.sh。我是这个 .bash_profile 创建的新手,所以我确信我错过了一些简单的东西。

答案1

.bash_profile文件放入/etc/skel/.它基本上是新用户配置文件的模板目录。$HOME当创建新用户并且他们有一个目录时,其中的任何内容都会被复制到其中$HOME。它类似于 Windows 中的默认配置文件。

要为远程和本地用户使用相同的文件,请查找仅远程用户设置的变量,并在要应用于他们的功能/设置中包含对该变量的测试。类似于SSH_CLIENT或 的东西SSH_TTY

if [[ $SSH_CLIENT ]]; then
    setup foo for a remote user
else
    setup foo for a local user
fi

答案2

/etc/profile.d/目录包含在 user_login 上运行的脚本。此处创建一个脚本来生成 bash 配置文件。

#!/bin/bash
export your environment variables here
or invoke a script that generates bash profile.

bash_profile 位置应位于用户目录中,即 (/home/usr/.bash_profile)

bash_profile 通常是导出的环境变量的列表(即路径...)

export VARENV="/path/to/object/"

答案3

将用户帐户与域同步的 SAMBA 手册页

SAMBA 邮件列表:: 根据 Active Directory D(omain)/C(controller) 检查域用户的状态

我认为完成此任务的一种方法是将脚本放置在我的其他答案中指出的 /profile.d/ 目录中。

测试域成员资格和用户状态,然后根据查询结果满足您的要求,或者如果用户不满足域权限要求,则不要创建 bash_profile。

Bash 控制台命令

$> getent group

输出

Domain Admins:x:512:root
Domain Users:x:513:jht,lct,ajt,met,vlendecke
Domain Computers:x:553:
... ...
domain-ssh-users:x:55X:harry,mark,john

测试域组成员资格

DOMAIN_GROUPS=`getent group`
USERS_DOMAIN_SSH=`echo $DOMAIN_GROUPS | grep "domain-ssh-users" | sed 's/domain-ssh-users:x:55X://g`
USER=`last | head -n 1`
if [ `echo $DOMAIN_GROUPS | grep $USER` ]
then
#... Do add bash_profile.
else
#... Do not add bash_profile.
exit
fi

这很hacky,但是可行......

DOMAIN_GROUPS 分配列出了关联的域组和用户。 USER_DOMAIN_SSH 读取 DOMAIN_GROUPS,删除除域 ssh-user 行之外的所有内容,并且流文本处理删除除逗号分隔的用户之外的所有内容。 USER 检查最后登录的用户并读取绝对最新登录。

该测试检查 USER 的 DOMAIN_GROUPS 字符串。

SAMBA 路径导出示例

if [ $TEST_DOMAIN_USER_ACCESS_LEVEL ]
then
export PATH='/usr/local/samba/bin:\
/usr/local/samba/sbin:$PATH' >> /home/domain/user/.bash_profile && echo OK
else
exit
fi

桑巴集团管理

profile.d 脚本

#!/bin/bash
env=`env`
#Store env to string then test for domain membership...
if echo $env grep -q "local.mydomainname.com"
  then
    user=`cat /var/log/auth | grep LOGIN | grep -o '.\{0,0\}:.\{0,100\} | sed 's/: //g' | grep -Eo '^[^ ]`
    # There's a step ^^ missing in this assignment to grab the first line matching a pattern. So here we are checking what user to build for.
    echo "Line 1 of ~/.bashrc" >> /home/mydomain/$user
    echo "Line 2 of ~/.bashrc" >> /home/mydomain/$user
  else
    echo "Do not build a ~./bashrc for non-domain users"
fi

相关内容