ファイルのアクセス許可と所有権は、Linuxの基本的でありながら不可欠なセキュリティの概念です。あなたはおそらくすでにこれらの用語に精通しているでしょう。通常は次のようになります:
これらの通常のアクセス許可とは別に、いくつかの特別なファイルアクセス許可があり、多くのLinuxユーザーはそれを認識していません。
特別なパーミッションについて話し始めるために、基本的なファイルパーミッションについてある程度の知識があることを前提としています。そうでない場合は、Linuxファイルの許可について説明している優れたガイドをお読みください。
次に、Linuxファイルシステムでの新しい文字による特別な権限をいくつか紹介します。
この例では、ユーザーのパスワードの変更を担当するpasswdコマンドの文字はs
です。 同じ場所にx
が表示されると予想されます または-
、ユーザー権限用。このファイルはrootユーザーとrootグループに属していることに注意してください。
この許可があれば、sudo
を与える必要はありません。 特定のユーザーにルートスクリプトを実行させたい場合のアクセス。
SUIDとは何ですか?
実行可能ファイルにSUIDビットが設定されている場合、これは、ファイルが実行可能ファイルの所有者と同じ権限で実行されることを意味します。
実際の例を見てみましょう。 passwdコマンドのバイナリ実行可能ファイルを見ると、SUIDビットが設定されています。
linuxhandbook:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59640 Mar 22 2019 /usr/bin/passwd
これは、passwdコマンドを実行しているすべてのユーザーが、rootと同じ権限でコマンドを実行することを意味します。
メリットは何ですか? passwdコマンドは、パスワードを変更するために/ etc / passwd、/ etc/shadowなどのファイルを編集する必要があります。これらのファイルはrootが所有しており、rootのみが変更できます。ただし、setuidフラグ(SUIDビット)のおかげで、通常のユーザーはこれらのファイル(rootが所有する)を変更したり、パスワードを変更したりすることもできます。
これが、このコマンドが変更するファイルがrootによって所有されているにもかかわらず、passwdコマンドを使用して自分のパスワードを変更できる理由です。
通常のユーザーが他のユーザーのパスワードを変更できないのはなぜですか?
通常のユーザーは他のユーザーのパスワードを変更することはできず、自分自身のためだけであることに注意してください。しかし、なぜ? rootと同じ権限を持つ通常のユーザーとしてpasswdコマンドを実行し、/ etc / passwdなどのファイルを変更できる場合、他のユーザーのパスワードを変更できないのはなぜですか?
passwdコマンドのコードを確認すると、パスワードが変更されているユーザーのUIDが、コマンドを実行したユーザーのUIDで確認されていることがわかります。一致せず、コマンドがrootによって実行されなかった場合、エラーがスローされます。
setuid / SUIDの概念は注意が必要であり、細心の注意を払って使用する必要があります。そうしないと、システムにセキュリティギャップが残ります。これは重要なセキュリティの概念であり、多くのコマンド(pingコマンドなど)やプログラム(sudoなど)がそれを利用しています。
SUIDの概念を理解したところで、SUIDビットを設定する方法を見てみましょう。
SUIDビットを設定する方法
SUIDビットを設定するときのシンボリックな方法が簡単だと思います。 chmodコマンドは次のように使用できます:
chmod u+s file_name
次に例を示します:
linuxhandbook:~$ ls -l test.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt
linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt
数値による方法も使用できます。通常の権限に4桁目を追加するだけです。 SUIDの設定に使用される8進数は常に4です。
linuxhandbook:~$ ls -l test2.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:53 test2.txt
linuxhandbook:~$ chmod 4766 test2.txt
linuxhandbook:~$ ls -l test2.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:54 test2.txt
SUIDを削除する方法
次のように、chmodコマンドでシンボリックモードを使用できます。
chmod u-s test.txt
または、設定する権限で4ではなく0を使用して数値を使用します。
chmod 0766 test2.txt
SUIDビットとしての小さいsと大文字のSの違い
SUIDの定義を覚えていますか?これにより、ファイルを実行することができます。 ファイルの所有者と同じ権限を持つ。
しかし、そもそもファイルに実行ビットが設定されていない場合はどうなるでしょうか。このように:
linuxhandbook:~$ ls -l test.txt
-rw-rw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt
SUIDビットを設定すると、小さいsではなく大文字のSが表示されます:
linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwSrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt
S as SUIDフラグは、調査する必要のあるエラーがあることを意味します。所有者と同じ権限でファイルを実行する必要がありますが、ファイルに実行可能権限がありません。つまり、所有者でさえファイルを実行することは許可されておらず、ファイルを実行できない場合は、所有者としての許可を得ることができません。これは、SUIDビットを設定するポイント全体に失敗します。
SUIDが設定されているすべてのファイルを検索するには?
この権限でファイルを検索する場合は、ターミナルでオプション-permを指定してfindコマンドを使用します。
find / -perm /4000
SGIDとは何ですか?
SGIDはSUIDに似ています。 SGIDビットを設定すると、ファイルを実行するすべてのユーザーは、ファイルのグループ所有者と同じ権限を持ちます。
ディレクトリを処理することには利点があります。 SGID権限がディレクトリに適用されると、このディレクトリ内に作成されたすべてのサブディレクトリとファイルは、メインディレクトリと同じグループ所有権を取得します(ファイルとディレクトリを作成したユーザーのグループ所有権ではありません)。
ターミナルを開き、ファイル/ var / local:
の権限を確認します。linuxhandbook:~$ ls -ld /var/local
drwxrwsr-x 1 root staff 512 Apr 24 2018 /var/local
このフォルダ/var/ localには、グループのアクセス許可として「x」または「-」が表示されるのと同じ場所に文字「s」があります。
SGIDの実際的な例は、ローカルネットワーク上でファイルを共有するためのSambaサーバーを使用する場合です。誰が作成したかに関係なく、すべての新しいファイルが必要な権限を失うことがないことが保証されています。
SGIDを設定する方法は?
次のように、SGIDビットをシンボリックモードに設定できます。
chmod g+s directory_name
次に例を示します:
linuxhandbook:~$ ls -ld folder/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/
linuxhandbook:~$ chmod g+s folder
linuxhandbook:~$ ls -ld folder/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/
数値の方法を使用することもできます。通常の権限に4桁目を追加するだけです。 SGIDに使用される8進数は常に2です。
linuxhandbook:~$ ls -ld folder2/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/
linuxhandbook:~$ chmod 2775 folder2
linuxhandbook:~$ ls -ld folder2/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/
SGIDビットを削除する方法
次のように、+sの代わりに-sを使用してください。
chmod g-s folder
SGIDの削除は、SGIDの削除と同じです。設定する権限の前に追加の0を使用します:
chmod 0755 folder
LinuxでSGIDが設定されているファイルを検索する方法
SGIDビットが設定されているすべてのファイルを検索するには、次のコマンドを使用します。
find . -perm /2000
スティッキービットとは何ですか?
スティッキービットはディレクトリで機能します。ディレクトリにスティッキービットが設定されている場合、ディレクトリ内のすべてのファイルは、ファイル所有者のみまたはルートのみが削除または名前変更できます。
これは通常、一時ファイルのゴミ箱として機能する/tmpディレクトリで使用されます。
linuxhandbook:~$ ls -ld /tmp
drwxrwxrwt 1 root root 512 Apr 12 13:24 /tmp
ご覧のとおり、フォルダ/tmpには tという文字があります。 同じ場所にxが表示されると予想されます または– 他の人の許可のため。これは、ユーザー(rootを除く)が/tmpディレクトリ内の他のユーザーによって作成された一時ファイルを削除できないことを意味します。
いつものように、シンボリックモードと数値モードの両方を使用して、Linuxでスティッキービットを設定できます。
chmod +t my_dir
次に例を示します:
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/
linuxhandbook:~$ chmod +t my_dir/
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/
数値的な方法は、通常の権限に4桁目を追加することです。スティッキービットに使用される8進数は常に1です。
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/
linuxhandbook:~$ chmod 1775 tmp2/
linuxhandbook:~$ ls -ld tmp2/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/
スティッキービットを削除する方法:
シンボリックモードを使用できます:
chmod -t my_dir
または、通常の権限の前に0が付いた数値モード:
chmod 0775 tmp2
Linuxでスティッキービットが設定されているファイルを検索する方法
このコマンドは、スティッキービットが設定されたすべてのファイル/ディレクトリを返します:
linuxhandbook:~$ find . -perm /1000
ディレクトリにすべての実行権限が設定されていない場合、スティッキービットを設定すると、tではなくTが表示されます。スティッキービットでは物事が完全に正しくないことを示しています。
結論
あなたが今学んだことを思い出すために、この写真をここに置きます:
フォルダ、ファイル、およびそれらのすべての権限を管理するこの柔軟性は、システム管理者の日常業務において非常に重要です。これらの特別な権限はすべて理解するのがそれほど難しくないことがわかりますが、細心の注意を払って使用する必要があります。
この記事で、LinuxのSUID、GUID、およびスティッキービットについて十分に理解できたと思います。ご質問やご提案がございましたら、下にコメントをお寄せください。