GNU/Linux >> Belajar Linux >  >> Linux

Izin File Khusus di Linux:SUID, GUID, dan Sticky Bit

Izin dan kepemilikan file adalah konsep keamanan dasar dan penting di Linux. Anda mungkin sudah familiar dengan istilah-istilah ini. Biasanya terlihat seperti ini:

Terlepas dari izin biasa ini, ada beberapa izin file khusus dan tidak banyak pengguna Linux yang menyadarinya.

Untuk mulai berbicara tentang izin khusus, saya akan menganggap Anda memiliki pengetahuan tentang izin file dasar. Jika tidak, silakan baca panduan luar biasa kami yang menjelaskan izin file Linux.

Sekarang saya akan menunjukkan kepada Anda beberapa izin khusus dengan huruf baru pada sistem file Linux.

Dalam contoh ini, perintah passwd, yang bertanggung jawab untuk mengubah kata sandi pengguna, memiliki huruf s di tempat yang sama kita berharap untuk melihat x atau - , untuk izin pengguna. Penting untuk diperhatikan bahwa file ini milik pengguna root dan grup root.

Dengan izin ini Anda tidak perlu memberikan sudo akses ke pengguna tertentu saat Anda ingin dia menjalankan beberapa skrip root.

Apa itu SUID?

Bila bit SUID disetel pada file yang dapat dieksekusi, ini berarti file tersebut akan dieksekusi dengan izin yang sama dengan pemilik file yang dapat dieksekusi.

Mari kita ambil contoh praktis. Jika Anda melihat file biner yang dapat dieksekusi dari perintah passwd, ia memiliki bit SUID yang disetel.

linuxhandbook:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59640 Mar 22  2019 /usr/bin/passwd

Ini berarti bahwa setiap pengguna yang menjalankan perintah passwd akan menjalankannya dengan izin yang sama seperti root.

Apa manfaatnya? Perintah passwd perlu mengedit file seperti /etc/passwd, /etc/shadow untuk mengubah kata sandi. File-file ini dimiliki oleh root dan hanya dapat dimodifikasi oleh root. Namun berkat flag setuid (bit SUID), pengguna biasa juga dapat memodifikasi file-file ini (yang dimiliki oleh root) dan mengubah kata sandinya.

Inilah alasan mengapa Anda dapat menggunakan perintah passwd untuk mengubah kata sandi Anda sendiri meskipun fakta bahwa file yang dimodifikasi oleh perintah ini dimiliki oleh root.

Mengapa pengguna biasa tidak dapat mengubah sandi pengguna lain?

Perhatikan bahwa pengguna biasa tidak dapat mengubah kata sandi untuk pengguna lain, hanya untuk dirinya sendiri. Tapi kenapa? Jika Anda dapat menjalankan perintah passwd sebagai pengguna biasa dengan izin yang sama seperti root dan memodifikasi file seperti /etc/passwd, mengapa Anda tidak dapat mengubah kata sandi pengguna lain?

Jika Anda memeriksa kode untuk perintah passwd, Anda akan menemukan bahwa kode tersebut memeriksa UID pengguna yang kata sandinya sedang dimodifikasi dengan UID pengguna yang menjalankan perintah. Jika tidak cocok dan jika perintah tidak dijalankan oleh root, itu akan menimbulkan kesalahan.

Konsep setuid/SUID rumit dan harus digunakan dengan sangat hati-hati jika tidak, Anda akan meninggalkan celah keamanan di sistem Anda. Ini adalah konsep keamanan yang penting dan banyak perintah (seperti perintah ping) dan program (seperti sudo) menggunakannya.

Sekarang setelah Anda memahami konsep SUID, mari kita lihat cara menyetel bit SUID.

Bagaimana cara menyetel bit SUID?

Saya menemukan cara simbolis lebih mudah saat mengatur bit SUID. Anda dapat menggunakan perintah chmod dengan cara ini:

chmod u+s file_name

Ini contohnya:

