GNU/Linux >> Belajar Linux >  >> Linux

Mengatur ACL yang berbeda pada direktori dan file

Seperti yang ditunjukkan Gilles, setfacl izin default menentukan izin maksimum, pada dasarnya menggantikan umask . Jadi file yang baru dibuat akan menjadi rw kecuali jika aplikasi yang membuat file meminta secara khusus agar dapat dieksekusi.

$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--

$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x                         #effective:r--
group:mygroup:rwx                  #effective:rw-
mask::rw-
other::r--

Perhatikan perms efektif di atas. (Hanya ada beberapa program yang akan meminta untuk mengatur bit eksekusi pada file yang dibuatnya, misalnya gcc untuk yang dapat dieksekusi dan cp jika file yang sedang disalin dapat dieksekusi.)

Atau apakah maksud Anda perintah setfacl pertama berfungsi seperti yang Anda inginkan, tetapi yang kedua tidak? Dengan kata lain, Anda ingin memperbaiki izin pada file lama, memastikan bahwa direktori dapat dilalui, tanpa memberikan izin eksekusi pada file biasa lainnya?

Versi setfacl saya memungkinkan X persis seperti yang Anda inginkan, misalnya:

setfacl g:mygroup:rwX

$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513    4 drwxr-xr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-r--r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxr-xr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rwxr--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rw-r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir

Jika versi setfacl Anda tidak mendukung itu, mengapa tidak menggunakan find ?

timpa izin, atur ke rw untuk file dan rwx untuk dir

$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)

setel izin ACL grup saya berdasarkan izin grup yang ada

$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)

Anda mungkin ingin memeriksa apakah topeng grup memberikan izin yang efektif. Jika tidak, Anda juga harus menjalankan ini:

$ find . -type d -exec chmod g+rwX '{}' ';'

Untuk pembaca selanjutnya, gunakan setfacl pada file/folder yang ada tanpa menambahkan bit yang dapat dieksekusi ke file Anda, solusinya adalah bagian dari jawaban @Mikel ini:

Versi setfacl saya memungkinkan X persis seperti yang Anda inginkan, misalnya:

setfacl g:mygroup:rwX

Kutipan yang relevan dari setfacl dokumentasi:

Kolom perms adalah kombinasi karakter yang menunjukkan izin:baca (r), tulis (w), jalankan (x), eksekusi hanya jika file adalah direktori atau sudah memiliki izin eksekusi untuk beberapa pengguna (X) .


Sejauh yang saya mengerti ACL Linux, setfacl -Rdm g:mygroup:rwx share_name melakukan apa yang Anda inginkan. Eksperimen:

umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec

Kemudian sebagai pengguna yang berbeda di grup mygroup :

$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec

Apa yang terjadi?

$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx                 #effective:rw-
mask::rw-
other::---

ACL efektif untuk mygroup adalah hasil dan dari ACL_GROUP entri untuk mygroup (rwx ) dengan entri ACL_MASK (rw- ).

Halaman manual acl(5) menjelaskan perhitungan ini di bawah “Algoritme pemeriksaan akses”. Itu tidak menjelaskan bagaimana ACL_MASK entri dibuat, tetapi dalam praktiknya hal yang benar tampaknya terjadi.


Linux
  1. Cara Mudah Menyembunyikan File dan Direktori di Linux

  2. Temukan File dan Direktori di Linux Seperti Profesional

  3. Cara Mengarsipkan File Dan Direktori Di Linux [Bagian 2]

  1. Cara Menyalin File dan Direktori di Linux

  2. Temukan file dan direktori terbesar di Linux

  3. Linux Hapus File dan Direktori

  1. Temukan Perintah di Linux (Temukan File dan Direktori)

  2. Cara Mengganti Nama File dan Direktori di Linux

  3. Perintah Ls di Linux (Daftar File dan Direktori)