이 훌륭한 연습의 지침을 따르십시오.여기.
내 도메인을 인증하도록 CentOS 6.5 서버를 성공적으로 구성했습니다. 게다가, 그것은오직이 그룹의 도메인 사용자가 domain-ssh-users
SSH를 통해 로그인하도록 허용합니다. 퍼즐 조각이 하나 더 필요해요.
도메인 사용자가 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_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(컨트롤러)에 대해 도메인 사용자 상태 확인
이를 달성하는 한 가지 방법은 다른 답변에서 지적한 대로 /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