「chmod g + s」コマンド


45

こんにちはchmod g+sUnix でのコマンドの役割を理解したいと思います。

また、この特定のコンテキストでそれが何をするのか知りたいです:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

を除くすべてのコマンドの役割を理解しておりchmod g+s、ファイルundeuxこの一連のコマンドの結果の違いを知りたいです。

回答:


61
chmod g+s .;

このコマンドは、現在のディレクトリにグループID(setgid)を設定し.ます。

つまり、現在のディレクトリ内に作成されたすべての新しいファイルとサブディレクトリは、ファイルを作成したユーザーのプライマリグループIDではなく、ディレクトリのグループIDを継承します。これは、現在のディレクトリに作成された新しいサブディレクトリにも渡されます。

g+s ファイルのグループIDには影響しますが、所有者IDには影響しません。

これは、新しく作成されたファイルにのみ適用されることに注意してください。ディレクトリに移動mvされた ()ファイルは 、setgid設定の影響を受けません。コピーされるファイルcp -pも影響を受けません。

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

この場合、deuxグループに属しますcanardが、unそれが何であれ、それを作成したユーザーのグループに属します。

シェルコマンドでのセミコロンの使用に関するマイナーノート

異なり、cまたはperl上で、次の別のシェルコマンドがある場合、シェルコマンドはセミコロンする必要が同じコマンドラインが。したがって、次のコマンドラインを検討してください。

chgrp canard .; chmod g+s .;

最後のセミコロンは不要であり、削除できます。

chgrp canard .; chmod g+s .

さらに、2つのコマンドを別々の行に配置する場合、残りのセミコロンは不要です。

chgrp canard .
chmod g+s .

1
コピーされたファイル(例:)cpは、実際には新しく作成されます。グループのアクセス許可を継承しない場合、コピープログラムは、一時ファイルにコピーしてからターゲットディレクトリに移動するなど、ゲームをプレイしています。
カズ

1
@Kaz良い点。答えを更新してcp -p、setgid設定をオーバーライドすることであることを明確にしました。
John1024

しかしcp -p、setgid設定はオーバーライドされますか?存在するすべてのUnix実装で?POSIXは、cp -pでユーザーIDまたはグループIDをコピーできなかった場合に診断メッセージが表示されるかどうかは指定されていないと述べています。ただし、その状況ではそれぞれS_SUIDビットとS_SGIDビットをクリアする必要があります(つまり、ファイルがsetuid bobであるが、bobの所有権をコピーできないため、ファイルがjanetによって所有されている場合は、setuidにしないでください) janet。)
カズ

cp -psetgid設定をオーバーライドしますか?」 POSIX仕様によれば、それが何をすべきかです。私が使用したすべてのUnixシステムでそうします。グループID 複製できない場合にセキュリティを保護するために何をすべきかに関する仕様の一部を引用しました。このような「できない」状況に遭遇したことはありませんか?
John1024

7

chmodコマンドを使用して、ファイルのアクセス権を変更できます。Unixでは、ファイルへの異なるタイプのアクセス権を持つユーザーを確立するファイル許可は、アクセスクラスとアクセスタイプの両方で指定されます。アクセスクラスはユーザーのグループであり、それぞれに特定のアクセスタイプを割り当てることができます

Unix / Linuxには、ファイルアクセスに割り当てることができるユーザーとユーザーグループがあります

オプションg + sは次のとおりです。

g-ファイルのグループ内の他のユーザーが持っているパーミッション

s-実行時にユーザーまたはグループIDを設定

以下に使用例を示します。

chmod =rwx,g+s filename

(特定のファイルの読み取り、書き込み、実行を全員に許可し、設定されたグループIDを有効にします)

ファイルのパーミッションを設定/変更するには、chmodプログラムを使用する必要があります。もちろん、ファイルの所有者だけがchmodを使用してファイルのアクセス権を変更できます。chmodの構文は次のとおりです。chmod [options] mode file(s) 'mode'部分は、引数として続くファイルの新しい許可を指定します。モードは、どのユーザーの権限を変更する必要があるかを指定し、その後、どのアクセスタイプを変更する必要があるかを指定します。たとえば、chmod ax socktest.plとしましょう。

これは、すべてのユーザーの実行ビットをクリア(-)する必要があることを意味します。(所有者、グループ、その他の地域)許可は、変更によって影響を受けるユーザーを指定する文字で始まります。これは次のいずれかです。

u the owner user
g the owner group
o others (neither u, nor g)
a all users

これに続いて、+(セットビット)または-(クリアビット)と、変更するビットに対応する文字で構成される変更命令が続きます。いくつかの例を見てみましょう。

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

奇妙な数字... chmod 755 somefileのようなものに遭遇したかもしれませんが、もちろんこれが何であるか疑問に思うでしょう。問題は、この例のような1つの番号を使用して、ファイルの許可パターン全体を一度に変更できることです。すべてのモードには対応するコード番号があり、これからわか​​るように、どの番号がどのモードに対応するかを把握する非常に簡単な方法があります。モード番号の3桁の数字はすべて、3つの許可トリプレットのいずれかに対応します。(u、g、およびo)トリプレットのすべての許可ビットは、rに4、wに2、xに1の値に対応します。許可ビットの場合、この値を許可トリプレットの数に追加します。クリアされている場合、何も追加しません。(あなたの中には、実際に、

uのトリプレット: rwx => 4 + 2 + 1 = 7

gのトリプレット: r-x => 4 + 0 + 1 = 5

oのトリプレット: r-x => 4 + 0 + 1 = 5

どれが: 755

したがって、755は「他の人がこのファイルを読んだり実行したりしても構いませんが、変更できるのは自分だけだ」と言う簡単な方法であり、777は「誰もがこのファイルにフルアクセスできる」ことを意味します

完璧なリファレンス


0

lsコマンドの結果は、umaskに依存します。

g + sはsgidをファイルに設定します。SUID SGIDの詳細については、こちらをご覧ください

たとえば、umaskが022の場合、結果は次のようになります。

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un

0

Linuxでは、extのデフォルトのマウントオプションの1つですか?fsは 'nogrpid | sysvgroups」。したがって、最初のタッチは、作成プロセスのfsgidに等しいグループIDを持つファイルを作成します(fsgid = egid)。

chmod g + s。、以降のファイル/ディレクトリ作成は親フォルダからグループIDを継承し、作成されたものがディレクトリである場合、それもg + sを親として設定します。

ここでdeuxをタッチし、グループカナードでdeuxを作成します。

マウントオプションが「grpid | その場合のbsdgroups 'では、新しいファイル/ディレクトリの作成は、親自体にg + sを設定しなくても、親フォルダからグループIDを継承します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.