gnu / linuxでファイル許可などを設定するさまざまな方法は何ですか


19

昔、Unixで、次のことを学びましたchmod:Unixでのパーミッションを設定する従来の方法(およびsetuid、setgidを使用してプログラムが特権を取得できるようにする方法)。

最近、GNU / Linuxでいくつかの新しいコマンドを発見しました。

  • setfacl従来延びugo:rwxビットとtのビットchmod
  • setcapug:sビットよりも多くのフィングレイン制御を提供しますchmod
  • chattr ファイルの他のいくつかのコントロール(ビットの混合)を許可します。

他に何かありますか?


また、参照unix.stackexchange.com/q/183994/4778の詳細についてchmod
Ctrl + Alt + delor

拡張ACL(richACL)については、unix.stackexchange.com / q / 246606/4778も参照してください。
ctrl-alt-delor

回答:


28

chmod:ファイルモードビットの変更

使用法(8進モード):

    chmod <octal-mode> files...

使用法(記号モード):

    chmod <references><operator><modes> files..

references文字の組み合わせですugoa。これfilesは、変更するユーザーのアクセスを指定します。

  • u それを所有するユーザー
  • gfileのグループの他のユーザー
  • o ファイルのグループに属さない他のユーザー
  • a すべてのユーザー

    省略すると、デフォルトですべてのユーザーになりますが、許可されてumaskいる権限のみが変更されます。

    operator文字の1つです+-=

    • + 指定されたファイルモードビットをそれぞれの既存のファイルモードビットに追加します file
    • - 指定されたファイルモードビットをそれぞれの既存のファイルモードビットに削除します file
    • =明示的に指定されない限り、指定されたビットを追加し、ディレクトリに設定されたビットsetuidsetgidビットを除く未指定のビットを削除します。

    moderwxXst変更する許可ビットを指定する文字の組み合わせで構成されます。

    • r 読んだ
    • w 書く
    • x 実行(またはディレクトリの検索)
    • X ファイルがディレクトリであるか、すでに一部のユーザーに実行ビットが設定されている場合にのみ実行/検索
    • ssetuidまたはsetgid(指定に応じてreferences
    • t 制限付き削除フラグまたはスティッキービット

    または、mode文字の1つで構成することもできます。ugoこの場合、モードは、所有者(u)、fileグループのメンバー()、gまたは前のカテゴリのいずれにも属さないユーザーの許可()に現在許可されている許可に対応しますo

さまざまなビットのchmod説明:

  • アクセス制御(も参照setfacl
    • rwx —読み取り(r)、書き込み(w)、および実行/クロス(x)許可。
      • 読み取り(r)は、ファイルを読み取ることができるか、またはディレクトリをリストできるかどうかに影響します。
      • 書き込み(w)は、ファイルへの書き込みが可能かどうか、またはディレクトリの編集(ファイルの追加、削除、名前の変更)が可能かどうかに影響します。
      • 実行(x)は、ファイルを実行できるかどうか、スクリプトの使用(を参照#!)、およびその他の実行可能ファイルに影響します。
      • クロス(x)は、ディレクトリを横断できるかどうかに影響します。
    • sおよびt—スティッキビット(t)、およびディレクトリのsetgid(s)
      • スティッキービットはディレクトリにのみ影響します。ファイル所有者とルート以外のユーザーがディレクトリ内のファイルを削除できないようにします。
      • ディレクトリのsetgidビットは、新しいファイルとディレクトリのグループを同じグループに設定し、新しいディレクトリのsetgidビットを設定します(setfaclのデフォルトも参照)。
    • s —実行可能ファイルのsetuid、setgid。
      • 何をしているのかわからない場合、これはセキュリティに悪影響を及ぼす可能性があります。
      • 実行可能ファイルが実行されているときに、これらのビットのいずれかが設定されている場合、実行可能ファイルの有効なユーザー/グループはファイルの有効なユーザー/グループになります。したがって、プログラムはそのユーザーとして実行されます。setcapこれを行うためのより現代的な方法を参照してください。

chown chgrp


chattr:ファイル属性の変更

使用法:

    chattr <operator><attribute> files...

operator文字の一つである+-=:* +既存のものであることが選択した属性を追加してattributesfiles * -選択し削除しattributes * =ファイルが指定していた属性の現在のセットを上書きしますattributes

attributeacdeijstuADST属性に対応する文字の組み合わせです:

  • a 追加のみ
  • c 圧縮された
  • d ダンプなし
  • e エクステント形式
  • i 不変
  • j データジャーナリング
  • s 安全な削除
  • t テールマージなし
  • u 削除できない
  • Aノーatimeアップデート
  • D 同期ディレクトリ更新
  • S 同期更新
  • T ディレクトリ階層のトップ

setfattr拡張ファイル属性の変更

使用法(属性を設定):

    setfattr -n <name> -v <value> files...

使用法(削除):

    setfattr -x <name> files...

name 設定または削除する拡張属性の名前です

value 拡張属性の新しい値です


setfacl:ファイルアクセス制御リストの変更

使用法:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option 次のいずれかを含める必要があります。

  • --set ファイルまたはディレクトリのACLを設定し、以前のACLを置き換えます
  • -m| --modifyファイルまたはディレクトリのACLを変更します
  • -x| --remove ファイルまたはディレクトリのACLエントリを削除する

    target文字の1つugmo(または以下に示すより長い形式):

  • u、でusers識別される名前付きユーザーの許可、省略時のparamデフォルトはファイル所有者uid

  • ggroupによって識別される名前付きグループの許可、省略された場合のparamデフォルトは所有グループuid
  • mmask実効権利マスク
  • oother他の人の許可

    permsrwxX許可に対応する文字の組み合わせです。

  • r 読んだ

  • w 書く
  • x 実行する
  • X ファイルがディレクトリであるか、すでにユーザーの実行権限を持っている場合にのみ実行

    または、許可のセットを示すperms8進数(0- 7)にすることもできます。


setcapファイル機能の変更

使用法:

    setcap <capability-clause> file 

capability-clauseコンマ区切りのリストで構成されて機能オペレータフラグペアのリストが続く名前。

利用可能な演算子は=+および-です。使用可能なフラグはeiおよびです。pこれらは、EffectiveInheritable、およびPermittedの機能セットに対応しています。

=オペレータは、指定された機能セットを高め、他の人をリセットします。=オペレーターと一緒にフラグが指定されていない場合、すべての機能セットがリセットされます。+そして-、オペレータは、それぞれ一つ以上の指定された機能セットを上げたり下げます。


chcon:ファイルSELinuxセキュリティコンテキストの変更

使用法:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

ユーザは等SELinuxのユーザであるuser_usystem_uまたはroot

ロールはSELinuxロールです(常にobject_rファイル用)

typeはSELinuxサブジェクトタイプです


chsmackSMACK拡張属性の変更

使用法:

    chsmack -a <value> file

valueSMACK64拡張ファイル属性に設定されるSMACKラベルです


setrichacl:リッチアクセス制御リストを変更します。

richaclは、より高度なACLを追加する機能です。

現在進行中の作業なので、それらについてはあまり説明できません。私はそれらを使用していません。

この質問も参照してください。従来の「rwx」およびPOSIX ACLを超える、より高度なファイルシステムACLはありますか? およびマニュアルページ


5
+1各cmdの使用例を追加した場合、この回答は非常に役立ちます。これは、今後参照できる標準的な回答です。
slm

1
@slm提案をありがとう。各コマンドの簡単な使用方法の説明を追加しました。
トーマスナイマン

ここに示されている以上の機能を使用したい人への警告。ここで説明した機能を使用しました。しかし、forkとexecを介して(有用に)それらを継承しようとすることは不可能に思えます。私は、バグが表示さがあると思いunix.stackexchange.com/questions/196483/...
Ctrl + Alt + delor

前のコメントで言及したバグは、設計上のバグであり、アンビエント機能が追加されたカーネル4.3で修正されました。man7.org
/ linux / man-pages / man7 /

1
これが規範的な答えになるすべての例を見たいです!
statquant

1

高レベルから:

  • でサポートされている基本的なファイルシステムのアクセス権すべてのLinuxおよびすべてのファイルシステム-rwxrwxrwxによって処理chmodが取り扱うファイルシステム上のすべてのファイルやフォルダに結び付け、所有者とグループ識別子と一緒に、chownchgrp。基本的に誰もがこの作品を知っています。
  • xattrによって短縮または認識される拡張ファイル属性。通常の属性にはファイルシステムによって厳密に定義された目的がありますが、それらはユーザーがファイルシステムによって解釈されないメタデータにコンピューターファイルを関連付けることができるファイルシステム機能です。属性は、プロセスに関連付けられた環境文字列と同様に、ファイルとディレクトリに永続的に関連付けられた名前と値のペアです。このメタデータをさまざまなファイル/フォルダーに設定することに関連する特定のLinuxコマンドがあります。
  • セキュアLinuxとして知られるSELINUX。履歴をウェブ検索できます。また、AppArmorのようなSELINUXに代わるものがあり、おそらく他にもあることを知っています。この時点で、これらはxattrを利用してMAC(必須アクセス制御)を行うための機能とメカニズムを提供するカーネルモジュールです。selinuxは、ファイルセキュリティラベルをxattrsに保存します。また、特定のselinux関連のコマンドがあります。

他のキーポイント:

  • gnu / linuxの時代とバージョンは、xattrとselinuxに関して、利用可能なものと機能するものにとって重要です。
  • すべてのファイルシステムがxattrをサポートしているわけではないことが報告されています。使用されているlinuxのディストリビューションとバージョンに基づいて個々の研究に任せるのが最適です(1960年代のrhel / suse / debian、irix、solaris、aix、unix)
  • 実際には、uid / gidに加えてxattrの固有の基本的なファイル/フォルダーのアクセス許可だけがすべてを可能にします。SELinuxはxattrを使用してファイル/フォルダーのセキュリティラベルを保存します... selinuxでは、xattrで低レベルのレッグワークをすべて使用/定義します。したがって、古いファイルシステムがxattrをサポートしていない場合、selinuxを使用することはありません。
  • selinux(またはapparmorまたはその他のカーネルモジュール)を有効または無効にできます。
  • Linuxのバージョンに応じて、特定のマウントされたファイルシステムのxattrを有効または無効にできる場合があります。SLES 11では、fstabマウントオプションを覚えておりuser_xattr、インストール時にルートファイルシステムでxattrを使用できないようにすることもできます。RHEL / CentOS 7では、xattrがデフォルトで存在し、使用できないと思います。
  • やったときにlsあなたが見るならば-rwxrwxrwx+、それは+、拡張ファイル属性がその上に存在することを示すオブジェクト
  • アクセス制御リスト(ACL):オブジェクトに付加された許可のリストです。ACLは、どのユーザーまたはシステムプロセスがオブジェクトへのアクセスを許可されるか、および特定のオブジェクトに対して許可される操作を指定します。
  • centos wiki selinuxから: selinuxは、カーネルに実装されたMACセキュリティメカニズムです。SELinuxが有効になっていない場合、ユーザーのファイルアクセスを制御するために、ファイルアクセス許可やアクセス制御リスト(ACL)などの従来の随意アクセス制御(DAC)メソッドのみが使用されます。ユーザーとプログラムは、安全でないファイルのアクセス許可を他のユーザーに付与したり、逆に、通常の操作には必要のないシステムの部分にアクセスしたりすることができます。基本的に、従来のDACモデルでは、ルートとユーザーの2つの特権レベルがあり、最小特権のモデルを強制する簡単な方法はありません。rootによって起動される多くのプロセスは、後で制限されたユーザーとして実行する権限をドロップします
  • Linux [カーネル]はすべてをファイル(ブロックデバイスまたはネットワークポート)として処理するため、xattrとACLの使用を理解するために読む価値があります。xattrを使用してほとんどすべてをタグ付けし、selinuxを介して何らかのアクセス制御を実施できます。ファイル/フォルダだけではありません。 https://wiki.centos.org/HowTos/SELinux
  • xattrは、システムとファイルシステム間でのデータの移動、NFSで問題を引き起こす可能性があります。tarxattr を使用する場合は注意してください。システムに問題がなくても、xattrが重要な場合(たとえば、sambaとwin10 ntfsとlinux ext3 / 4、btrfs、xfs間のコピーなど)ネットワークに接続されたストレージデバイス間を行き来します)
  • xattrsで定義されているものによってACLを強制するselinuxや他のメカニズムがない場合、xattrsは理論的には何も意味せず、その時点では余分な荷物であるため、ドロップまたは削除できます。
  • rhel / centos 7でselinuxを無効にする場合は注意してください。xattrを介したファイルシステムラベルが失われると、selinuxを強制または許容に戻すときに問題が発生します。再度それはあなたのLinuxのバージョンとそれがselinuxを介してxattrをどのように利用しているかに依存します。

RHEL / CentOS 7で基本的なSamba共有が機能しない... selinuxはデフォルトで強制に設定されているため。selinuxは、許可するまですべてを拒否したため、selinuxを無効にするか(不良)、またはpermissiveに設定します。selinuxを強制として残す場合は、samba共有するフォルダーに拡張属性のラベルを付ける必要があるため、selinuxは共有を認識して許可します。したがって、すべてのselinuxコマンドでselinux enforcingを終了すると(必要なxattrsが設定されます):

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

さらに、このsamba共有を使用するLinuxシステムでselinuxを使用して、このsamba共有下のファイル/フォルダーに制限属性を適用します(拡張属性を使用)。これらのファイル/フォルダーは共有されているため、ユーザーは一部をwin10 pcに合法的にコピーしてからコピーバックし、拡張属性を失います。今、その前後のコピーの後、そのLinuxシステムでは、selinuxは必要なxattrが存在しないため、前述のファイルへのアクセスを制限し、ユーザー/管理者はなぜ今うまくいったのか疑問に思っていますxattr監査ログにs が失われるという問題を許容して認識しますが、xattrを失った前後のコピーの結果であることを直接示すものではありません。また、データのバックアップと復元、および覚えておく必要がある潜在的な作業も検討します。xattr正しいxattrsに基づいてセキュリティを強化する場合は、uid / gidに加えてs。

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