Red Hat Enterprise Linux에서 자세한 사용자 추가

Red Hat Enterprise Linux에서 자세한 사용자 추가

"useradd" 결과를 로그 파일로 출력하려고 하는데 안타깝게도 자세한 옵션이 없습니다. 예를 들어 "useradd 친구"는 사용자가 이미 존재하지 않는 한 출력이 없습니다.

다음과 같은 작업을 수행하고 싶습니다: useradd -v 친구 > $logfile

0이 사용자의 UID와 GID를 쿼리하고 이를 로그 파일에 기록하면 결과 코드를 확인할 수 있다고 생각했습니다. 예를 들면 다음과 같습니다.

log=logfile
un=dude
if useradd ${un} &>> $log; then
  uu=$(getent passwd ${un} | cut -d: -f3)
  ug=$(getent passwd ${un} | cut -d: -f4)
  uh=$(getent passwd ${un} | cut -d: -f6)
  echo "User ${un} UID:${uu} GID:${ug} ${uh} successfully added." >> $log
fi 


# cat logfile
User dude UID:1000 GID:1000 /home/dude successfully added.
useradd: user 'dude' already exists

하지만 더 쉬운 옵션이 있는지 궁금합니다.

운영 체제: RHEL 7.7

/var/log/secure를 구문 분석하는 것도 또 다른 아이디어일 수 있습니다.

un=dude
useradd ${un} 2>&- &
bpid=$!
wait $bpid
ret=$?
sync
(grep "useradd\[${bpid}\]" /var/log/secure | tail -n 2) >> logfile

if [[ ${ret} -eq 0 ]]; then
  echo do whatever you need to do
else
  echo error
  exit 1
fi

# ./abc
do whatever you need to do
# ./abc
error

# cat logfile
Aug 24 03:48:07 vm7031 useradd[4929]: new group: name=dude, GID=1000
Aug 24 03:48:07 vm7031 useradd[4929]: new user: name=dude, UID=1000, GID=1000, home=/home/dude, shell=/bin/bash
Aug 24 03:48:09 vm7031 useradd[4940]: failed adding user 'dude', exit code: 9

하지만 동기화가 필요한 것 같습니다. 그렇지 않으면 grep이 작동하지 않습니다. 확실하지 않습니다. 약간 과잉인 것 같습니다.

답변1

옵션 1(RHEL, DEBIAN)

inotify-tools를 기반으로 RHEL에 사용할 수 있는 두 가지 추가 옵션이 있습니다(내가 아는 한 이 옵션은 기본적으로 설치되지 않습니다). 파이프 /dev/null는 -qq가 설명된 것만큼 조용하지 않기 때문에 터미널로의 표준 출력을 방지하기 위한 것입니다.

~을 위한데비안유통, 변화 /var/log/secure도착하다/var/log/auth.log, 당연 sudo하지만 실제로 로그인하여 root이러한 유형의 시스템 전체 모니터링을 설정하는 것은 실제로 적절한 용도 중 하나일 수 있습니다 root.

1. /var/log/secure배경 변경 모니터링:

    while inotifywait -qq -e modify /var/log/secure; 
       do 
       if tail -n1 /var/log/secure | grep useradd > /dev/null; 
         then 
           tail -n1 /var/log/secure | grep useradd >> ~/useradd.log; 

           echo "Here you can also add conditional action if user already exists";    

       fi; 
    done &

auth.log이 특정 옵션을 사용하면 로그(useradd, pam 등)의 여러 부분을 secure별도로 모니터링되는 하위 로그로 분리할 수 있기 때문에 정말 마음에 듭니다.

2. useradd명령 자체의 사용법을 모니터링하십시오.

while inotifywait -qq /usr/sbin/useradd; 
   do  
    if tail -n1 /var/log/secure | grep useradd > /dev/null; 
        then  tail -n1 /var/log/secure | grep useradd >> ~/useradd.log ;          
    fi; 
  done  &

스크립트로 패키지되어 실행되는 모든 옵션은 nohup [script] > /dev/null터미널이 닫혀 있어도 백그라운드에서 지속적으로 모니터링됩니다.

옵션 2(데비안)

또는 귀하의 경우 더 나은 옵션은 명령이 완료된 후에 실행될 것을 사용 adduser하고 생성하는 것입니다./usr/local/sbin/adduser.localadduser

다음과 같이 생성하면 adduser.local:

#!/bin/bash

# arguments passed in the following order: username uid gid home-directory
    #adjust log path accordingly

echo "ADDUSER: $1 $2 $3 $4 $5" >> ~/adduser.log

새 사용자가 생성될 때마다 로그 파일을 추가해야 합니다.

옵션 3(모두)

예, 실제 출력이 useradd다음에 추가됩니다./var/log/auth.log

예제로 테스트됨(분명히 명령 앞에 sudo가 있음)

$useradd dude
$cat /var/log/auth.log | tail -2

Aug 23 19:01:25 useradd[32230]: new group: name=dude, GID=1012
Aug 23 19:01:25 useradd[32230]: new user: name=dude, UID=1011, GID=1012, home=/home/dude, shell=/bin/sh

$useradd dude
$cat /var/log/auth.log | tail -1 

Aug 23 19:04:16 useradd[32328]: failed adding user 'dude', data deleted

전체적으로 나는 당신이 찾고 있는 것이 다음과 같다고 믿습니다:

$ sudo grep -a "useradd" /var/log/auth.log

그러면 사용자가 시스템에 추가된 이름과 시간이 포함된 모든 로그 항목이 제공됩니다.

답변2

useradd 또는 adduser 옵션은 다른 배포판보다 RHEL 7에서 더 제한된 것으로 보입니다. 나는 다음을 수행하기로 결정했습니다.

useradd ${un} 2>&- &
pid=$!; wait $pid; sync
{ grep "useradd\[${pid}\]" ${authlog} | tail -n 2; } >> ${logfile}

Then I simply verify whether the user exists and continue accordingly.

그러면 $!가 해당 특정 프로세스의 PID를 표시하는 데 필요한 useradd가 백그라운드에서 실행됩니다. 그런 다음 /var/log/secure 프로세스 ID를 역순으로 검색하고 출력을 내 로그 파일에 기록합니다. 동기화 또는 일시 중지(수면 3)가 필요하지만 성능이 저하되어서는 안 됩니다.

관련 정보