Perintah 'chmod g + s'

45

Halo, saya ingin memahami peran chmod g+sperintah di Unix.

Saya juga ingin tahu apa fungsinya dalam konteks khusus ini:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Saya mengerti semua peran perintah kecuali untuk chmod g+sdan saya ingin tahu perbedaan antara file undan deuxhasil dari serangkaian perintah ini.

otus
sumber

Jawaban:

61
chmod g+s .;

Perintah ini menetapkan ID grup (setgid) pada direktori saat ini, ditulis sebagai ..

Ini berarti bahwa semua baru file dan subdirektori dibuat dalam direktori saat ini mewarisi ID sekelompok direktori, daripada kelompok ID utama dari pengguna yang menciptakan file. Ini juga akan diteruskan ke subdirektori baru yang dibuat di direktori saat ini.

g+s memengaruhi ID grup file tetapi tidak memengaruhi ID pemilik.

Perhatikan bahwa ini hanya berlaku untuk file yang baru dibuat . File yang dipindahkan ( mv) ke direktori tidak terpengaruh oleh pengaturan setgid. File yang disalin cp -pjuga tidak terpengaruh.

Contoh

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Dalam hal ini, deuxakan menjadi milik grup canardtetapi unakan menjadi milik grup pengguna yang membuatnya, apa pun itu.

Catatan Kecil tentang Penggunaan Titik Koma di Perintah Shell

Tidak seperti catau perl, perintah shell hanya perlu diikuti oleh tanda titik koma jika ada perintah shell lain yang mengikutinya pada baris perintah yang sama . Jadi, pertimbangkan baris perintah berikut:

chgrp canard .; chmod g+s .;

Titik koma akhir adalah berlebihan dan dapat dihapus:

chgrp canard .; chmod g+s .

Lebih lanjut, jika kita menempatkan dua perintah pada baris yang terpisah, maka titik koma yang tersisa tidak diperlukan:

chgrp canard .
chmod g+s .
John1024
sumber
1
File yang disalin (misalnya oleh cp) sebenarnya baru dibuat. Jika mereka tidak mewarisi izin grup, program penyalinan memainkan permainan, seperti menyalin ke file sementara dan kemudian memindahkannya ke direktori target.
Kaz
1
@ Kas Poin bagus. Saya memperbarui jawaban untuk mengklarifikasi bahwa cp -pyang mengesampingkan pengaturan setgid.
John1024
Tetapi apakah cp -pmenimpa pengaturan setgid? Pada setiap implementasi Unix yang ada? POSIX mengatakan bahwa itu tidak ditentukan apakah kegagalan untuk menyalin ID pengguna atau ID grup di bawah cp -p menghasilkan pesan diagnostik! Namun, bit S_SUID dan S_SGID, masing-masing, harus dibersihkan dalam situasi itu (yaitu jika file adalah setuid bob, tetapi kepemilikan bob tidak dapat disalin sehingga file tersebut dimiliki oleh janet, jangan membuatnya setuid janet.)
Kaz 4-15
"Apakah cp -pmengesampingkan pengaturan setgid?" Menurut spec POSIX, itulah yang seharusnya dilakukan. Ia melakukannya pada semua sistem Unix yang telah saya gunakan. Anda telah mengutip bagian dari spesifikasi mengenai apa yang harus dilakukan untuk melindungi keamanan dalam kasus ketika ID grup tidak dapat diduplikasi. Saya tidak pernah mengalami situasi "tidak bisa" seperti itu, bukan?
John1024
7

Anda dapat mengubah izin file dengan perintah chmod. Di Unix, izin file, yang menetapkan siapa yang mungkin memiliki berbagai jenis akses ke file, ditentukan oleh kelas akses dan tipe akses. Kelas akses adalah kelompok pengguna, dan masing-masing dapat diberikan jenis akses khusus

Unix / Linux memiliki pengguna dan grup pengguna yang dapat ditugaskan untuk akses file

opsi g + s adalah sebagai berikut:

