按照这个精彩演练中的说明进行操作这里。
我已成功配置我的 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 邮件列表:: 根据 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