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
ディレクトリ、および実行可能ファイルに対する権限が付与されます。
一方、アカウントにroot
はumask 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
誰がいつ、どのような状況で重要であるかを直接示します。
実際に許可され、変更されることが予想されるものをユーザーグループとファイル権限に反映して、すべての人がすべてのタスクにルートアカウントを日常的に使用するのではなく、個人ユーザーアカウントを使用して通常の日常タスクを実行できるようにするのが最善です。