Linuxのシェルスクリプトでそのスクリプトファイルを実行したユーザーにかかわらずそのスクリプト内のコマンドがルート権限として実行されるようにしたいのですが良い方法はありますか?
ルートのパスワードを入力せずに一時的にルート権限を使用できるようにしたいのです。
やりたいことは
screenでルートユーザでしかアタッチできないプロセスに一時的にアタッチしてコマンドを実行してデタッチするということなのですが…
screenにはマルチユーザー機能が在るようで、それはscreenでルートがアタッチしてる場合のみですよね?
間違っていたらすみません。
OSはCentOS 6.2です。
必要な情報があれば補足で追加致します。
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
ラッパープログラムを作成して、そのプログラムにsetuid(所有者をrootにして
chmod 4755)を設定するのがよいでしょう。
以下はラッパープログラムの一例です。execvの引数(/bin/bashの部分)とargvを
書き換えることで任意のプログラムを起動できるでしょう。
--
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <grp.h>
#include <sys/wait.h>
int
main ()
{
struct passwd *pw;
pw = getpwuid (geteuid ());
if (!(pw && pw->pw_name && pw->pw_name[0]))
{
perror ("getpwuid");
exit (EXIT_FAILURE);
}
if (initgroups (pw->pw_name, pw->pw_gid) == -1)
{
perror ("initgropuos");
exit (EXIT_FAILURE);
}
if (setgid (pw->pw_gid) == -1)
{
perror ("setgid");
exit (EXIT_FAILURE);
}
if (setuid (pw->pw_uid) == -1)
{
perror ("setuid");
exit (EXIT_FAILURE);
}
char *argv[4];
argv[0] = "-bash";
argv[1] = "-c";
argv[2] = "screen.sh";
argv[3] = NULL;
if (execv ("/bin/bash", argv) == -1)
{
perror ("execv");
exit (EXIT_FAILURE);
}
exit (EXIT_SUCCESS);
}
--
特定のユーザのみ起動できるようにしたい場合はグループ(ここではwrapperとする)を
作成してchgrp wrapper、chmod 4750すればよいでしょう。
この回答への補足
1.最後の chmod 4750とはどういった設定なのでしょうか?
2.このプログラムを実行、実装するにあたって脆弱性はどのようになりますか?
回答有り難うございます。
ソースコードも実装にそって書いていただきわかりやすく感謝致します。
回答に関して2点ほど疑問点がありましたので補足法で加筆させて頂きます。
No.1
- 回答日時:
回答有り難うございます。
こういった方法も在るのですね。
セキュリティ面が気になるところですが、勉強として参考にさせて頂きます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux shellscript内のコマンドを、sudo(toor)として実行 2 2022/09/23 15:05
- UNIX・Linux linux 初心者です。コマンドラインでのインストールとアップデート方法を教えてください。 3 2022/04/04 00:53
- 地図・道路 カーナビタイムのルート検索結果について 枚方ー能登のルート 2 2022/08/07 13:03
- 予備校・塾・家庭教師 3浪するんですが以下の4ルートだったらどれがいいですか? 2年間宅浪です。 ㅤ ●ルート① スマホ禁 3 2023/03/04 13:11
- 船舶・クルーズ 遣唐使船のルートは途中から東シナ海になりましたが、何故このような無謀なことをしたのでしょうか? 1 2022/04/04 23:29
- 国産車 「純正ナビ」と「スマホのナビ」の相違 5 2023/03/04 21:54
- 地図・道路 関西エリアの高速道路について教えてください 1 2022/04/05 13:13
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をdiff.shとして、以下のように2つのテキストフ 1 2023/02/03 20:06
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- 地図・道路 関西エリアの高速道路に詳しい方に質問があります 2 2022/10/02 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
windows10のごみ箱をrd /s /q C...
-
python IDLEで訂正、削除のやり...
-
バッチファイル内の各コマンド...
-
ファイルサイズが小さくなりま...
-
Dドライブでchkdskが走らなくな...
-
Check Diskは定期的に実行した...
-
Mac de プログラム
-
「ファイル名を指定して実行」...
-
SPI非言語の問題 解説お願いします
-
osのタスク管理
-
HomePod mini で音声聴取し家族...
-
バッチファイルの実行の仕方
-
ubuntuでもwindowsのバッチファ...
-
DMMで電子書籍を購入し、ファイ...
-
batファイルを最小化で実行する...
-
し運動不足なのでて片道6キロ往...
-
XPのプロパティ
-
システム停止時にコマンドを実...
-
windows8のデフラグ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
LD_LIBRARY_PATHって?
-
windows10のごみ箱をrd /s /q C...
-
python IDLEで訂正、削除のやり...
-
バッチファイル内の各コマンド...
-
shutdownコマンド実行の残り時...
-
taskkill をバッチ処理できない。
-
Openイベントを開始させないで...
-
Check Diskは定期的に実行した...
-
ROBOCOPY cmdで正常に処理され...
-
Linux のシェルスクリプトの強...
-
最初の一度しか実行されないロ...
-
エクセルからアクセスのプロシ...
-
linuxサーバーのキャッシュをク...
-
SPI非言語の問題 解説お願いします
-
Macでlsした際の、ファイル名の...
-
windowsからtelnetでログインし...
-
CRONを隔週の日曜日に実行させたい
おすすめ情報