linuxhandbook:~$ ls -l test.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt
linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

Anda juga dapat menggunakan cara numerik. Anda hanya perlu menambahkan digit keempat ke izin normal. Angka oktal yang digunakan untuk menyetel SUID selalu 4.

linuxhandbook:~$ ls -l test2.txt
-rwxrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:53 test2.txt
linuxhandbook:~$ chmod 4766 test2.txt
linuxhandbook:~$ ls -l test2.txt
-rwsrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:54 test2.txt

Bagaimana cara menghapus SUID?

Anda dapat menggunakan salah satu mode simbolik dalam perintah chmod seperti ini:

chmod u-s test.txt

Atau, gunakan cara numerik dengan 0 alih-alih 4 dengan izin yang ingin Anda atur:

chmod 0766 test2.txt

Perbedaan antara s kecil dan S kapital sebagai bit SUID

Ingat definisi SUID? Ini memungkinkan file untuk dieksekusi dengan izin yang sama dengan pemilik file.

Tetapi bagaimana jika file tersebut tidak memiliki bit yang dieksekusi sejak awal? Seperti ini:

linuxhandbook:~$ ls -l test.txt
-rw-rw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:51 test.txt

Jika Anda mengatur bit SUID, itu akan menunjukkan huruf besar S, bukan s kecil:

linuxhandbook:~$ chmod u+s test.txt
linuxhandbook:~$ ls -l test.txt
-rwSrw-rw- 1 linuxhandbook linuxhandbook 0 Apr 12 17:52 test.txt

Bendera S as SUID berarti ada kesalahan yang harus Anda perhatikan. Anda ingin file dieksekusi dengan izin yang sama dengan pemiliknya tetapi tidak ada izin yang dapat dieksekusi pada file tersebut. Artinya, bahkan pemilik tidak diizinkan untuk mengeksekusi file dan jika file tidak dapat dieksekusi, Anda tidak akan mendapatkan izin sebagai pemilik. Ini gagal seluruh titik pengaturan bit SUID.

Bagaimana cara menemukan semua file dengan kumpulan SUID?

Jika Anda ingin mencari file dengan izin ini, gunakan perintah find di terminal dengan opsi -perm.

find / -perm /4000

Apa itu SGID?

SGID mirip dengan SUID. Dengan set bit SGID, setiap pengguna yang menjalankan file akan memiliki izin yang sama dengan pemilik grup file tersebut.

Manfaatnya adalah dalam menangani direktori. Ketika izin SGID diterapkan ke sebuah direktori, semua sub direktori dan file yang dibuat di dalam direktori ini akan mendapatkan kepemilikan grup yang sama dengan direktori utama (bukan kepemilikan grup dari pengguna yang membuat file dan direktori).

Buka terminal Anda dan periksa izin pada file /var/local:

linuxhandbook:~$ ls -ld /var/local
drwxrwsr-x 1 root staff 512 Apr 24  2018 /var/local

Folder /var/local ini memiliki huruf 's' di tempat yang sama yang Anda harapkan untuk melihat 'x' atau '-' untuk izin grup.

Contoh praktis SGID adalah dengan server Samba untuk berbagi file di jaringan lokal Anda. Dijamin semua file baru tidak akan kehilangan izin yang diinginkan, tidak peduli siapa yang membuatnya.

Bagaimana cara menyetel SGID?

Anda dapat mengatur bit SGID dalam mode simbolik seperti ini:

chmod g+s directory_name

Ini contohnya:

linuxhandbook:~$ ls -ld folder/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/
linuxhandbook:~$ chmod g+s folder
linuxhandbook:~$ ls -ld folder/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:32 folder/

Anda juga dapat menggunakan cara numerik. Anda hanya perlu menambahkan digit keempat ke izin normal. Angka oktal yang digunakan untuk SGID selalu 2.

linuxhandbook:~$ ls -ld folder2/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/
linuxhandbook:~$ chmod 2775 folder2
linuxhandbook:~$ ls -ld folder2/
drwxrwsr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:33 folder2/

