도저히 이해할 수 없는 매우 이상한 문제에 직면했습니다. 사용자 X에 대해 여러 sudo 규칙이 존재하는지 확인하기 위해 루트로 스크립트를 실행하고 있습니다. 내가 실행할 때 :
su $USER -c "sudo -l > $USER_sudo_rules.lst"
여러 줄로 요약됩니다. 행은 다음과 같아야 합니다.
(oracle) NOPASSWD: /opt/oracle/oracle_base/product/*/OPatch/opatch lsinventory
(oracle) NOPASSWD: /usr/bin/cat /opt/oracle/*/diag/tnslsnr/*/listener_*/trace/*
그러나 출력은 다음과 같습니다.
(oracle) NOPASSWD: /opt/oracle/oracle_base/product/*/OPatch/opatch
lsinventory
(oracle) NOPASSWD: /usr/bin/cat
/opt/oracle/*/diag/tnslsnr/*/listener_*/trace/*
이유는 모르겠습니다. sudo -l
출력을 조작하고 조작하기 위해 다양한 다른 도구(예: cat, less,fold)에 다양한 파이핑을 시도했지만 아무런 효과가 없는 것 같습니다. 어쩌면 그것들을 통합하기 위해 약간의 후처리를 할 수도 있지만, 좀 더 깔끔한 것이 있기를 바랍니다. SHELL은 Redhat에서 ksh입니다. 이 "$USER_sudo_rules.lst" 파일은 사전 정의된 "sudo 규칙 목록"과 비교되어 호스트에 올바른 규칙이 존재하는지 확인합니다.