端末では、一部のオペレーティングシステムコマンドには root 権限が必要で、一部ではありません。これを制御するメカニズムは何ですか?各コマンドは実際には独自の実行権限を持つ別々のプログラムですか、それともBashにテーブルがありますか? (Bashはコマンドシェルであり、ターミナルはコマンドを渡すためのユーザーインターフェースであると思いますか?)ターミナルでアプリケーションを実行するのではなく、オペレーティングシステムのコマンドに言及しています。
答え1
はい、各アプリケーションは通常、実際のアプリケーションの「権限ビット」を介して独自の権限を設定します。実行したいさまざまな実行可能ファイルと一緒にコマンドを使用すると、ls -l
これらの内容を表示できます。
$ ls -l /sbin/ | grep autrace
-rwxr-x---. 1 root root 15792 Aug 24 14:40 autrace
03:03:22-slm~ $ autrace
bash: /usr/sbin/autrace: Permission denied
ただし、タッチ/アクセスしたい「データ」が制限されているいくつかのコマンドがあるため、表示権限だけでは不十分です。
$ ls -l /sbin/ | grep "\bfdisk"
-rwxr-xr-x. 1 root root 230512 Apr 25 05:19 fdisk
$ fdisk -l
$
ここのコマンドは自分のユーザーIDで実行されますが、そのユーザーは自分のシステムの物理ディスクに関する情報にアクセスできないため、fdisk
出力は表示されません。次のコマンドを使用してrootとして権限を増やすと、目的のsudo
出力を表示できます。
$ sudo fdisk -l | head -10
Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 5D1229E8-1234-1234-1234-ABCDEFG128790
Device Start End Size Type
/dev/sda1 2048 411647 200M EFI System
これを制御するメカニズム
一元管理はなく、すべての制御が分散され、アプリケーション/実行ファイル(上記のように)のファイルと共に許可ビットとして保存されるか、これらのツールが使用するデータファイルまたはファイルがあるディレクトリに保存されます。場所が含まれています。
コマンドシェル
Bashがシェルで、端末がコマンドを渡すためのユーザーインターフェースであるという説明は正しくありません。代わりに、ターミナルは内部で実行されるシェル(通常Bash)で実行されるアプリケーションですが、シェルの数に制限はありません。
例えばps
以下は、現在のシェルプロセスの構造を示すコマンドの出力です。
$ ps axf | less
...
8549 ? Sl 0:08 /usr/libexec/gnome-terminal-server
8552 ? S 0:00 \_ gnome-pty-helper
10286 pts/13 Ss 0:00 \_ bash
12783 pts/13 Sl+ 5:49 | \_ vinagre
12868 pts/14 Ss 0:00 \_ bash
15742 pts/14 R+ 0:00 \_ ps axf
15743 pts/14 S+ 0:00 \_ less -r
gnome-terminal
ここでは、上部で実行されている端末と下の子プロセスを見ることができます。これらのサブプロセスは2つのbash
シェルで構成され、そのうちの1つはというアプリケーションを実行しvinagre
、もう1つはps
ここに示すコマンドを実行します。
追加の制限
上記は、システムユーザーが実行可能ファイルを使用する方法の基本です。しかし、これらは単なる基本です。これに加えて、さまざまな実行可能ファイルに対するアクセス制御リスト(ACL)やアクセス制御ポリシーなどの他の技術があります。
ACLは非常にシンプルで、所有者、グループなどの既存のモデルを超えて、ユーザーに詳細な制御を提供します。
SELinuxやAppArmorなどのツールは同じアプローチをとりますが、Linuxカーネルレベルでルールを作成し、Application Xがシステム全体と対話する方法を制限する機能を導入します。たとえば、Sambaサーバーを実行している場合は、このアプリケーションが通常機能する通常のゾーン外のファイルシステムへのアクセスを許可する必要があります。これを許可するには、追加のポリシーを追加する必要があります。
SELinuxのマニュアルページから抜粋SELinux(NSA Security Enhanced Linux)は、Linuxオペレーティングシステムで柔軟な必須アクセス制御アーキテクチャを実装したものです。 SELinuxアーキテクチャは、Type Enforcement®ベースのポリシー、役割ベースのアクセス制御、およびマルチレベルセキュリティの概念など、さまざまな必須アクセス制御ポリシーを実施するための一般的なサポートを提供します。 SELinux に関する背景情報と技術文書は以下にあります。 http://www.nsa.gov/research/selinux。
コマンド部分は何ですか?
アプリケーションがシステム上の物理ファイルであるのか、それとも別のファイルであるのかわからない場合は、このコマンドを使用してtype
それを確認できます。
$ type pwd
pwd is a shell builtin
$ type fdisk
fdisk is /usr/sbin/fdisk
したがって、上記の例ではpwd
Bashに組み込まれfdisk
ていません/usr/sbin/fdisk
。
メモ:組み込みのものと同様に、それを呼び出すBashシェルの権限によって制御されます!
答え2
デフォルトでは、アプリケーションはルートアクセスが必要かどうかをほとんど決定します。これは通常、(1) 明示的にエンコードを確認するか、(2) root アクセスが必要または失敗するファイル、ディレクトリ、またはその他の特殊ファイルを使用する 2 つの方法のいずれかで行われます.
これに対する中央管理はまったくありません。
答え3
ユーザーがコマンドを実行できないようにするいくつかの要因があります。
ファイル権限
ls -l <file>
所有者、グループ、および他のユーザーのファイルに対する読み取り、書き込み、および実行権限を定義する「rwxr-xrw-」などの形式を使用して、これを確認できます。アクセス制御リスト
インストールされているデバイスでACLが有効になっている場合は、そのプロパティをインポートして上記と
getfacl
同じ権限または他のユーザーの制限を確認できます。一例:[root]# getfacl <file>
# file: <file>
# owner: <owner>
# group: <group>
user::rw-
user:<different_user>:rwx
group::r-
mask::rwx
other::r-
環境変数
PATH変数は、bashがコマンドを見つけるディレクトリのリストを定義します。を使用して内容を確認できます
echo $PATH
。SELinux
SElinuxはこの目標を達成するもう一つの方法です。を使用してSElinux権限を確認できます
ls -Z <file>
。
これはほんの数例ですので、役に立つことを願っています。