Apa saja cara berbeda untuk mengatur hak akses file dll di gnu / linux

19

Di Unix, lama sekali, saya belajar tentang chmod: cara tradisional untuk mengatur izin, di Unix (dan untuk memungkinkan program mendapatkan hak istimewa, menggunakan setuid, setgid).

Baru-baru ini saya menemukan beberapa perintah baru, di GNU / Linux:

  • setfaclmemperpanjang ugo:rwxbit tradisional dan tbit chmod.
  • setcapmemberi lebih banyak kendali sirip-butiran daripada ug:sbit chmod.
  • chattr Mengizinkan beberapa kontrol lain (sedikit campuran) dari file.

Apakah ada yang lain?

ctrl-alt-delor
sumber
lihat juga unix.stackexchange.com/q/183994/4778 untuk detail lebih lanjut tentangchmod
ctrl-alt-delor
lihat juga unix.stackexchange.com/q/246606/4778 untuk ACL tambahan (richACLs).
ctrl-alt-delor

Jawaban:

28

chmod: ubah bit mode file

Penggunaan (mode oktal):

    chmod <octal-mode> files...

Penggunaan (mode simbolis):

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

referencesadalah kombinasi huruf-huruf ugoa, yang menentukan akses pengguna mana yang filesakan diubah:

  • u pengguna yang memilikinya
  • gpengguna lain dalam filegrup
  • o pengguna lain yang tidak ada dalam grup file
  • a semua pengguna

    Jika dihilangkan, standarnya adalah untuk semua pengguna, tetapi hanya izin yang diizinkan oleh umaskyang diubah.

    operatoradalah salah satu karakter +-=:

    • + tambahkan bit mode file yang ditentukan ke bit mode file yang ada masing-masing file
    • - menghapus bit mode file yang ditentukan ke bit mode file yang ada masing-masing file
    • =menambahkan bit yang ditentukan dan menghapus bit yang tidak ditentukan, kecuali bit setuiddan setgidditetapkan untuk direktori, kecuali ditentukan secara eksplisit.

    modeterdiri dari kombinasi huruf-huruf rwxXst, yang menentukan bit izin mana yang harus diubah:

    • r Baca
    • w menulis
    • x mengeksekusi (atau mencari direktori)
    • X mengeksekusi / mencari hanya jika file tersebut adalah direktori atau sudah menjalankan bit yang ditetapkan untuk beberapa pengguna
    • ssetuid atau setgid (tergantung yang ditentukan references)
    • t bendera penghapusan terbatas atau sedikit lengket

    Atau, modedapat terdiri dari salah satu huruf ugo, dalam hal ini mode sesuai dengan izin yang saat ini diberikan kepada pemilik ( u), anggota filegrup ( g) atau izin pengguna dalam kategori sebelumnya ( o).

