bash シェル スクリプトからフォルダーを作成し、そこに mysqldump を保存しています。スクリプトには権限に関連するコマンドがないことは確かです。他のユーザーがこれらのファイルにアクセスできるようにするために ACL を使用しましたが、ファイルにアクセスしようとすると権限が拒否される問題が発生しました。問題はeffective
ACL の権限にあります。
ディレクトリの所有者はでありola
、フォルダにアクセスしようとしている新しいユーザーはでありuber
、フォルダはgettaxi
親ディレクトリの権限
[/omega/olabooktmp]# getfacl .
# file: .
# owner: ola
# group: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
子ディレクトリの権限
[/omega/olabooktemp]# getfacl gettaxi/
# file: gettaxi/
# owner: ola
# group: ola
user::rwx
user:uber:rwx #effective:---
group::r-x #effective:---
mask::---
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
gettaxi
新しいディレクトリマスクのアクセス許可が のようになっているmask::---
ため、これが問題の原因であると思うのですが、この問題の解決方法を完全に理解できません。
ご提案があれば大歓迎です。
ありがとう。
答え1
次のコマンドでマスクを変更できます。
setfacl -m m:rwx filename/directory
答え2
あなたの質問をよく理解しているなら、ユーザーはola
ディレクトリにファイルを作成しています:/omega/olabooktmp/gettaxi
これらのファイルへのアクセスを制限したいが、ユーザーにアクセスを許可したいuber
。
注:/omega/olabooktmp/gettaxi
所有者はola
ACL なしで始めましょう:
ls -ld /omega/olabooktmp/gettaxi
drwxr-x--- 2 ola ola 4096 mars 21 08:16 /omega/olabooktmp/gettaxi
rwx
ACL を使用する権限を付与するには、以下uber
を使用できます。
setfacl -m u:uber:rwx,d:u:uber:rwX,o:--- /omega/olabooktmp/gettaxi
これにより、フォルダー に対するユーザーuber
権限が許可され、 および も付与されます。フォルダー内に以前存在していたファイルに対する権限が付与され、ファイルに継承された権限が付与されます。また、制限のために、 への他のすべての権限も削除されます。所有者は引き続き独自の権限を持ちます。rwx
/omega/olabooktmp/gettaxi
rwx
default
d:
X
other
結果:
getfacl /omega/olabooktmp/gettaxi
getfacl: Removing leading '/' from absolute path names
# file: omega/olabooktmp/gettaxi
# owner: ola
# group: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::---
テスト:
ola
いくつかのファイルを作成します (root として実行):
su - ola -c "for i in {1..3}; do date > /omega/olabooktmp/gettaxi/$RANDOM; done"
結果:
ls -l /omega/olabooktmp/gettaxi/
total 32
-rw-r----- 1 ola users 32 mars 21 08:43 17606
-rw-r----- 1 ola users 32 mars 21 08:43 22286
-rw-r----- 1 ola users 32 mars 21 08:42 31484
-rw-r----- 1 ola users 32 mars 21 08:43 31848
-rw-r----- 1 ola users 32 mars 21 08:42 667
-rw-r----- 1 ola users 4 mars 21 08:16 one
-rw-r----- 1 ola users 6 mars 21 08:16 three
-rw-r----- 1 ola users 4 mars 21 08:16 two
通常のユーザーではアクセスできません (root として実行):
su - debian -c "ls -l /omega/olabooktmp/gettaxi"
ls: cannot open directory '/omega/olabooktmp/gettaxi': Permission denied
しかし、uber は (root として実行) 可能です:
su - uber -c "ls -l /omega/olabooktmp/gettaxi"
total 32
-rw-r----- 1 ola users 32 Mar 21 08:43 17606
-rw-r----- 1 ola users 32 Mar 21 08:43 22286
-rw-r----- 1 ola users 32 Mar 21 08:42 31484
-rw-r----- 1 ola users 32 Mar 21 08:43 31848
-rw-r----- 1 ola users 32 Mar 21 08:42 667
-rw-r----- 1 ola users 4 Mar 21 08:16 one
-rw-r----- 1 ola users 6 Mar 21 08:16 three
-rw-r----- 1 ola users 4 Mar 21 08:16 two
いくつかのテストで ACL を壊してしまった場合は、次のコマンドですべての ACL を削除できます。
setfacl -R -b /omega/olabooktmp/gettaxi
そしてまた始めてください。
答え3
はい、マスクは権限を下げます。有効な権限は、権限とマスクの組み合わせです。 ( user::
(所有ユーザー)、および はother
マスクの影響を受けません)。
マスクは次のように変更できます: 例setfacl -m m:r-x file-name
:
を実行するときにls -l
、モードが で終わる場合+
、中間のモード ビット (従来はグループ ビット) がマスクになります。
モード ビットは、 のグループ ビットに従って設定されることがありますumask
。これがいつ発生するか、およびデフォルトのマスクがいつ使用されるかに関するルールはまだ解明されていません。 を使用してcp
ファイルをコピーすると、 が使用されるようですumask
。
回避策
ユーザーに独自のグループがあり、それがデフォルト グループに設定されていることを確認します。次に、umask
を に 設定します007
。
答え4
この動作はバグだと思います。先月この件について投稿しました (unix.stackexchange.com/questions/570795 を参照)。何が起こっているかというと、ソース ファイルのファイル権限が cp コマンドによって ACL マスクにコピーされているのです。これは cp ではなく cp -p で期待していたことです。cat を使ってコピーできることが分かりました。
cat afile > bfile
またはタールを通すことによって
(cd A; tar -cf -)|(cd B; tar-xf -)
そして、ACL は期待どおりに尊重されます。
また、この cp の動作を説明するために懸賞金も出しました。誰も説明してくれませんでした。バグレポートを提出しようと思っています。つまり、これは 'cp -p' の動作であって、バニラ cp の動作ではないということです。(そして、誰も答えを出せなかったにもかかわらず、システムは懸賞金ポイントを差し引きました。これにも驚きました。)