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