kornshell 또는 Perl을 사용하여 루트에 필요한 권한 우회

kornshell 또는 Perl을 사용하여 루트에 필요한 권한 우회

200개가 넘는 서버에 존재하는 파일의 소유권과 권한을 변경해야 하는 문제가 있습니다. 저는 2개의 다른 그룹에 속해 있으며 한 그룹에서 다른 그룹으로 소유권을 변경해야 합니다. 또한 권한을 644로 설정해야 합니다. 루트 액세스 권한이 있으면 이 작업을 쉽게 수행할 수 있지만 그렇지 않습니다. 그래서 한 명의 사용자로 파일을 복사한 후 기존 파일을 삭제하고 최근 복사한 파일의 이름을 기존 파일 이름으로 변경해야 합니다. 이것은 꽤 지루해지고 있으므로 이러한 작업을 자동화하는 스크립트를 만들고 싶었습니다. 나는 kornshell이 ​​이 문제를 해결할 것이라고 생각했지만 내 스크립트는 아무 것도 하지 않는 것 같습니다. 이것이 내가 지금까지 가지고 있는 것입니다:

lockhost.sh

#!/usr/bin/ksh
sudo su - oradba
cd config
chmod 644 hostenv.cfg
chown orainst hostenv.cfg
exit
sudo su - orainst
cd config
cp -p hostenv.cfg hostenv.cfgnew
rm hostenv.cfg
mv hostenv.cfgnew hostenv.cfg

나는 이것이 파일의 소유권/권한을 성공적으로 변경하기 위해 실행해야 하는 모든 명령이기 때문에 이것이 효과가 있을 것이라고 생각했습니다.

내가 해야 할 일은hostenv.cfg 파일을 변경하는 것뿐이었습니다.따라서:

-rwxrw---- 1 oradba  dba  4433 May  1 21:43 hostenv.cfg

이와 관련하여:

-rw-r--r-- 1 orainst dba  4433 May  1 21:43 hostenv.cfg

스크립트를 수정하려면 어떻게 해야 하나요? 또한 스크립트에 비밀번호를 묻는 사용자 프롬프트를 작성해야 하는 경우에도 괜찮지만 시스템이 나에게 물어볼 것 같습니다.

스크립트를 실행하려고 하면 다음과 같은 일이 발생합니다.

lockhost.sh

내 사용자가 oradba로 변경되었지만 아무 일도 일어나지 않았습니다. 종료를 입력하기 전까지는...

exit

logout
chmod: changing permissions of `hostenv.cfg': Operation not permitted
chown: changing ownership of `hostenv.cfg': Operation not permitted

답변1

문제는 sudo su ...다른 셸을 생성하고 해당 셸에서 종료할 때만 exit스크립트가 계속을 시도한다는 것입니다.

sudo구성이 허용한다고 가정하면 다음을 수행할 수 있습니다.

sudo -iu oradba 'cd ... && chmod ... && chown ... '
sudo -iu orainst '...'

&&대신 세미콜론을 사용할 수 있지만 이렇게 하면 성공하지 chmod않는 한 시도 하지 않도록 보장됩니다.cd

sudo구성에서 허용하지 않는 경우 다음을 수행할 수 있습니다.

sudo su -c 'cd ... & chmod ... && chown ... ' - oradba
sudo su -c '...' - orainst

관련 정보