как процесс в Linux решает, какие привилегии ему выделены - PullRequest
2 голосов
/ 10 июня 2011

Я хочу знать, как процесс в Linux решает, какими привилегиями он обладает?Предположим, что есть двоичная программа Read_File, которая читает из файла /home/myname/data.txt и отображает его содержимое на вывод STD, теперь как Read_File решает, имеет ли он разрешение на чтение data.txt, какой тип идентификаторовэто проверяет, чтобы определить привилегии?

Ответы [ 2 ]

6 голосов
/ 10 июня 2011

Сначала немного фона:

Процесс обычно запускается конкретным пользователем.Например, если вы вошли в систему и запустили программу, она будет работать с теми же привилегиями, что и вы.Вы можете проверить разрешения для файла с помощью stat или ls -l.

Используя stat

malbert@dredg:/tmp$ stat foo
  File: `foo'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fb00h/64256d    Inode: 618         Links: 1
Access: (0644/-rw-r--r--)  Uid: (11204/ malbert)   Gid: (10513/domain users)
Access: 2011-06-10 13:03:27.181227226 +0200
Modify: 2011-06-10 13:03:27.181227226 +0200
Change: 2011-06-10 13:03:27.181227226 +0200

Важная информация здесь:

Access: (0644/-rw-r--r--)  Uid: (11204/ malbert)   Gid: (10513/domain users)

Здесь указываются разрешения для владельца (rw-), группы (r--) и всех остальных (r--).Он также показывает текущий идентификатор владельца (Uid) и идентификатор текущей группы (Gid).

Сокращения означают:

  • r = доступ для чтения
  • w = доступ на запись
  • x = выполнение / перемещение к каталогу

Использование ls -l

ls -l даетвам краткое резюме:

malbert@dredg:/tmp$ ls -l /tmp
total 48
drwx------ 2 malbert domain users 4096 2011-06-10 08:51 akonadi-malbert.zOSngu
-rw-r--r-- 1 malbert domain users    0 2011-06-10 13:03 foo
drwx------ 2 kdm     nogroup      4096 2011-06-10 08:51 kde-kdm
drwx------ 3 malbert domain users 4096 2011-06-10 08:51 kde-malbert
[snip]

Здесь вы можете увидеть ту же информацию, что и с stat, но в виде резюме.Кроме того, uid и gid разрешаются в имена (в данном случае malbert и domain users).Вы можете использовать ls -u, чтобы видеть их как числовые значения.

Если вы хотите запускать приложение как другой пользователь от своего имени, вы можете использовать su, sudo или само ваше приложение может удалить привилегии и изменить пользователя, от имени которого оно работает.Обычно так работают системные демоны.

ACL / расширенные атрибуты

Будьте осторожны с расширенными атрибутами.При перечислении файлов с использованием ls -l они видны с добавленным знаком +.Например:

malbert@dredg:/tmp$ ls -l
total 48
drwx------  2 malbert domain users 4096 2011-06-10 08:51 akonadi-malbert.zOSngu
-rw-rwxr--+ 1 malbert domain users    0 2011-06-10 13:03 foo
drwx------  2 kdm     nogroup      4096 2011-06-10 08:51 kde-kdm
drwx------  3 malbert domain users 4096 2011-06-10 08:51 kde-malbert
[snip]

Обратите внимание на следующую строку:

-rwxr--+ 1 malbert domain users    0 2011-06-10 13:03 foo

Знак + -rwxr--+ указывает на расширенные атрибуты.Возможно, что это ACL.В документации SuSE отличный документ по ACL .Иди посмотри на это, если нужно.Разъяснение списков ACL наверняка взорвало бы эту статью, поэтому я не буду обсуждать их.

Расширенные атрибуты также могут быть связаны с файловой системой.См. справочную страницу chattr для получения дополнительной информации об этом.

Теперь, в качестве обозначения: это StackOverflow.Вопросы должны быть связаны с развитием.Для вопросов, подобных этому, есть http://www.serverfault.com. Но поскольку вы не знали, что это не проблема разработки, а больше относится к ОС, я чувствовал, что должен ответить в любом случае;)

Хорошоудачи и веселья!

2 голосов
/ 10 июня 2011

Процесс ничего не решает; всякий раз, когда он пытается выполнить операцию, операционная система проверяет его EUID и решает, имеет ли он необходимые привилегии.

Например, когда он пытается получить доступ к файлу, проверяются владелец и права доступа к файлу. Если EUID процесса не имеет достаточных привилегий для операции, эта операция завершится ошибкой (обычно с EPERM).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...