원격 호스트에 대한 Linux(관리자) 사용자 보고서 추출 [닫기]

원격 호스트에 대한 Linux(관리자) 사용자 보고서 추출 [닫기]

Linux 사용자에 대한 보고서와 그 중 관리자가 누구인지에 대한 보고서를 추출하는 가장 좋은 방법을 찾으려고 노력 중입니다. 대상은 Debian(8,9) 및 Ubuntu(18,20)입니다. 최종 보고서는 꽤 길기 때문에 첫 번째 줄에 각 가상 머신을 식별할 수 있는 호스트 이름이 포함되기를 원합니다. 또한 모든 세부정보가 아닌 사용자 이름만 포함된 간단한 보고서를 원합니다.

내 코드는 pssh를 통해 여러 호스트에 푸시할 때 관련 없는 정보를 표시합니다.

#!/bin/bash

_l="/etc/login.defs"
_p="/etc/passwd"

## get mini UID limit ##
l=$(grep "^UID_MIN" $_l)

## get max UID limit ##
l1=$(grep "^UID_MAX" $_l)

echo ""
echo `hostname`
echo ""
echo "----------[ User Accounts ]---------------"
awk -F':' -v "min=${l##UID_MIN}" -v "max=${l1##UID_MAX}" '{ if ( $3 >= min && $3 <= max  && $7 != "/sbin/nologin" ) print $0 }' "$_p"
#users with UID >= 1000 (MIN) and UID <= 60000 (MAX)
#these users are allowed to login into system if shell is bash/csh/tcsh/ksh as defined in the /etc/shells file

echo "----------[ from which, Admin Accounts ]---------------"
echo `grep '^sudo:.*$' /etc/group | cut -d: -f4`
#users in sudoers group

exit 0

쓰레기를 가져오네요. 조언 감사합니다.

답변1

내가 알고 싶은 것은 사용자가 실행할 수 있는지 여부입니다.어느sudo 명령(및 가능한 경우 명령)을 사용하십시오. 다음과 같은 것이 필요한 데이터를 수집(또는 보고서로 사용)하는 가장 좋은 방법입니다.

for u in $(compgen -u); do echo "# $HOSTNAME - $u"; sudo -l -U $u; echo; done

나에게는 쉘 및/또는 UID_MIN 또는 MAX를 아는 것이 관련이 없는 것 같습니다. /etc/group의 grep에 의존하는 것만으로는 충분하지 않습니다. 가짜 또는 비대화형 쉘이 있는 계정은 여전히 ​​sudo로 처리될 수 있습니다. 즉, sudo su - falseshellaccount -s /bin/bash충분한 sudo 액세스 권한이 있는 사용자는 /etc/passwd 및/또는 /etc/group을 편집하여 ID 제한을 우회할 수 있으며, sssd, ldap 및 기타 지원에서 sudo를 사용할 수 있습니다. . 사용자가 명령을 실행할 수 있는지 여부를 확인하려면 간단히 sudo를 사용하는 것이 좋습니다.

sudo -l -U $u다음과 같이 약간 더 복잡한(또는 간결한) 보고서의 기초가 될 수도 있습니다.

for u in $(compgen -u); do echo -n "# $HOSTNAME - $u"; if sudo -l -U $u | grep -vq "not allowed"; then echo -n " [admin]"; fi; echo; done

또는

for u in $(compgen -u); do if [ $(id -r -u $u) -gt 3 ]; then echo -n "# $HOSTNAME - $u"; if sudo -l -U $u | grep -vq "not allowed"; then echo -n " [admin]"; fi; echo; fi; done

또는

for u in $(compgen -u); do uid="$(id -r -u $u)"; uid=${uid:-"0"}; echo -n "# $HOSTNAME -"; if sudo -l -U $u | grep -vq "not allowed"; then echo -n " [ADMIN]"; fi; echo -n " uid $uid, $u"; echo; done

...위 명령 중 하나라도 작은따옴표로 묶어서 실행하면 ssh(또는 ansible 등)에 전달할 수 있습니다.

ssh remote-host 'for u in $(compgen -u); do uid="$(id -r -u $u)"; uid=${uid:-"0"}; echo -n "# $HOSTNAME -"; if sudo -l -U $u | grep -vq "not allowed"; then echo -n " [ADMIN]"; fi; echo -n " uid $uid, $u"; echo; done'

관련 정보