一般ユーザで実行できないパーミッションの理由

このQ&Aのポイント
  • 一般ユーザでも実行できそうにみえますが、実際にはできない理由について説明します。
  • パーミッションの設定には、「読み取り(r)」「書き込み(w)」「実行(x)」の権限があります。
  • 一般ユーザは通常、一部のコマンドしか実行できないため、特定のコマンドは管理者権限が必要となります。
回答を見る
  • ベストアンサー

パーミッション(-rwxr-xr-x)だが、一般ユーザで実行できない

パーミッション(-rwxr-xr-x)だが、一般ユーザで実行できない 最近CentOS5.3で勉強を始めた初心者です。 例えば、shutdownコマンドのパーミッションは、-rwxr-xr-xで、一番最後がxなので、一般ユーザでも 実行できそうにみえますが、実際にやってみると、「you must be root to do that!」とエラーになります。 また、rebootコマンドのパーミッションは、lrwxrwxrwxで、一般ユーザでも実行できそうにみえ るのですが、実際に一般ユーザで実施してみると、「must be superuser」と表示されます。 なぜ、パーミッション上で一般ユーザが実行可能「x」となっているのに、実行不可なのでしょうか? 恐れ入りますが、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.1

「SuperUser(特権ユーザー)しか実行できないプログラム」を非特権ユーザーが起動した場合、起動後、プログラム自身が特権モードに移行するのに失敗し「このユーザーには特権が無い」と表示して実行を終了しているに過ぎません。 つまり「実行しているが、すぐ終了しているだけ」です。 なお、パーミション不足でプログラムが実行できない場合は「そのファイルに対するパーミションが不足している」と言うエラー表示をシェルが行うので シェル名: /usr/local/bin/コマンド名: Permission denied とか Permission denied コマンド名 のようなエラー表示が出る筈です。 なお、ファイルのパーミションには「特権が必要かどうか」は含まれていません。 なので、特権でしか動作できないプログラムは「ともかく起動して、プログラム自身で特権モードに移行できるか試し、移行出来たら実行を継続、駄目ならプログラム自身がエラーを表示して終了する」と言う方法を取ります。

ringo105
質問者

お礼

早々にご回答頂きまして、ありがとうございました。 内容についても、大変良くわかり、納得できました。