Bagaimana cara menghapus bit SGID?

Cukup gunakan -s alih-alih +s seperti ini:

chmod g-s folder

Menghapus SGID sama dengan menghapus SGID. Gunakan 0 tambahan sebelum izin yang ingin Anda atur:

chmod 0755 folder

Cara menemukan file dengan set SGID di Linux

Untuk menemukan semua file dengan bit set SGID, gunakan perintah ini:

find . -perm /2000

Apa itu Bit Lengket?

Bit lengket bekerja di direktori. Dengan sticky bit yang disetel pada direktori, semua file dalam direktori hanya dapat dihapus atau diganti namanya oleh pemilik file saja atau root.

Ini biasanya digunakan di direktori /tmp yang berfungsi sebagai tempat sampah file-file sementara.

linuxhandbook:~$ ls -ld /tmp
drwxrwxrwt 1 root root 512 Apr 12 13:24 /tmp

Seperti yang Anda lihat, folder /tmp, memiliki huruf t di tempat yang sama kami berharap untuk melihat x atau untuk izin orang lain. Ini berarti bahwa pengguna (kecuali root) tidak dapat menghapus file sementara yang dibuat oleh pengguna lain di direktori /tmp.

Bagaimana cara menyetel sticky bit?

Seperti biasa, Anda dapat menggunakan mode simbolik dan numerik untuk menyetel bit lengket di Linux.

chmod +t my_dir

Ini contohnya:

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/
linuxhandbook:~$ chmod +t my_dir/
linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:54 my_dir/

Cara numerik adalah dengan menambahkan digit keempat ke izin normal. Angka oktal yang digunakan untuk sticky bit selalu 1.

linuxhandbook:~$ ls -ld my_dir/
drwxrwxr-x 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/
linuxhandbook:~$ chmod 1775 tmp2/
linuxhandbook:~$ ls -ld tmp2/
drwxrwxr-t 2 linuxhandbook linuxhandbook 4096 Apr 12 19:55 my_dir/

Cara menghapus bit yang lengket:

Anda dapat menggunakan mode simbolis:

chmod -t my_dir

Atau mode numerik dengan 0 sebelum izin biasa:

chmod 0775 tmp2

Cara menemukan file dengan set bit lengket di Linux

Perintah ini akan mengembalikan semua file/direktori dengan sticky bit set:

linuxhandbook:~$ find . -perm /1000

Jika direktori tidak memiliki izin eksekusi yang ditetapkan untuk semua, menyetel bit yang lengket akan menghasilkan tampilan T alih-alih t. Indikasi bahwa segala sesuatunya tidak sepenuhnya benar dengan sticky bit.

Kesimpulan

Saya akan meletakkan gambar ini di sini untuk mengingat apa yang baru saja Anda pelajari:

Fleksibilitas untuk mengelola folder, file, dan semua izinnya sangat penting dalam pekerjaan sehari-hari seorang sysadmin. Anda dapat melihat bahwa semua izin khusus tersebut tidak terlalu sulit untuk dipahami tetapi harus digunakan dengan sangat hati-hati.

Saya harap artikel ini memberi Anda pemahaman yang baik tentang SUID, GUID dan Sticky Bit di Linux. Jika Anda memiliki pertanyaan atau saran, silakan tinggalkan komentar di bawah.


Linux
  1. Cara Menemukan File Dengan Izin SUID dan SGID di Linux

  2. Cara Menyalin Izin dan Kepemilikan File ke File Lain di Linux

  3. Dasar-dasar Izin File Linux

  1. Izin Linux:Pengantar chmod

  2. Izin Linux:SUID, SGID, dan sticky bit

  3. Linux chmod and chown – Cara Mengubah Izin dan Kepemilikan File di Linux

  1. Apa itu Sticky Bit, SUID dan SGID di Linux

  2. Linux – Memahami Izin Unix Dan Jenis File?

  3. Izin File Dan Menyimpan?