Идентификатор пользователя

 Идентификатор пользователя — Администратор системы с правами ROOT

У каждого пользователя UNIX-системы есть уникальный числовой идентификатор  (user  ID,  UID).  Идентификатор  пользователя можно узнать с помощью команды id.

 

идентификатор пользователя

Reader @ hacking: ~ / bookarc $ ID reader
UID = 999 (reader) GID = 999 (reader)
groups = 999 (reader), 4 (ADM), 20 (DialOut), 24 (CD-ROM), 25 (floppy), 29 (audio),
30 (the DIP), 44 (video), 46 (plugdev), 104 (scanners), 112 (for developers), 113 (the lpadmin)
115 (powerdev), 117 (Administrator)
Reader @ hacking: ~ / booksrc matrix $ ID
UID = 500 (matrix) GID = 500 (matrix) = 500 group (matrix)
Reader @ hacking: ~ / booksrc root $ ID
ID = 0 (root) = GID of 0 (root) groups = 0 (root)
Reader @ hacking: ~ / booksrc $

 

 

 

 

 

 

 

 

 

Пользователь root с идентификатором 0 представляет собой администратора системы, обладающего полным доступом к ней. Команда su позволяет предстать перед системой другим пользователем, и если ее выполняет root, вводить пароль не нужно.

 

Команда sudo позволяет выполнить от имени root отдельную команду. На загрузочном диске команда sudo для простоты  настроена на выполнение без ввода пароля. Эти команды дают простой способ переключения между пользователями.

 

@ Reader hacking: ~ / bookarc $ Sudo su Jose
Jose @ burglary: / Home / reader / booksrc $ ID
id = 501 (Jose) = GID of 501 (Jose) groups = 501 (by Jose)
Jose @ burglary: / Home / reader / booksrc $

 

 

 

 

Пользователь jose может запустить программу simplenote, которая будет выполняться с его кодом идентификации, но у нее не будет прав доступа к файлу /tmp/notes. Единственный хозяин данного файла, это reader, и только у него есть право его чтения и записи.

 

Jose @ burglary: / Home / reader / booksrc $ Ls -l / TMP / notes

-rw ——- 1 reader 36 2007-09-07 05:20 / TMP / Notes

Jose @ burglary: / Home / reader / booksrc $ ./simplenote "note by Jose"

[DEBUG] Buffer @ 0x804a008: 'note for Jose "

[DEBUG] data file @ 0x804a070: '/ TMP / comments "

[!!] Fatal error in the main () when opening the file: Access is denied

Jose @ burglary: / Home / reader / booksrc $ cat / the TMP / comments

Cat: / TMP / notes: Access denied

Jose @ burglary: / Home / reader / booksrc $ output

Exit


Reader @ hacking: ~ / booksrc $

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Все прекрасно, если reader–единственный пользователь программы simplenote; однако очень часто нескольким пользователям требуется доступ к определенным частям одного и того же файла. Например, в файле /etc/passwd хранятся данные об учетных записях всех пользователей системы, включая информацию о том, какая оболочка запускается для каждого пользователя по умолчанию.

Команда chsh дает возможность каждому пользователю изменить свою оболочку по умолчанию. Эта программа должна внести изменения в файл /etc/passwd, но только в ту строку, которая относится к учетной записи данного пользователя. В UNIX эта проблема решается с помощью права доступа setuid (set user ID). Этот дополнительный бит в правах доступа, возможно устанавливать при помощи команд chmod. При запуске программы с этим флагом она выполняется с идентификатором пользователя, который является владельцем файла.

 

Reader @ hacking: ~ / $ booksrc, which CHSH

/ USR / bin / CHSH

Reader @ hacking: ~ / booksrc $ Ls -l / USR / bin / CHSH / etc. / password

-RW-R — r— 1 root root 1424 2007-09-06 21:05 / etc / password

-rwsr-XR-x 1 root root 23920 2006-12-19 20:35 / USR / bin / CHSH

Reader @ hacking: ~ / booksrc $

 

 

 

 

 

 

 

 

 

У программы chsh установлен флаг setuid, о чем свидетельствует символ s в правах доступа. И потому, раз хозяином файла является root и установлен  бит setuid, при запуске программы любым пользователем она будет выполняться от имени root.

 

Владельцем файла /etc/passwd, в который должна сделать запись программа chsh, также является root, и разрешение на запись предоставлено только владельцу. Программа chsh устроена так, что разрешает запись только той строки /etc/passwd, которая относится к пользователю, запустившему программу, даже если реально она выполняется от имени  root. Таким образом, у работающей программы есть обычный (действительный) ID и эффективный ID. Эти  идентификаторы  можно получить с помощью функций getuid()и geteuid()соответственно, как показано в программе uid_demo.c.

 

uid demo.c
#include <stdio.h>
Int main () {
Printf ( "real UID:% d \ n", getuid ());
Printf ( "effective user id:% d \ n", geteuid ());
}

 

Закладка Постоянная ссылка.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

This blog is kept spam free by WP-SpamFree.