Я додав користувача до групи, але групові дозволи на файли все ще не мають ефекту


17

Я змінив дозволи файлу ( chmod g+w testfile) і запуск ls -l testfileдає:

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

Потім я додав користувача до цієї групи (" / etc / group " має user1:x:1000:user2рядок), але не можу редагувати цей файл як user2. Чому це так?


Відповіді:


28

user2 потрібно вийти з системи та знову ввійти. Групові дозволи працюють таким чином:

  • Коли ви входите в систему, ваші процеси отримують членство у вашій основній групі, про яке йдеться /etc/passwd, а також усі групи, в яких згадується ваш користувач /etc/group. (Більш точно, pw_gidполе getpw(your_uid), плюс все групи яких ваш користувач є явним членом . За /etc/passwdі /etc/group, інформація може надходити з інших видів користувальницьких баз даних , таких як NIS або LDAP.) Основна група стає процесом в ефективний ідентифікатор групи а інші групи стають її додатковими ідентифікаторами групи .
  • Коли процес виконує операцію, яка вимагає членства в певній групі, наприклад, доступ до файлу , ця група повинна бути або ефективним ідентифікатором групи, або одним із додаткових ідентифікаторів групи процесу.

Як бачимо, ваша зміна членства в групі користувача набирає чинності лише тоді, коли користувач увійде в систему. Для запущених процесів уже пізно. Таким чином, користувачеві потрібно вийти та знову увійти. Якщо це занадто багато проблем, він може увійти в окремий сеанс (наприклад, на іншій консолі чи за допомогою ssh localhost).

Під кришкою процес може втрачати лише будь-коли привілеї (ідентифікатори користувачів, ідентифікатори групи, можливості). Ядро запускає initпроцес (перший процес після завантаження), виконуючись як корінь, і кожен процес в кінцевому рахунку походить від цього процесу¹. loginПроцес (або sshd, або частина вашого робочого столу менеджера , який реєструє вас) все ще працює як корінь. Частина його роботи - скинути кореневі привілеї та перейти на належного користувача та групи.

Є один єдиний виняток: виконання встановленої програми або setgid програми. Ця програма отримує додаткові дозволи: вона може вибрати, щоб діяти під різними підмножинами членства батьківського процесу плюс додаткове членство в користувачеві або групі, яка належить виконуваному файлу setxid. Зокрема, встановлена ​​коренева програма має кореневі дозволи, отже, може робити все²; ось як програми люблять suі sudoможуть виконувати свою роботу.

Ly Іноді трапляються процеси, які не виводяться з init (initrd, udev), але принцип той же: почати з root і втратити привілеї з часом.
² Обмеження багаторівневих систем безпеки, таких як SELinux.


1
Зауважте, що якщо ви користуєтесь графічним інтерфейсом настільних ПК, просто вийти з системи та повернутися до вікна терміналу не скине членство в групі. У мене була ця проблема, і мені також потрібно вийти з сеансу GUI: þ
user394

3
@ user394 Вихід із системи та повернення до неї скидає членство в групі. Якщо ви просто закриєте вікно терміналу, ви не виходите з системи.
Жил 'ТАК - перестань бути злим'

10

Можливо, вам доведеться вийти з користувача2 і знову ввійти (або просто спробувати ввійти, щоб створити новий сеанс входу). Перевірте вихід, id --groupsщоб показати числові ідентифікатори групи.


1

sudo su $(whoami)

По суті такий самий спосіб вирішення, що і ssh localhost, але застосований без встановлення ssh-сервера.

Поки у вас є корінь. Але якщо ви щойно додали нову групу та змінили дозволи, ви, ймовірно, зробите.


Хоча це набагато менш інформаційно повний відповідь, ніж прийнятий, іноді ви хочете знати, як побудувати годинник, а іноді просто хочеться знати, який саме час. Ця відповідь допомогла мені з хитрістю, яке може спрацювати до наступного виходу з системи та повернення. Дякую.
Бенджамін Статон

0

Існує випадок, коли вихід користувача не допомагає - якщо ви використовуєте директиву ControlMaster ssh для хоста. Якщо ви додасте свій обліковий запис до групи, виходу з системи та входу знову в межах того ж підключення ControlMaster, сеанс все одно не відображатиметься без нового членства. Вам доведеться насильно розірвати зв’язок Майстра

ssh -O exit hostname

перш ніж знову увійти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.