Berbagai bit chmoddijelaskan:

  • Kontrol akses (lihat juga setfacl)
    • rwx - baca (r), tulis (w), dan jalankan / lintas (x) izin.
      • Baca (r) memengaruhi jika file dapat dibaca, atau jika direktori dapat dicantumkan.
      • Tulis (w) memengaruhi jika suatu file dapat ditulis ke, atau jika suatu direktori dapat diedit (file ditambahkan, dihapus, diganti namanya).
      • Execute (x) memengaruhi jika file dapat dijalankan, digunakan untuk skrip (lihat #!), dan file yang dapat dieksekusi lainnya.
      • Lintas (x) memengaruhi jika direktori dapat dilintasi.
    • sdan t- bit lengket (t), dan setgid pada direktori
      • Bit lengket hanya memengaruhi direktori. Akan mencegah siapa pun kecuali pemilik file, dan root, menghapus file di direktori.
      • bit setgid pada direktori, akan menyebabkan file dan direktori baru membuat grup diatur ke grup yang sama, dan direktori baru ada di sana setgid bit set (lihat juga default di setfacl).
    • s - setuid, setgid, pada file yang dapat dieksekusi.
      • Ini dapat memengaruhi keamanan dengan cara yang buruk, jika Anda tidak tahu apa yang Anda lakukan.
      • Ketika sebuah executable dijalankan, jika salah satu bit ini diatur, maka pengguna / grup yang efektif dari executable tersebut akan menjadi file tersebut. Dengan demikian program berjalan sebagai pengguna itu. lihat setcapcara yang lebih modern untuk melakukan ini.

chown chgrp:


chattr: ubah atribut file

Pemakaian:

    chattr <operator><attribute> files...

operatoradalah salah satu karakter +-=: * +menambahkan atribut yang dipilih ke yang ada attributesdari files * -menghapus yang dipilih attributes * =menimpa set atribut saat ini dari file dengan yang ditentukan attributes.

attributeadalah kombinasi huruf-huruf acdeijstuADST, yang sesuai dengan atribut:

  • a tambahkan saja
  • c terkompresi
  • d tidak ada dump
  • e format tingkat
  • i abadi
  • j penjurnalan data
  • s penghapusan aman
  • t tidak ada ekor-penggabungan
  • u tidak terhapus
  • Atidak ada atimepembaruan
  • D pembaruan direktori sinkron
  • S pembaruan sinkron
  • T atas hierarki direktori

setfattr: mengubah atribut file yang diperluas

Penggunaan (atur atribut):

    setfattr -n <name> -v <value> files...

Penggunaan (hapus):

    setfattr -x <name> files...

name adalah nama atribut yang diperluas untuk ditetapkan atau dihapus

value adalah nilai baru dari atribut extended


setfacl: ubah daftar kontrol akses file

Pemakaian:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option harus menyertakan salah satu dari yang berikut:

  • --set atur ACL file atau direktori, ganti ACL sebelumnya
  • -m| --modifymemodifikasi ACL file atau direktori
  • -x| --remove hapus entri ACL dari file atau direktori

    targetadalah salah satu huruf ugmo(atau formulir lebih panjang yang ditunjukkan di bawah):

  • u, usersizin dari pengguna bernama yang diidentifikasi oleh param, standar untuk pemilik file uidjika dihilangkan

  • g, groupizin dari grup bernama yang diidentifikasi oleh param, standar untuk memiliki grup uidjika dihilangkan
  • m, masktopeng hak efektif
  • o, otherizin orang lain

    permsadalah kombinasi huruf-huruf rwxX, yang sesuai dengan izin:

  • r Baca

  • w menulis
  • x menjalankan
  • X mengeksekusi hanya jika file tersebut adalah direktori atau sudah memiliki izin eksekusi untuk beberapa pengguna

    Atau, permsbisa berupa digit oktal ( 0- 7) yang menunjukkan serangkaian izin.


setcap: mengubah kemampuan file

Pemakaian:

    setcap <capability-clause> file 

A capability-clauseterdiri dari daftar nama kemampuan yang dipisahkan koma diikuti oleh daftar pasangan flag-operator.

Operator yang tersedia adalah =, +dan -. Bendera yang tersedia adalah e, idan pyang sesuai dengan set kemampuan yang Efektif , Dapat Diwariskan , dan Diizinkan .

The =Operator akan menaikkan kemampuan set yang ditentukan dan reset yang lain. Jika tidak ada bendera yang diberikan bersama dengan =operator, semua set kemampuan akan diatur ulang. The +dan -operator akan menaikkan atau menurunkan satu atau kemampuan lebih ditentukan set masing-masing.


chcon: ubah file konteks keamanan SELinux

Pemakaian:

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

pengguna adalah pengguna SELinux, seperti user_u, system_uatau root.

peran adalah peran SELinux (selalu object_runtuk file)

tipe adalah tipe subjek SELinux


chsmack: ubah atribut diperluas SMACK

Pemakaian:

    chsmack -a <value> file

valueadalah label SMACK yang akan ditetapkan untuk SMACK64atribut file yang diperluas


setrichacl : ubah daftar kontrol akses kaya.

richacl s adalah fitur yang akan menambahkan ACL lebih maju.

Saat ini sedang dalam proses, jadi saya tidak bisa memberi tahu Anda banyak tentang mereka. Saya belum menggunakannya.

Lihat juga pertanyaan ini Apakah ada ACL sistem file yang lebih maju di luar 'rwx' tradisional dan POSIX ACL? dan halaman manual

Thomas Nyman
sumber
5
+1 Jika Anda menambahkan contoh penggunaan setiap cmd, jawaban ini akan sangat berguna, karena jawaban kanonik yang kami dapat rujukan di ujung jalan!
slm
1
@slm Terima kasih atas sarannya. Saya menambahkan penjelasan penggunaan singkat untuk setiap perintah.
Thomas Nyman
Peringatan bagi siapa saja yang ingin mengambil kemampuan lebih jauh dari yang ditunjukkan di sini. Saya telah menggunakan kemampuan sebagaimana diuraikan di sini. Namun mencoba mewarisi mereka (berguna) lebih dari garpu dan exec tampaknya mustahil. Saya pikir ada bug, lihat unix.stackexchange.com/questions/196483/…
ctrl-alt-delor
Bug yang saya sebutkan di coment sebelumnya, itu adalah bug desain dan diperbaiki di kernel 4.3 dengan penambahan kemampuan ambient, lihat man7.org/linux/man-pages/man7/capabilities.7.html
ctrl-alt-delor
1
Saya ingin melihat contoh tentang ini semua ini akan menjadi jawaban kanonik!
statquant
1

dari level tinggi:

  • izin sistem file dasar yang didukung oleh semua linux dan semua sistem file yang -rwxrwxrwxditangani oleh chmod, bersama dengan pemilik dan pengidentifikasi grup yang terikat pada setiap file atau folder pada sistem file yang ditangani oleh chowndan chgrp; semua orang pada dasarnya tahu bagian ini.
  • Atribut File Diperpanjang yang disingkat atau dikenal dengan xattr . Mereka adalah fitur sistem file yang memungkinkan pengguna untuk mengaitkan file komputer dengan metadata yang tidak ditafsirkan oleh sistem file, sedangkan atribut reguler memiliki tujuan yang ditentukan secara ketat oleh sistem file; atributnya adalah nama: pasangan nilai yang dikaitkan secara permanen dengan file dan direktori, mirip dengan string lingkungan yang terkait dengan suatu proses. Ada perintah linux khusus yang terkait dengan hanya mengatur metadata ini ke berbagai file / folder.
  • SELINUX dikenal sebagai linux aman . Anda dapat mencari riwayatnya di web. Juga tahu ada alternatif untuk SELINUX seperti AppArmor, dan mungkin ada yang lain. Pada titik ini, ini adalah modul kernel yang menyediakan fungsionalitas dan mekanisme untuk melakukan MAC (kontrol akses wajib) dengan memanfaatkan xattr; selinux menyimpan label keamanan file dalam xattrs . Dan ada perintah spesifik selinux terkait.

poin penting lainnya:

  • era dan versi hal-hal gnu / linux tentang xattr dan selinux untuk apa yang tersedia dan apa yang fungsional.
  • dilaporkan tidak semua sistem file mendukung xattr; sebaiknya diserahkan pada penelitian individual berdasarkan distribusi dan versi linux yang digunakan (rhel / suse / debian, irix, solaris, aix, unix dari tahun 1960-an)
  • itu benar-benar hanya hak akses file / folder dasar dengan uid's / gid's plus xattr's yang membuat semuanya mungkin; SELinux menggunakan xattr's untuk menyimpan label keamanan file / folder ... dengan selinux semua pekerjaan kaki tingkat rendah agaknya dilakukan / didefinisikan dalam xattr bagi Anda untuk memanfaatkannya. Jadi jika sistem file kuno Anda tidak mendukung xattr, Anda tidak akan menggunakan selinux.
  • Anda dapat mengaktifkan atau menonaktifkan selinux (atau apparmor atau modul kernel lainnya)
  • tergantung pada versi linux Anda, mungkin dapat mengaktifkan atau menonaktifkan xattr untuk sistem file yang dipasang; Saya ingat di SLES 11 opsi mount fstab user_xattrdan saya bisa memilih untuk tidak memiliki xattr tersedia pada sistem file root pada waktu instalasi; saya pikir sekarang dengan RHEL / CentOS 7 bahwa xattr ada secara default dan Anda tidak bisa memilikinya.
  • ketika melakukan lsjika Anda melihat -rwxrwxrwx+itu +menunjukkan atribut file yang diperluas hadir pada objek itu .
  • Access Control List (ACL): adalah daftar izin yang dilampirkan ke objek. ACL menentukan pengguna atau proses sistem mana yang diberikan akses ke objek, serta operasi apa yang diizinkan pada objek yang diberikan.
  • from centos wiki selinux: selinux adalah mekanisme keamanan MAC yang diterapkan pada kernel; tanpa SELinux diaktifkan, hanya metode kontrol akses diskresi tradisional (DAC) seperti izin file atau daftar kontrol akses (ACL) yang digunakan untuk mengontrol akses file pengguna; Pengguna dan program sama-sama diizinkan untuk memberikan izin file tidak aman kepada orang lain atau, sebaliknya, untuk mendapatkan akses ke bagian sistem yang seharusnya tidak diperlukan untuk operasi normal; Pada dasarnya di bawah model DAC tradisional, ada dua level privilege, root dan user, dan tidak ada cara mudah untuk menegakkan model privilege paling rendah. Banyak proses yang diluncurkan oleh root kemudian menjatuhkan hak mereka untuk berjalan sebagai pengguna terbatas
  • layak dibaca untuk menempatkan penggunaan xattr dan ACL dalam perspektif, karena linux [kernel] memperlakukan semuanya sebagai file (perangkat blok atau port jaringan) Anda dapat menandai hampir semua hal dengan xattr dan menegakkan semacam kontrol akses melalui selinux, itu bukan hanya file / folder. https://wiki.centos.org/HowTos/SELinux
  • xattr dapat menyebabkan masalah dengan memindahkan data antara sistem dan sistem file, dan NFS, di mana sistem [yang lebih baru] memiliki dukungan xattr yang lebih lengkap dibandingkan sistem yang lebih lama yang mungkin tidak mengenali semua atribut yang diperluas ini [jika ada]. Berhati-hatilah dalam menggunakan tarhal-hal dengan xattr, jika tetap pada sistem itu tidak ada masalah tetapi jika pergi ke tempat lain dapat menjadi masalah jika xattr itu penting (yaitu samba dan menyalin antara win10 ntfs dan linux ext3 / 4, btrfs, xfs; atau kembali dan sebagainya antara perangkat penyimpanan yang terpasang jaringan)
  • jika tidak ada selinux atau mekanisam lain yang memberlakukan ACL dengan apa yang didefinisikan dalam xattrs, maka xattrs secara teoritis tidak dapat berarti apa-apa dan dijatuhkan atau dilucuti karena pada saat itu hanya bagasi tambahan.
  • hati-hati menonaktifkan selinux sekarang di rhel / centos 7 karena jika file sistem lables melalui xattr hilang itu akan menyebabkan masalah ketika mengubah selinux kembali ke menegakkan atau permisif ; sekali lagi itu tergantung pada versi linux Anda dan bagaimana menggunakan xattr via selinux.

Saham Samba dasar tidak berfungsi di RHEL / CentOS 7 ... karena selinux secara default diatur ke pelaksanaan; selinux menolak semuanya sampai Anda mengizinkannya menonaktifkan selinux (buruk) atau mengaturnya menjadi permisif. Jika Anda membiarkan selinux sebagai penegakan, maka Anda harus memberi label pada folder yang ingin Anda bagikan berbagi dengan atribut yang diperluas, sehingga selinux akan mengenali dan mengizinkan bagian tersebut. Jadi, jika Anda meninggalkan selinux menegakkan maka dengan semua perintah selinux (yang kemudian akan mengatur yang diperlukan xattr):

# 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

Anda selanjutnya menggunakan selinux, pada sistem linux dengan share samba ini, untuk memberlakukan pembatasan pada file / folder di bawah share samba ini (menggunakan atribut extended apa pun). Karena file / folder ini dibagikan, pengguna secara sah menyalin beberapa ke komputer win10 mereka kemudian menyalin kembali, kehilangan atribut yang diperluas. Sekarang setelah salinan bolak-balik itu, pada sistem linux selinux akan membatasi akses ke file-file tersebut karena xattr yang diperlukan tidak lagi ada, dan pengguna / admin menggedor-gedor bertanya-tanya mengapa hal-hal hanya berfungsi sekarang tidak ... mengatur selinux untuk mengizinkan dan mengenali masalah yang hilangxattr muncul di log audit tetapi itu tidak akan secara langsung menunjukkan itu adalah hasil bolak-balik copy kehilangan xattr. Juga pertimbangkan cadangan dan pemulihan data, dan pekerjaan potensial yang perlu diingatxattrs selain uid / gid jika Anda ingin menegakkan keamanan berdasarkan xattrs yang benar .

ron
sumber