문제의 서버에 대해 루트 액세스 권한이 있는 사용자를 표시하기 위해 /etc/sudoers 파일을 읽는 데 ansible을 사용하고 있습니다.
이것은 .sh 파일입니다.
#!/bin/bash
username=`sudo cat /etc/sudoers | grep "NOPASSWD: ALL" | grep -v ^#`
hostname=`sudo hostname`
echo "xyz | $username | $hostname"
이것은 출력을 생성하는 또 다른 .sh 파일입니다. 이 파일을 먼저 실행합니다.
#!/bin/bash
/bin/ansible-playbook /etc/ansible/scripts/sudoerscheck.yaml >|
/root/script/sudoers.dat
/bin/cat /root/script/sudoers.dat | grep xyz | awk -F '|' '{ print $2":"$3
}' | awk -F '\"' '{ print $1 }' >| /root/script/sudoers.txt
아래의 Ansible 출력;
ok: [test1] => {
"changed": false,
"shell_result.stdout_lines": [
"xyz | oracle ALL=(ALL) NOPASSWD: ALL",
"cuser ALL=(ALL) NOPASSWD: ALL",
"dogfish ALL=(ALL) NOPASSWD: ALL | test1"
]
}
ok: [test2] => {
"changed": false,
"shell_result.stdout_lines": [
"xyz | | test2"
]
}
ok: [test3] => {
"changed": false,
"shell_result.stdout_lines": [
"xyz | ADMINS \tALL=(ALL)\tNOPASSWD: ALL",
"oracle ALL=(ALL) NOPASSWD: ALL | test3
아래 출력을 얻는 방법을 알려주시겠습니까? 그리고 사용자 이름은 변경될 수 있습니다
test1 oracle cuser dogfish
test2 NULL
test3 oracle ADMINS
답변1
이것은 작동합니다.
#!/bin/bash
OUTPUT=$(cat /etc/passwd | grep -v nologin | grep -v root | awk -F: '{ print
$1 }')
block1=`hostname`
while read -r line
do
if [[ `sudo -l -U $line | grep NOPASSWD` ]];then
echo $block1 $line
else
echo $block1 $line
fi
done <<< "$OUTPUT"
답변2
아래와 같이 할 수 있습니다:-
스크립트의 첫 번째 줄은 줄 1을 인쇄하고 sed는 [] 아래의 문자열을 추출하여 param1에 저장합니다.
스크립트의 두 번째 줄은 4번째 줄을 인쇄하고 awk는 3번째 열을 인쇄하여 param2 변수에 저장합니다.
스크립트의 3행은 5행을 인쇄하고, 스크립트의 4행은 6행을 인쇄하고, awk는 1열을 인쇄하고 sed는 이를 제거합니다."
param1=$(head -1 sudoers.txt | sed 's/ok: \[//g;s/] => {//g') param2=$(head -4 sudoers.txt | tail -1 | awk '{print $3}') param3=$(head -5 sudoers.txt | tail -1 | awk '{print $1}' | sed 's/"//g') param4=$(head -6 sudoers.txt | tail -1 | awk '{print $1}' | sed 's/"//g') echo '$param1 $param2 $param3 $param4' > sudoers.txt
답변3
이는 언급한 출력 요소가 정적인지 여부를 의미합니다(확인하면 변경되지 않음). 다음 명령을 직접 사용할 수 있습니다
여기서 file.txt는 가능한 출력입니다.
egrep -o "test1|oracle|cuser|dogfish" file.txt | sort | uniq | tac | tr "\n" " " | awk '{$5=$3;$3=$4;$4="";print $0}'| sed -r "s/\s+/ /g"
산출
test1 oracle cuser dogfish