bash構成ファイルを自動的に生成しますか?

bash構成ファイルを自動的に生成しますか?

この素晴らしい練習の指示に従ってください。ここ

私のドメインを認証するようにCentOS 6.5サーバーを正常に設定しました。しかも、それただこのグループのドメインユーザーがdomain-ssh-usersSSH経由でログインできるようにします。パズルのピースがもう一つ必要です。

ドメインユーザーがSSHを介して初めてログインすると、そのユーザーのホームディレクトリが自動的に作成されます(上記の練習に従って)。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

それでは…まあ、多分かなり簡単かもしれません。/homeユーザーが内部にあるか外部にあるかに応じて、bash生成スクリプトで他の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_CLIENTSSH_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(コントローラ)のドメインユーザーステータスの確認

これを達成する1つの方法は、他の答えで指摘されているように/profile.d/ディレクトリにスクリプトを配置することです。

ドメインメンバーシップとユーザーの状態をテストし、クエリの結果に基づいて要件を満たしたり、ユーザーがドメイン権限要件を満たしていない場合はbash_profileを作成しないでください。

バッシュコンソールコマンド

$> 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

ハッキーですが可能です...

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

関連情報