Разрешение файла с setuid и восьмеричными 4000

Ваши циклы кода Python навсегда. Таким образом Вы могли бы хотеть выполнить его в фоновом режиме и затем уничтожить его, когда размер файла превышен. Как острота:

{ ./gcd-rand.py 10000 10000 > f & }; p=$!; while (( $(stat -c %s f) < 33554432 )); do sleep .1; done; kill $p

Примечание: выберите время сна, столь соответствующее вместо статистики, можно также использовать du, как предложенный Dirk.

7
18.07.2014, 01:03
3 ответа
[

] Это просто конвенция. В исходных кодах Linux все идентификаторы констант ассоциированы с числами. Некоторые из них очень старые и происходят из самых первых выпусков ядра, в то время как другие были добавлены недавно.[

] [

]Константа []S_ISUID[], связанная с "setuid", определена в []include/uapi/linux/stat.h[], одном из многочисленных заголовков Linux. Он мог быть определен с чем угодно, но оказался 04000.[

] [

]Как говорит @steeldriver, []man 2 stat[] может помочь вам понять значение различных констант, используемых для разрешения файлов:[

] [
       S_IFMT     0170000   bit mask for the file type bit fields
       S_IFSOCK   0140000   socket
       S_IFLNK    0120000   symbolic link
       S_IFREG    0100000   regular file
       S_IFBLK    0060000   block device
       S_IFDIR    0040000   directory
       S_IFCHR    0020000   character device
       S_IFIFO    0010000   FIFO
       S_ISUID    0004000   set-user-ID bit
       S_ISGID    0002000   set-group-ID bit (see below)
       S_ISVTX    0001000   sticky bit (see below)
       S_IRWXU    00700     mask for file owner permissions
       S_IRUSR    00400     owner has read permission
       S_IWUSR    00200     owner has write permission
       S_IXUSR    00100     owner has execute permission
       S_IRWXG    00070     mask for group permissions
       S_IRGRP    00040     group has read permission
       S_IWGRP    00020     group has write permission
       S_IXGRP    00010     group has execute permission
       S_IRWXO    00007     mask for permissions for others (not in group)
       S_IROTH    00004     others have read permission
       S_IWOTH    00002     others have write permission
       S_IXOTH    00001     others have execute permission
] [

]В этом отрывке вы видите не только константы и их числовое значение, но и способ их выбора. Разработчики/дизайнеры выбрали константы таким образом, что вы можете []объединить [] их. Например, []S_ISUID и S_IRWXU и S_IRUSR и S_IRGRP = 04740[], поэтому разрешение []04740[] точно означает "setuid и все разрешения для владельца и разрешения на чтение для группы владельцев"[

].
10
27.01.2020, 20:15

В большинстве Unix-подобных систем файл, каталог или любой другой объект файловой системы представлен индексным индексом , который, помимо прочего, содержит целое число, называемое режим , который описывает тип объекта и некоторые его разрешения. Он описан в POSIX stat.h .

The following symbolic names for the values of type mode_t shall also be defined:

File type:
    S_IFREG
        Regular.
    S_IFDIR
        Directory.
    S_IFLNK
        Symbolic link.

File mode bits:

S_IRWXU
    Read, write, execute/search by owner.

    S_IRUSR
        Read permission, owner.
    S_IWUSR
        Write permission, owner.
    S_IXUSR
        Execute/search permission, owner.
...

S_ISUID
    Set-user-ID on execution.
S_ISGID
    Set-group-ID on execution.
...

Это все символические имена для целочисленных констант. S_IFREG - 0100000. S_IRUSR - 000400. S_ISUID - 004000. Они указаны в восьмеричном формате для простоты использования: биты режима файла могут логически рассматриваться как 4 группы по 3 бита в каждой.

Здесь вы можете увидеть биты типа файла и биты режима файла моего .profile :

$ perl -e 'printf("%#o\n", (stat(".profile"))[2]);'
0100644

Пользователи могут установить биты режима (но не тип файла) с помощью chmod , который принимает целочисленный аргумент (возможно, с использованием некоторых из этих символических констант S_ *), или утилиту chmod , которая принимает целочисленные или символьные имена (например, u + r ).

Поскольку на практике не так много различных комбинаций битов режима, многие пользователи Unix на протяжении многих десятилетий вызывали chmod (и системный вызов, и команду) с числовым аргументом, а не символическим. имена. 0755 означает «доступный для записи владельцем, доступный для чтения и исполняемый для всех остальных», 0644 означает «доступный для записи владельцем, доступный для чтения всем остальным», 04755 означает «setuid» , доступный для записи владельцем, доступный для чтения и исполнения всем остальным.

4
27.01.2020, 20:15

Из (английской) страницы руководства для chmod (debian jessy): (Выделено мной)

Числовой режим состоит из одной-четырех восьмеричных цифр (0-7), полученный с помощью сложение битов со значениями 4, 2 и 1. Пропущенные цифры предполагается, что это ведущие нули. Первая цифра выбирает установленный идентификатор пользователя. (4) и установите идентификатор группы (2) и ограниченное удаление или липкие (1) атрибуты. Вторая цифра определяет права доступа для пользователя, владеющего файлом: чтение (4), напишите (2) и выполните (1); третий выбирает разрешения для других пользователи в группе файла, с такими же ценностями; и четвертый для других пользователей, не входящих в группу файла, с такими же значениями.

Я не уверен, что это ответ на ваш вопрос, но он объясняет, что означают числа.

2
27.01.2020, 20:15

Теги

Похожие вопросы