g - izin yang dimiliki pengguna lain dalam grup file untuk itu

s - mengatur ID pengguna atau grup pada eksekusi

di sini adalah contoh penggunaan:

chmod =rwx,g+s filename

(izinkan semua orang membaca, menulis, dan mengeksekusi file tertentu dan mengaktifkan ID grup yang ditetapkan)

Untuk mengatur / memodifikasi izin file, Anda perlu menggunakan program chmod. Tentu saja, hanya pemilik file yang dapat menggunakan chmod untuk mengubah izin file. chmod memiliki sintaks berikut: chmod [options] file mode (s) Bagian 'mode' menentukan izin baru untuk file yang mengikuti sebagai argumen. Mode A menentukan izin pengguna mana yang harus diubah, dan setelah itu tipe akses mana yang harus diubah. Katakanlah misalnya: chmod ax socktest.pl

Ini berarti bahwa bit eksekusi harus dihapus (-) untuk semua pengguna. (pemilik, grup, dan seluruh dunia) Izin dimulai dengan surat yang menentukan pengguna mana yang akan terpengaruh oleh perubahan, ini mungkin salah satu dari yang berikut:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

Ini diikuti oleh instruksi perubahan yang terdiri dari + (set bit) atau - (bit jelas) dan huruf yang sesuai dengan bit yang harus diubah. Mari kita lihat beberapa contoh:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

Nomor aneh ... Anda mungkin pernah mengalami hal-hal seperti chmod 755 file dan tentu saja Anda akan bertanya-tanya apa ini. Masalahnya adalah, Anda dapat mengubah seluruh pola izin file dalam sekali pakai menggunakan satu nomor seperti yang ada dalam contoh ini. Setiap mode memiliki nomor kode yang sesuai, dan seperti yang akan kita lihat ada cara yang sangat sederhana untuk mencari tahu nomor apa yang sesuai dengan mode apa pun. Setiap satu dari tiga digit pada nomor mode sesuai dengan salah satu dari tiga kembar tiga izin. (u, g dan o) Setiap bit izin dalam triplet sesuai dengan nilai: 4 untuk r, 2 untuk w, 1 untuk x. Jika izin Anda tambahkan nilai ini ke jumlah triplet izin. Jika sudah dihapus, maka Anda tidak menambahkan apa pun. (Beberapa dari Anda mungkin memperhatikan bahwa sebenarnya,

Triplet untuk Anda: rwx => 4 + 2 + 1 = 7

Triplet untuk g: r-x => 4 + 0 + 1 = 5

Triplet untuk o: r-x => 4 + 0 + 1 = 5

Yang membuat : 755

Jadi, 755 adalah cara singkat untuk mengatakan 'Saya tidak keberatan jika orang lain membaca atau menjalankan file ini, tetapi hanya saya yang dapat memodifikasinya' dan 777 berarti 'setiap orang memiliki akses penuh ke file ini'

referensi cacat

paralaksis
sumber
0

Hasil perintah ls akan bergantung pada umask.

g + s akan mengatur sgid ke file. Periksa di sini untuk informasi lebih lanjut tentang SUID SGID

jadi jika umask Anda misalnya adalah 022 hasilnya akan seperti:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un
Romeo Ninov
sumber
0

Di Linux salah satu opsi pemasangan default untuk ext? fs adalah 'nogrpid | sysvgroups '. Jadi sentuhan pertama un, membuat file dengan id grup sama dengan fsgid dari proses pembuatan di mana fsgid = egid.

chmod g + s., membuat selanjutnya file / dir pembuatan mewarisi grup id dari folder induk dan jika hal yang dibuat adalah dir itu juga mendapat g + s ditetapkan sebagai induknya.

Di sini sentuh deux, buat deux, dengan canard grup.

Semantik berubah jika opsi mount adalah 'grpid | bsdgroups 'dalam kasus itu, pembuatan file / dir baru akan mewarisi id grup dari folder induknya bahkan tanpa mengatur g + s untuk induk itu sendiri.

Nizam Mohamed
sumber