kornshellまたはPerlを使用してrootに必要な権限をバイパスする

kornshellまたはPerlを使用してrootに必要な権限をバイパスする

200を超えるサーバーに存在するファイルの所有権と権限を変更する必要があるという問題があります。私は2つの異なるグループに属しており、あるグループから別のグループに所有権を変更する必要があります。また、権限を644に設定する必要があります。ルートアクセス権を持っている場合は、これを簡単に実行できますが、そうではありません。そのため、1人のユーザーにファイルをコピーした後、既存のファイルを削除し、最近コピーしたファイルの名前を既存のファイル名に変更する必要があります。これはかなり退屈しているので、これらのタスクを自動化するスクリプトを作成したいと思いました。私は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

関連情報