一部の実行可能ファイルを root で自動実行する方法

一部の実行可能ファイルを root で自動実行する方法

一部の実行可能ファイルが起動したときにユーザーにパスワードを入力するように依頼して(下のls -lメッセージを介して)、自動的にrootとして実行されるのはなぜですか?

-rwxr-xr-x 1 root root 975856 Feb  9 13:02 <filename>

ファイルサイズと時間を除いて、まったく同じファイル情報を持つこのタイプの他の実行可能ファイルは、ユーザーがパスワードを入力する必要がないため、自動的にrootとして実行されません。

一般的なファイル設定/属性はどうですか?

ベストアンサー1

(質問が正しく理解されている場合は、特定のスクリプトでのみユーザーにパスワードの入力を求める理由と、これが「ls」コマンドに記載されている情報とどのような関係があるのか​​疑問に思います。)

このlsコマンドは、読み取り権限、書き込み権限、ユーザー/グループ所有権などのファイル属性(指定されたディレクトリ内の各ファイルについて)に関する情報を提供します。

あなたの場合、lsレポートは<filename>「root」ユーザー(出力で「root」が最初に発生ls)と「root」グループ(出力で「root」が2番目に発生ls)によって所有されます。これは、ユーザー権限がユーザー「root」に適用され、グループ権限がグループ「root」に適用されることを意味します。

読み取り/書き込み/実行権限は次の10文字で表されます-rwxr-xr-x

  1. まず、Unixファイル形式()があります-。ここで、「-」は一般的なファイルを意味し、「d」はディレクトリを意味し、「s」はシンボリックリンクを意味する。
  2. 次:rwxはユーザー権限です。ユーザー「root」(ファイル所有者)には、読み取り、書き込み、および実行権限が付与されます。
  3. 次の手順: r-x、グループ権限です。 「root」グループ(ファイルのグループ所有者)のすべてのユーザーには読み取りおよび実行権限が付与されます。
  4. 次へ:(r-x再)これは他のユーザーの権限です。他のすべてのユーザーには読み取りおよび実行権限が付与されます。 (実行権限は、ファイルを実行可能ファイルとして処理できるかどうかを決定します。実行可能ファイル内で実行されるすべてのコマンドとシステム呼び出しは、権限の不足のために実行が拒否されます。)

バラよりWikipediaのファイルシステム権限より詳細な説明のために。

実行可能ファイルの動作については何も伝えませlsん。実行可能ファイルがディスクをフォーマットしようとしているか(したがってroot権限が必要です)、または「Hello、world!」スクリプトかどうかを知る方法はありません。権限のないユーザーが所有するディスクフォーマットスクリプトがある可能性がありますが、rootとして実行しないと失敗します。何もしませんが、root実行権限を持たないスクリプトを持つことができるため、rootはこれを実行できません。 (ルートはすべての権限と所有権を変更できるため、これを上書きできます。)

これはrootとして実行されていることを確認し、そうでない場合はsudoを使用してroot権限を取得しようとする単純なbashスクリプトです。テキストエディタにコピー/貼り付けてファイルを保存した場合、ファイルは権限のないユーザーが所有する必要がありますが、次の点に注意してください。

  1. スクリプト行動潜在的にルート専用コマンドを実行できますが、〜しない限りSudoが成功しました。
  2. 上記は、の出力とは関係ありませんls
#!/bin/bash

### test_root.sh
# small script to experiment with detecting root and running as sudo

# print some file attributes
LS_RESULT=$(ls -alh $0)
echo "ls information for ${0}:"
echo -e "${LS_RESULT}\n"

# check effective user id and attempt to rerun script if not root
if [ "$EUID" -ne 0 ]; then 
  echo "Not running as root!"
  echo "Attempt to rerun with sudo? (y/N)"
  
  read -n1 "ANSWER" # read a y/n character
  if [ "$ANSWER" == "y" ] || [ "$ANSWER" == "Y" ]; then
    PROG_NAME=$(readlink -f ${BASH_SOURCE[0]}) # get proper path to this script
    COMMAND="sudo ${PROG_NAME} ${@}"
    
    echo -e "\n$COMMAND\n\n" 
    bash -c "$COMMAND" # rerun script as sudo
  else
    echo -e "\nExiting ..."
  fi
else
  echo "Hello, root!"
fi

おすすめ記事