- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SUID(Set UID)属性の使い方について)
SUID属性の使い方について
このQ&Aのポイント
- SUID属性を利用した処理を行いたいのですが上手く動きません。
- SUID属性を使って他の一般ユーザでも/var/log/messagesファイルを参照したいが、権限がないと表示されます。
- SUID属性の意味を理解していない可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
先ほどの解答は、失礼しました。 問題はsystem関数ですね。 system関数は/bin/shを実行しますが、その時にSUID特権を除いてしまいますので、「許可が有りません」のエラーが発生します(セキュリティー対策ですね)。 よって、systemを使用せず、直接ファイルを読むなどの処理を記述する形式にする必要が有るようです。
その他の回答 (1)
- amru05
- ベストアンサー率63% (33/52)
回答No.1
「suidが設定された実行ファイルを実行すると、そのプログラムは実行ファイルの所有ユーザや所有グループの権限で動作します」 なので、テストプログラムの所有ユーザは、どのように成っていますが。 テストプログラムの所有ユーザが"root"ならば、希望の動作が行えるのでは? と、思いますが。
お礼
貴重なご指摘ありがとうございます。 以下のようにサンプルプログラムを書き直してみましたら無事実行できました。 #include<stdio.h> #include<stdlib.h> int main(void){ FILE *file = fopen("/var/log/messages","r"); if(file==NULL){ printf("failure.\n"); exit(EXIT_FAILURE); } fdisp(file); fclose(file); } fdisp(FILE *file){ int c; rewind(file); while((c=fgetc(file))!=EOF){ printf("%c",c); } } おかげさまで無事本来やりたい処理も解決することができました。 #ちなみに蛇足ですが /bin/sh(リンクなので/bin/bash) にSUID属性を付加したら実行できるのかなと思って一度試してみたのですが、駄目でした。 セキュリティ的にやるべきではないと思いますのでプログラムを改修することで対応しようと思います。