関連するQ&A

  • Linux上でファイル・ディレクトリのパーミッションを強制的に変える

    Linux上でファイル・ディレクトリのパーミッションを強制的に変える Linuxでファイルサーバを立てています. まず,やりたいことは3つあります. 1.特定のユーザに対してファイルのパーミッションを変えるコマンド(chmod)を使用不可能にしたいのですがどうしたらよいのでしょうか? 2.ファイル(ディレクトリ)のパーミッションを強制的にrwxr_xr_xにしたいのですが,可能でしょうか?つまり,指定したパーミッション以外のファイル(ディレクトリ)をコピーしたといしても,そのファイルのパーミッションはrwxr_xr_xに強制的に変わるということです. 3.特定のユーザでディレクトリの移動を/homeより上の階層に動かしたくないのですがどうしたらよいのでしょうか?つまり自分と他のユーザのディレクトリは見に行けるがルート以下のシステム関連には移動してほしくないということです. よろしくおねがいします.

  • パーミッションの変更について

    rwxr-wr-w rwxr-wr-- rwxr-wr-t の内容のテキストファイルのパーミッションの変更コマンドをシェルスクリプトで書くにはどうしたらいいのかわかりません。 おしえていただくとありがたいです。 最初の一文字づつを読み込んでchmod ???と数字がでるようにしたいのですが 実行結果 ./a.txt r w x r - w r - w chmod 755と実行結果がでるようにしたいです。if文を沢山つかうのですか?

  • ls-lコマンドについて

    ls-lコマンドを実行すると 「-rwxr-xr-- 1 user group 402 May 26 1997 sample.dat」 という情報が表示されると思うのですが、「-rwxr-xr--」の後の 「1」は何を表しているのか教えてください。お願いします。

  • Apache2実行ユーザでLinuxディレクトリへのアクセス制御をするには?

    Apache2・Tomcatを使用したWebアプリケーションよりLinuxOS(CentOS4.4)内の特定のディレクトリのファイル一覧を取得また特定ユーザにのみそのディレクトリ内へのファイルの書込みを許可するというようなアプリケーションを作成中です。またこのアプリケーションのユーザ以外は上記ディレクトリへのアクセス許可を与えないようにしたいと思っています。そこでApache2の実行ユーザと同ユーザによってLinuxOS内の該当ディレクトリにパーミッションを設定すれば実現できるのではと思い自分なりに設定してみたのですがうまくいきません。 クライアントとしてブラウザからApache2に接続したPCはLinux上ではApache2の実行ユーザとして認識されないのでしょうか? Apache2の実行ユーザはhttpd.confのUser nobody Group nobodyとなっているところを任意のユーザに変更しました。 User apa01 Group apa01(ここではapa01とします)Linux内にも同名のユーザ・グループを追加します。 LinuxOSのユーザはapa01(上記)とlxuserの2人がいるとします。 該当ディレクトリのパーミッションは d rwxr-x--- apa01 apa01 該当ディレクトリ名 とします。 これによりapa01と認識されている?と思われるwebアプリケーションのクライアントPCからは該当ディレクトり内のファイルを取得できました。ここでパーミッションをd rwxr-x--- lxuser lxuserと変更します。すると思惑ではWebアプリケーションのクライアントからはファイルの一覧が取得できなくなるはずでしたがしっかり取得してしまいます。ひょっとして・・と思いApache2のhttpd.confのUser Groupを変更してもしっかり取得してしまいます。 なにか考えが根本的に違っているのでしょうか? 長々と書きましたがもっと違う方法があるようでしたら是非ともご教授願えませんでしょうか?よろしくお願いいたします。

  • コマンドの実行についての疑問

    コマンドの実行について教えて下さい。 vine4.2でLinuxの勉強をしています。 一般ユーザ(user1)でlsのコマンドを実行すると、結果が表示されますが、 /bin/lsはパーミッション(755)、ユーザ、グループは共に(root)になっています。なぜ実行できるのでしょうか。 もちろん。user1は、rootグループに含まれていません。 基本的なことと思いますが、よろしくお願いします。

  • 一般ユーザーのsudoコマンドの権限をはく奪したい

    一度、一般ユーザーがsudoコマンドを使える様な設定をネットで見て実行したのですが、その後、セキュリティの関係からその権利をはく奪したいと思ったのですが、 sudoeditコマンドで編集しようとしても、そのファイルの中に、一般ユーザーの名前が見つかりません。何か他に方法がありますでしょうか?さくらVPSのCentOS8 64bitになります。

  • 特定のディレクトリでコマンドが実行出来ない。

    特定のディレクトリでコマンドが実行出来ない。 OSはRed Hat Enterprise Linux Server release 5.4です。 rootユーザで特定のディレクトリでlsコマンドを実行すると エラーが発生します。 カレントディレクトリが該当のディレクトリでない場合には 問題ありません。 また、そのディレクトリではwhoやdfコマンド等でも エラーとなってしまいます。 このような現象は、どのような原因が考えられるでしょうか? 以下は、全てrootユーザでの実行結果です。 # pwd /opt/oracle/app/product/11.2.0/dbhome_1/lib # ll stubs 合計 6404 -rwxr-xr-x 1 oracle oinstall 12121 2月 3 2009 ld-linux-2.3.4-stub.so -rwxr-xr-x 1 oracle oinstall 12121 2月 3 2009 ld-linux-x86-64.so.2 -rwxr-xr-x 1 oracle oinstall 4911 2月 3 2009 libBrokenLocale-2.3.4-stub.so -rwxr-xr-x 1 oracle oinstall 4911 2月 3 2009 libBrokenLocale.so -rwxr-xr-x 1 oracle oinstall 4911 2月 3 2009 libBrokenLocale.so.1  ・  ・  ・ # cd stubs # pwd /opt/oracle/app/product/11.2.0/dbhome_1/lib/stubs # ls ls: libc.so.6: version `GLIBC_2.4' not found (required by ls) ls: libc.so.6: version `GLIBC_2.4' not found (required by /lib64/libacl.so.1) ls: libc.so.6: version `GLIBC_2.4' not found (required by /lib64/libselinux.so.1) ls: libc.so.6: version `GLIBC_2.4' not found (required by /lib64/libattr.so.1) ls: libc.so.6: version `GLIBC_2.4' not found (required by /lib64/libsepol.so.1) # who who: libc.so.6: version `GLIBC_2.4' not found (required by who) # df df: libc.so.6: version `GLIBC_2.4' not found (required by df) 宜しくお願いいたします。

  • あるCのソースをコンパイルしたのですが、なぜか実行時にエラーになってし

    あるCのソースをコンパイルしたのですが、なぜか実行時にエラーになってしまいます。 (Command not found. と表示されてしまいます。) 初心者です。 さくらインターネット上で makeコマンドで生成したファイルが ls -l で -rwxr-xr-x 1 xxxxxxxxx users 8730 May 6 14:08 screw と表示されるのですが カレントをそのまま(Cソースがあるフォルダ)で screw と実行すると screw: Command not found. と表示されてしまいます。 何が悪いのでしょうか?

  • パーミッション 所有者について

    Linuxにて、「httpd-2.0.59.tar」を展開した際に、パーミッションの 所有者が、drwxr-xr-x 11 500 500 4096 Jul 28 02:44 httpd-2.0.59/ となってしまいます。ちなみに、展開実行の 際には、rootで実施しています。なぜrootにならずに、「500」となってしまうのか、理由を教えてください。また、解決方法があれば、教えてください。宜しくお願いいたします。

  • 別ユーザでのコマンド実行(root権限)のやり方を教えて下さい

    現在、Solaris9でroot権限のコマンドを実行したいのですが、いちいちroot権限になってからコマンドを実行するのが面倒です。 ex) aaaユーザでrebootを実行したい。 出来るならaaaユーザにはスーパーユーザのパスワードを教えたくない 一応、「sudo」というコマンドを使用すれば出来ると分かったのですが、現在の環境ではsudoコマンドはありませんでした。 別の方法で出来るかどうか教えて頂けないでしょうか。 すみませんが、回答よろしくお願いします。 環境: OS:Solaris9