Різниця між власником / root та RUID / EUID


25

Я відносно новий в поняттях, згаданих у питанні, і читання про них з різних джерел лише робить їх більш заплутаними. Отже, це я зрозумів досі:

Коли ми отримуємо дозволи для файлу, вони виглядають так:

-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin

Ми припускаємо, що користувач, user2який перебуває в групі, usersнамагається виконати file.bin. Якщо встановлений біт не встановлений, це означатиме, що і RUID, і EUID рівня file.binбули рівними UID user2. Але так як УИП біт встановлений, то це означає , що RUID тепер дорівнює до УІД user2, в той час як EUID є UID власника файлу user1.

Мої запитання:

  1. Чим відрізняється власник файлу від root? Чи rootмають ті ж дозволи, що й власник? Або нам потрібен окремий запис у списку дозволів для root?
  2. Різниця між RUID та EUID?
    • Як я розумію, RUID та EUID застосовуються лише до процесів. Якщо це так, то чому вони мають значення ідентифікаторів користувача?
    • Якщо RUID є користувачем, який створює процес, а EUID - це користувач, який зараз виконує процес, то перше речення першої відповіді в цьому питанні для мене не має сенсу.
    • Чи правильно я зрозумів, що робить біт setuid?

Відповіді:


36

Ось відповіді:

  1. rootзавжди має повний доступ до файлів і каталогів. Зазвичай власник файлу також має їх, але це не завжди так. Наприклад:

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1є власником ; однак вони можуть лише читати та виконувати , але rootвсе ще має повний доступ ( rwx ) до файлу.

  2. RUID - це справжній ідентифікатор користувача, і він ніколи (майже) не змінюється. Якщо ви user2входите в систему, оболонка запускається із встановленим реальним ідентифікатором user2. Усі процеси, які вони починаються з оболонки, успадкують реальний ідентифікатор user2як їх реальний ідентифікатор.

    EUID - це ефективний ідентифікатор користувача , він змінюється для процесів (не для користувача), які виконує користувач, який встановив встановлений біт .

    Якщо user2виконується file.bin, RUID буде, user2і EUID розпочатого процесу буде user1.

Давайте скористаємось випадком passwd:

-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
  • Коли user2хоче змінити свій пароль , вони виконують /usr/bin/passwd.

  • RUID буде, user2але EUID цього процесу буде root.

  • user2може використовувати passwdдля зміни лише свого власного пароля, оскільки внутрішньо passwdперевіряє RUID, а якщо його немає root, його дії будуть обмежені паролем реального користувача.

  • Необхідно, щоб ЄСІД ставав rootу тому випадку, passwdоскільки процес потрібно писати на /etc/passwdта / або /etc/shadow.


Дякую! Тепер все зрозуміліше. У мене є ще одне питання. EUID змінюється лише тоді, коли користувач виконує процес, у якому встановлено встановлений біт? Або це може змінитися і в іншій ситуації? І якщо так, то яка ситуація?
користувач1956190

1
Я думаю, що немає іншого способу, ніж виконання процесів, у яких встановлено setuidбіт.
jcbermu

3
Процес, який запускається з програми «setuid» (тобто процес, який має ефективний UID ≠ Real UID), може повернути EUID до RUID. У деяких випадках він може перемикати EUID вперед і назад між початковим значенням (тобто власником програмного файлу) та RUID. Крім того, вона може бути спроможна встановити свій RUID рівним його EUID. … (Продовження)
Скотт

2
(Продовження) ... Привілейовані процеси (ті з EUID = 0, інакше root) можна встановити EUID і RUID на довільні значення (наприклад, login, su, і sudoпрограми роблять це). Як правило, коли привілейований процес змінює свої UID на ненульові значення, він більше не привілейований і не може стати rootзнову. Див. Параметри налаштованих сторінок (2) , seteuid (2) та setreuid (2) .
Скотт

1
(Продовжував) ... Це було введено як хак для вирішення однієї проблеми, яка згодом була вирішена ширшим способом. Можливо, його видалили з Linux за винятком того факту, що таке обрізання порушить програми, які його використовують. Майкл Керріск, автор програми «Інтерфейс програмування Linux» , каже, що у своїй версії чоловічої сторінки setfsuid (2) « setfsuid()в даний час немає необхідності і її слід уникати в нових програмах».
Скотт,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.