Kami hanya ingin menambahkan beberapa poin untuk mengklarifikasi pendekatan bekerja dengan cara numerik untuk file dan direktori.
- Menambahkan izin khusus individu untuk pengguna/grup/lainnya.
chmod "X"755 file
Di mana X adalah mode numerik oktal khusus untuk izin khusus.
- Jika Anda ingin menambahkan beberapa izin khusus sekaligus, mis. untuk suid(4) dan sgid(2) yaitu 4+2=6 .
chmod "6"755 file
untuk suid(4), sgid(2) dan sticky bit(1), yaitu 4+2+1=7
chmod "7"755 file
- Menghapus semua izin khusus (hanya berlaku untuk file)
chmod 00"0"755 file
Ya, angka nol di belakang sebelum 4 digit tidak menambahkan nilai apa pun saat mengubah izin untuk file tetapi menambah nilai saat mengubah izin untuk direktori.
Kode numerik di atas akan mengubah izin menjadi 755 dari 7755 hanya untuk sebuah file tetapi jika Anda melakukan hal yang sama untuk sebuah direktori, itu akan menjadi 6755 karena hanya akan menghapus bit lengket untuk yang lain.
Untuk menghapus semua izin khusus untuk direktori.
chmod "000"755 file
- Demikian pula, untuk menghapus izin suid dan memiliki sgid(2) dan sticky bit(1) yaitu 2+1=3 .
chmod 00"3"755 file
Dan solusi menggunakan huruf(r,w,x,X,s,,t) dan operator(+/-) sudah dibahas dan disetujui di jawaban sebelumnya.
Mengenai:"Anda dapat mengatur (tetapi tidak menghapus) bit dengan mode numerik"
Pada RHEL 7 chmod 0644 $filename tidak menghapus setuid(4),setgid(2) atau sticky(1).
Namun mendahului dengan tambahan 0 berhasil:
chmod 00644 $filename
Ubah +
untuk menambahkan izin ke dalam -
untuk menghapusnya:
sudo chmod g-s filename
Jika Anda ingin melakukan ini secara terprogram, Anda harus menggunakan beberapa operator bitwise. Biasanya itu
mode_without_suid = bitwise_and(existing_mode, bitwise_not(S_ISUID))
di mana S_ISUID
adalah 0o4000, sebuah konstanta yang menggunakan bit mode di atas rwx
biasa salah satu dari sesuatu seperti 0644
.
Misalnya, dengan python
import os
import stat
def mode_details(m):
return f"mode={oct(m)} = {stat.filemode(m)}"
mode = os.stat('foo').st_mode
print("old mode", mode_details(mode))
new_mode = mode & ~stat.S_ISUID
os.chmod('foo', new_mode)
print("new mode", mode_details(new_mode))
yang mencetak
old mode mode=0o104654 = -rwSr-xr--
new mode mode=0o100654 = -rw-r-xr--
Untuk menghapus setgid dengan cara numerik perintahnya adalah
sudo chmod 0664 $namafile
Asumsinya di sini adalah izin pada file adalah 664 dan kami tidak mengubahnya. Bit paling kiri pada perintah di atas mewakili setuid(4 ),setgid(2 ) dan lengket(1 ). Sekarang untuk mewakili setuid simbolis ini adalah u+s , setgid adalah g+s dan sticky adalah o+t
Contoh 1:-chmod u+s filenameIni akan mengatur untuk nama file yang disebutkan yaitu rws r_xr_x
Contoh 2:chmod 2770 directoryIni akan menyetel gid untuk direktori yang disebutkan yaitu rwxr_s r_x