여러 개발자의 테스트 환경을 동기화하는 간단한 스크립트가 있습니다. mysql 덤프를 가져와 SSH를 통해 해시를 확인한 다음 변경 사항이 발생하면 덤프를 새 환경으로 이동하고 덤프를 취소하는 것보다 더 복잡할 필요는 없습니다.
민감한 정보를 가리기 위해 다시 작성했지만 지금까지 작성한 스크립트의 요지는 다음과 같습니다.
#!/bin/bash
mysqldump -h localhost testDB > dbPath/testdb.sql
hash1=$(md5sum dbPath/testdb.sql) | awk '{print $1}'
echo $hash1
스크립트를 실행할 때:
sudo ./testScript.sh
-rw-r--r--1 루트로 생성된 mysqldump가 올바른 것으로 보이지만 스크립트가 md5 해시로 계속 진행되면서 다음과 같은 결과가 나타납니다.
./testScript.sh: line 5: dbPath/testdb.sql: Permission denied
스크립트가 아닌 쉘에서 md5sum 명령을 실행하면 sudo가 없는 일반 사용자라도 제대로 작동합니다. 루트로 전환하고 쉘에서 명령을 실행하면 제대로 작동합니다. 내 사용자 계정에서, 내 사용자 계정에서 sudoing 또는 루트에서 직접 실행 등 임의의 ID로 스크립트를 실행하면 md5sum 줄에 권한 거부 오류가 표시됩니다.
내 사용자 계정의 권한이 루트의 권한을 사용하는 대신 어딘가에서 오버플로되고 있다고 생각합니다. 단, 루트가 권한 거부 오류 없이 루트의 셸에서 스크립트를 실행할 수 없다는 사실을 제외하고는 제가 아는 한 루트는 거부되어서는 안 됩니다. 무엇이든 허락합니다. 테스트로 md5sum 명령 앞뒤에 whoami를 추가했는데, 두 명령 모두 sudo나 root로 실행하면 사용자로 root가 출력됩니다.
루트와 내 사용자 계정 모두 파일을 md5sum할 수 있는 권한이 있는 것 같습니다. 이것이 스크립트에서 실행된다는 사실이 나 또는 루트의 명령 실행 또는 파일 조작 능력을 변경합니까?
환경은 RHEL 6입니다.
답변1
근본적인 문제는 다음 줄의 구문 분석 오류입니다.
hash1=$(md5sum dbPath/testdb.sql) | awk '{print $1}'
거의 확실히
hash1=$(md5sum dbPath/testdb.sql | awk '{print $1}')
이러한 오류는 다음에서 확인할 수 있습니다.https://shellcheck.net