Saya menambahkan pengguna ke grup, tetapi izin grup pada file masih tidak berpengaruh

17

Saya mengubah izin file ( chmod g+w testfile) dan menjalankan ls -l testfilememberi:

-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile

Saya kemudian menambahkan pengguna ke grup itu (" / etc / group " memiliki user1:x:1000:user2baris), tetapi saya gagal mengedit file itu sebagai user2. Kenapa begitu?

tepang
sumber
Lihat juga: unix.stackexchange.com/questions/18796/…
Stéphane Gimenez

Jawaban:

28

user2 perlu keluar dan kembali. Izin grup bekerja dengan cara ini:

  • Saat Anda masuk, proses Anda dapat memiliki keanggotaan grup di grup utama yang Anda sebutkan /etc/passwd, ditambah semua grup tempat pengguna Anda disebutkan /etc/group. (Lebih tepatnya, pw_gidbidang dalam getpw(your_uid), ditambah semua grup yang pengguna Anda anggotanya eksplisit . Di luar /etc/passwddan /etc/group, informasi dapat berasal dari jenis lain dari basis data pengguna seperti NIS atau LDAP.) Grup utama menjadi ID grup proses yang efektif dan grup lain menjadi ID grup pelengkap .
  • Ketika suatu proses melakukan operasi yang memerlukan keanggotaan dalam grup tertentu, seperti mengakses file , grup itu harus berupa ID grup yang efektif atau salah satu ID grup tambahan dari proses tersebut.

Seperti yang Anda lihat, perubahan Anda ke keanggotaan grup pengguna hanya berlaku ketika pengguna masuk. Untuk menjalankan proses, sudah terlambat. Jadi pengguna harus keluar dan kembali. Jika terlalu banyak masalah, pengguna dapat masuk ke sesi terpisah (misalnya pada konsol yang berbeda, atau dengan ssh localhost).

Di bawah tenda, suatu proses hanya bisa kehilangan hak istimewa (ID pengguna, ID grup, kemampuan). Kernel memulai initproses (proses pertama setelah boot) berjalan sebagai root, dan setiap proses pada akhirnya diturunkan dari proses tersebut¹. The loginproses (atau sshd, atau bagian dari desktop manager Anda yang log Anda dalam) masih berjalan sebagai root. Bagian dari tugasnya adalah untuk menghapus hak akses root dan beralih ke pengguna dan grup yang tepat.

Ada satu pengecualian: menjalankan program setuid atau setgid . Program itu menerima izin tambahan: ia dapat memilih untuk bertindak di bawah berbagai subset keanggotaan proses induk ditambah keanggotaan tambahan dalam pengguna atau grup yang memiliki setxid yang dapat dieksekusi. Secara khusus, program root setuid memiliki izin root, karenanya dapat melakukan segalanya²; ini adalah bagaimana program suka sudan sudodapat melakukan pekerjaan mereka.

¹ Kadang-kadang ada proses yang tidak berasal dari init (initrd, udev) tetapi prinsipnya sama: mulai sebagai root dan kehilangan hak istimewa dari waktu ke waktu.
² Cegah kerangka kerja keamanan bertingkat seperti SELinux.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Perhatikan bahwa jika Anda menggunakan GUI desktop, cukup logout dan kembali ke jendela terminal tidak akan mengatur ulang keanggotaan grup. Saya punya masalah ini dan saya harus keluar dari sesi GUI saya juga: þ
user394
3
@ user394 Keluar dan masuk lagi tidak mengatur ulang keanggotaan grup. Jika Anda hanya menutup jendela terminal, Anda tidak keluar.
Gilles 'SANGAT berhenti menjadi jahat'
10

Anda mungkin perlu meminta pengguna2 logout dan kembali (atau coba saja ssh'ing untuk membuat sesi login baru). Periksa output id --groupsuntuk menampilkan id grup numerik untuk pengguna.

jsbillings
sumber
1

sudo su $(whoami)

Pada dasarnya solusi yang sama seperti ssh localhost, tetapi dapat digunakan tanpa server ssh diinstal.

Selama Anda memiliki root. Tetapi jika Anda baru saja menambahkan grup baru & mengubah izin, kemungkinan Anda akan melakukannya.

RGD2
sumber
Meskipun ini adalah jawaban yang jauh lebih lengkap daripada informasi yang diterima, kadang-kadang Anda ingin tahu cara membuat jam, dan kadang-kadang Anda hanya ingin tahu jam berapa sekarang. Jawaban ini membantu saya dengan trik yang dapat bekerja sampai saya logout dan kembali lagi. Terima kasih.
Benjamin Staton
0

Ada kasus ketika pengguna logout tidak membantu - jika Anda menggunakan direktif ssh ControlMaster untuk host. Jika Anda menambahkan akun Anda ke grup, keluar dan masuk lagi dalam koneksi ControlMaster yang sama, sesi masih akan menunjukkan Anda tidak ada keanggotaan baru. Anda harus memutuskan koneksi Master dengan paksa

ssh -O exit hostname

sebelum masuk lagi.

Tagwint
sumber