web-dev-qa-db-ja.com

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

Unixでは、昔からchmodについて学んでいました。Unixで(およびsetuid、setgidを使用してプログラムが特権を取得できるようにするための)伝統的な方法です。

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

  • setfaclは、従来のugo:rwxビットとtchmodビットを拡張します。
  • setcapは、chmodug:sビットよりも細かく制御できます。
  • chattrファイルの他のいくつかの制御(混合のビット)を許可します。

他にありますか?

19
ctrl-alt-delor

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

使用法(8進モード):

    chmod <octal-mode> files...

使用法(シンボリックモード):

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

referencesugoaの文字の組み合わせで、filesへのユーザーのアクセスを指定します変更されます:

  • u所有者
  • gのグループの他のユーザーfile
  • oファイルのグループに含まれない他のユーザー
  • aすべてのユーザー

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

    operatorは、文字+-=の1つです:

    • +指定されたファイルモードビットを各fileの既存のファイルモードビットに追加します
    • -は、指定されたファイルモードビットを各fileの既存のファイルモードビットに削除します。
    • =は、明示的に指定されていない限り、ディレクトリに設定されているsetuidおよびsetgidビットを除いて、指定されたビットを追加し、指定されていないビットを削除します。

    modeは、変更するパーミッションビットを指定するrwxXstの文字の組み合わせで構成されます。

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

    または、modeugoのいずれかの文字で構成できます。この場合、モードは、所有者(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。
      • 何をしているのかわからないと、セキュリティに悪影響を与える可能性があります。
      • 実行可能ファイルが実行されるときに、これらのビットの1つが設定されている場合、実行可能ファイルの有効なユーザー/グループはファイルの有効なユーザー/グループになります。したがって、プログラムはそのユーザーとして実行されます。これを行うためのより近代的な方法については、setcapを参照してください。

chownchgrp


chattr :ファイル属性を変更

使用法:

    chattr <operator><attribute> files...

operatorは文字+-=の1つです:* +は選択した属性を既存の属性に追加しますattributesfiles * -は、選択したattributesを削除します=は、指定したattributes

attributeは、属性に対応するacdeijstuADSTの文字の組み合わせです。

  • 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エントリを削除します

    targetugmo(または以下に示す長い形式)のいずれかです。

  • uusersparamで識別される名前付きユーザーの権限、省略した場合はデフォルトでファイル所有者uid

  • ggroupparamで識別される名前付きグループの権限、省略した場合はデフォルトで所有グループuid
  • mmask有効な権限マスク
  • oother他のユーザーの権限

    permsは、権限に対応するrwxXの文字の組み合わせです。

  • r読み取り

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

    または、permsは、権限のセットを示す8進数(0-7)の場合があります。


setcap :変更 ファイル機能

使用法:

    setcap <capability-clause> file 

capability-clauseは、カンマで区切られた capability の名前のリストと、その後に続く演算子とフラグのペアのリストで構成されます。

使用可能な演算子は、=+、および-です。使用可能なフラグはeiおよびpで、EffectiveInheritableに対応しますおよび許可機能セット。

=演算子は、指定された機能セットを発生させ、その他をリセットします。 =演算子と共にフラグが指定されていない場合、すべての機能セットがリセットされます。 +演算子と-演算子は、それぞれ1つ以上の指定された機能セットを上げたり下げたりします。


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

使用法:

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

userは、user_usystem_urootなどのSELinuxユーザーです。

roleはSELinuxロールです(ファイルの場合は常にobject_r

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


chsmack :変更 [〜#〜] smack [〜#〜] 拡張属性

使用法:

    chsmack -a <value> file

valueは、SMACK64拡張ファイル属性に設定されるSMACKラベルです


setrichacl :リッチアクセスコントロールリストを変更します。

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

現在作業中のため、あまりお伝えできません。私はそれらを使用していません。

この質問も参照してください 従来の 'rwx'およびPOSIX ACLを超える高度なファイルシステムACLはありますか? および man page

29
Thomas Nyman

高レベルから:

  • all linuxおよびall filesystemでサポートされる基本的なファイルシステムのアクセス許可。-rwxrwxrwxchmodによって処理されます、およびchownchgrpによって処理されるファイルシステム上のすべてのファイルまたはフォルダーに関連付けられた所有者とグループの識別子誰もが基本的にこの作品を知っています。
  • 拡張ファイル属性は、xattrによって短縮または知られています。通常の属性の目的はファイルシステムによって厳密に定義されているのに対し、これらはファイルシステムの機能であり、ユーザーはコンピューターファイルをファイルシステムによって解釈されないメタデータに関連付けることができます。属性は、プロセスに関連付けられた環境文字列と同様に、ファイルとディレクトリに永続的に関連付けられた名前と値のペアです。このメタデータをさまざまなファイル/フォルダーに単に設定することに関連する特定のLinuxコマンドがあります。
  • [〜#〜] selinux [〜#〜]secure linuxとして知られています。履歴をウェブ検索できます。 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でuser_xattrのfstabマウントオプションを覚えており、インストール時にルートファイルシステムでxattrを使用できないように選択できました。 RHEL/CentOS 7では、デフォルトでxattrが存在し、それを使用できないと思います。
  • lsを実行しているときに-rwxrwxrwx+が表示された場合、その+は、そのobjectに拡張ファイル属性が存在することを示します。
  • アクセス制御リスト(ACL):オブジェクトに添付された権限のリストです。 ACLは、オブジェクトへのアクセスが許可されるユーザーまたはシステムプロセス、および特定のオブジェクトで許可される操作を指定します。
  • centos wikiからselinux:selinuxはカーネルに実装されたMACセキュリティメカニズムです。 SELinuxが有効になっていない場合、ユーザーのファイルアクセスを制御するために使用されるのは、ファイル許可やアクセス制御リスト(ACL)などの従来の随意アクセス制御(DAC)メソッドのみです。ユーザーとプログラムは同様に、安全でないファイルのアクセス許可を他のユーザーに付与したり、逆に、通常の操作に必要のないシステムの部分にアクセスしたりすることができます。基本的に、従来のDACモデルでは、ルートとユーザーの2つの特権レベルがあり、最小特権のモデルを適用する簡単な方法はありません。 rootによって起動された多くのプロセスは、制限されたユーザーとして実行する権利を後で落とします
  • linux [カーネル]はすべてをファイル(ブロックデバイスまたはネットワークポート)として扱うため、xattrとACLの使用を全体的に見るのは一読の価値があります。ファイル/フォルダだけではありません。 https://wiki.centos.org/HowTos/SELinux
  • xattrは、システムとファイルシステム、およびNFS間でのデータの移動で問題を引き起こす可能性があります。[新しい]システムは、これらの拡張属性をすべて認識しない可能性がある古いシステムと比較して、xattrを完全にサポートしています。 xattrを使用するものでtarを使用する場合は注意してください。システムに問題がなければ、xattrが重要な場合(つまり、sambaとwin10 ntfsとlinux ext3/4、btrfs、xfs間のコピー)、またはネットワークに接続されたストレージデバイス間を行き来する)
  • xattrsで定義されているものによってACLを強制するselinuxまたは他のメカニズムがない場合、xattrsは理論的には何も意味せず、その時点では余分な手荷物であるため、削除または削除できます。
  • 注意してくださいdisablingselinux in rhel/centos 7 in xattrを介したファイルシステムラベルが失われると、selinuxをに戻すときに問題が発生するため/ enforcingまたはpermissive;繰り返しますが、これはLinuxのバージョンと、それがselinuxを介してxattrをどのように利用しているかによって異なります。

RHEL/CentOS 7では基本的なSamba共有が機能しない...デフォルトではselinuxがenforcingに設定されているため。許可するまで、selinuxはすべてを拒否したので、selinuxを無効にする(不良)か、permissiveに設定します。 selinuxをenforcingのままにする場合は、sambaで共有するフォルダーに拡張属性でラベルを付ける必要があります。これにより、selinuxは共有を認識して許可します。したがって、selinuxを強制したままにすると、すべてのselinuxコマンド(必要な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システムでは、必要なxattrが存在しないため、そのLinuxシステムでselinuxが上記のファイルへのアクセスを制限し、ユーザー/管理者がそこにぶつかって、なぜ今はうまくいかないのか疑問に思っています... selinuxを設定します監査ログに表示される失われたxattrsの問題を寛容に認識して認識しますが、それは、前後のコピーがxattrを失った結果であったことを直接示すものではありません。また、データのバックアップと復元、および正しいxattrsに基づいてセキュリティを適用する場合は、uid/gidに加えてxattrsを覚えておくために必要な作業についても検討してください。

1
ron