ルートが生成したファイルがSamba共有ディレクトリから無効な権限を取得するのはなぜですか?

ルートが生成したファイルがSamba共有ディレクトリから無効な権限を取得するのはなぜですか?

rootユーザーがディレクトリまたはファイルを作成するたびに無効な権限を取得します。sambashareグループ内のすべてのユーザーが指定されたパスで読み書きできることを願っています。ユーザーがディレクトリを作成したときにディレクトリが取得する権限は次のとおりですdrwxrws---. 2 sadmin sambashare 4096 Jul 29 02:20 dir1。これは、システムrootユーザーがディレクトリを作成したときにディレクトリが取得する権限ですdrwxr-sr-x. 2 root sambashare 4096 Jul 29 02:19 testdir1。それで、rootがアクションを取った後に書き込み権限が落ちる理由とそれを防ぐ方法を知りたいです。

follow symlinks = yes
wide links = yes
unix extensions = no
workgroup = WORKGROUP
client min protocol = SMB2_02
client max protocol = SMB3
server string = Samba Server %v
netbios name = samba-server
security = user
map to guest = bad user
dns proxy = no
inherit permissions = yes

[Spi]
path = /srv/servers/spi
force create mode = 0660
force directory mode = 2775
read only = no
valid users = @root @sadmin @sambashare
write list = sadmin

[Www]
path = /var/www
force create mode = 0660
force directory mode = 2770
directory mask = 2770
read only = no
valid users = root sadmin sambashare
write list = sadmin
[root@localhost samba]#

編集する


Sambaで生成されたファイルは問題ありませんが、サーバー端末(Samba経由で接続されていない)を介してローカルに生成されたファイルには無効な権限が与えられます。

[root@localhost ~]# umask
0022
[sadmin@localhost ~]$ umask
0002

答え1

なぜこのような権限を設定するのですか?

Unixスタイルプログラムは、新しいファイルを作成するときに初期権限を割り当てます。これらの初期権限は通常、通常の0666ファイルrw-rw-rw-0777ディレクトリrwxrwxrwx、または実行可能ファイルに割り当てられます。これはすべてのプログラムに直接コーディングされているため、簡単に変更することはできません。

ただし、これらの初期権限は新しいファイルに直接適用されません。オペレーティングシステムは、まずumaskこの値に設定されているすべての許可ビットを削除します。つまり、「他の」sadminユーザーの書き込みumask 0002ビット-------w-のみを削除し、プログラムはファイル所有者とファイルが属するユーザーグループに要求するすべての権限を許可します。これにより、rw-rw-r--通常のファイル、rwxrwxr-xディレクトリ、および実行可能ファイルに対する権限が付与されます。

一方、アカウントにrootumask 0022対応するものがあるため、----w--w-ファイルの実際の所有者を除くすべての人の書き込みアクセス権が削除されます。これにより、rw-r--r--通常のファイル、rwxr-xr-xディレクトリ、および実行可能ファイルに対する権限が付与されます。ルートが所有しているが他の人が書き込むことができるファイルは、特定のセキュリティ違反をより簡単にすることができるため、これは一般的に良いことです。このumask値は、そのようなファイルが誤って生成されるのを防ぎます。

しかし、なぜルート編集によって既存のファイルが変更されるのですか?まあ、それはテキストエディタが何をしているかによって異なります。一部のテキストエディタは最初に新しい一時ファイルを作成します(リモートで作業して編集中にネットワーク接続が失われたときに変更を保存できます)。 「保存」すると、実際には元のファイルのみが削除され、編集された一時コピーの名前が元のコピーに変更されます。一部の編集者はこのプロセス中に元のファイルの権限/所有権を保持できますが、すべてではありません。一部のエディタは、必要な操作を実行するように設定できます。

これについて何ができますか?

umask 0002簡単なコマンドを使用して、そのセッションに対してのみルートのumaskを0002に変更できます。あるいは、適切なシェル起動スクリプトにコマンドを追加して、ルートに対して永続化することもできます。ただし、rootアカウントをセキュリティの脆弱性に対してより脆弱にするため、これらのいずれも実際にはお勧めできません。


ファイルシステムがACLをサポートしている場合(対応するサポートは、ファイルシステムのデフォルト値またはマウントオプションで有効になります。最新のCentOSではデフォルトで有効にできます)、次のように設定できます。基本アクセス制御リストディレクトリでは、これはumask設定を効果的に上書きします。この特定のディレクトリのみ:

 setfacl -m d:u::rwx,d:g::rwx,d:o::rx /srv/servers/spi

これが適用されている間に作成されたすべての新しいサブディレクトリは、setgidビットで発生するのと同様に、デフォルトのACLを自動的に継承します。

共有にすでにサブディレクトリがある場合は、/srv/servers/spiディレクトリツリー全体のすべてのディレクトリに対してこれを行う必要があります。

find /srv/servers/spi -type d -exec setfacl -m d:u::rwx,d:g::rwx,d:o::rx {} \+

あるいは、ベストプラクティスに従う場合はrootとしてログインしないでください。したがって、プライベートアカウントでログインしてからrootを使用するか、rootにすることができsudoますsu

グループにこのディレクトリへの書き込み権限を与えたので、sambashare単に個人アカウントをグループに追加するだけで、sambashare共有ディレクトリを変更するためにルートになる必要はありません。より良い責任システムのために最善を尽くします。してはいけない個人アカウントを使用して変更できる場合は、rootに変更してください。システムで監査ロギングが有効になっている場合、監査ログは/var/log/audit誰がいつ、どのような状況で重要であるかを直接示します。

実際に許可され、変更されることが予想されるものをユーザーグループとファイル権限に反映して、すべての人がすべてのタスクにルートアカウントを日常的に使用するのではなく、個人ユーザーアカウントを使用して通常の日常タスクを実行できるようにするのが最善です。

関連情報