2016-04-14 4 views
1

Я понял, как читать/преобразовывать символические части rwx в 421 восьмеричные части, что было довольно прямолинейно. Но я очень смущен, когда есть специальные персонажи. Мы знаем, что -r-xr --- wx преобразуется в 0543, но что делает -r-sr --- wt или -r-xr --- wt конвертировать в?Разрешения на доступ к файлам Linux (в глубину) - числовое обозначение строки и наоборот; дополнительные разрешения файлов

Я считаю, что при разрешении на выполнение пользователем есть x, s, S. Для разрешения группового выполнения есть также x, s, S. Тогда все остальные разрешения пользователя выполняются x, t, T. Что все это значит и как они преобразуются в восьмеричную нотацию. Я предполагаю, что это имеет какое-то отношение к позиции 0 в 0421 году?

Из моих заметок в классе говорится, что 5543 конвертирует в -r-sr --- wt. Затем образец вопроса о -r-S-wsrw- преобразуется в 6536, за исключением того, что он хочет, чтобы мы зафиксировали вторую позицию (5), чтобы оно было правильным преобразованием.

Я искал и много искал в Googled, но неожиданно ничего не нашел на этих специальных персонажах.

ответ

3

После глубокого поиска в Интернете, я нашел this link about Understanding Linux File Permissions, который описывает его в деталях:

s - Это указано в Setuid/setgid разрешения. Это не задано , отображаемое в части разрешенных разрешений на экране разрешений, , но представляется в виде s в считываемой части владельца или группы разрешений.

t - Это указывает на допустимые разрешения. Это не установлено отображается в специальном разрешении части дисплея разрешений, но представляется как на в исполняемом части всех пользователей разрешений

Setuid/Setgid Особые разрешения

- - Разрешения setuid/setguid используются для указания системе запуска исполняемого файла как владельца с правами владельца.

--- Будьте осторожны с использованием битов setuid/setgid в разрешениях. Если вы неправильно назначили права доступа к файлу, принадлежащему root, с установленным битом setuid/setgid, вы можете открыть свою систему для вторжения.

--- Вы можете назначить бит setuid/setgid, явно определяя разрешения. Символом для бита setuid/setguid является s.

Липкого бита Специальных разрешений

--- Липкий бит может быть очень полезно в общей среде, потому что, когда он был назначен разрешением на директории он устанавливает так только владелец файла может удалить или переименовать указанный файл.

--- Вы можете назначить только липкий бит, явно определяя разрешения. Символ для липкого бита - t.

логика преобразования из числового (1/2/4421) для условного обозначения (RWX/с/т):


РЕДАКТИРОВАТЬ:

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

r = 4 
w = 2 
x = 1 

---> Липкий бит может быть установлен с помощью команды CHMOD и может быть установлен с помощью его режима 1000 восьмеричных или его символа T (S уже используется Setuid бита). Например, чтобы добавить бит в каталог/usr/local/tmp, можно ввести chmod 1777 /usr/local/tmp.

---> В Setuid и setgid бит обычно устанавливает с помощью команды CHMOD, установив высокие порядка восьмеричную цифру 4 для Setuid или 2 для setgid. chmod 6711 file установит биты setuid и setgid (4 + 2 = 6), сделав файл для чтения/записи/выполнимым для владельца (7) и выполнимым группой (первая 1) и другими (второй 1).

NOTE :

s --- The setuid bit when found in the user triad; the setgid bit when found in the group 
     triad; it is not found in the others triad; it also implies that x is set. 
S --- Same as s, but x is not set; rare on regular files, and useless on folders. 
t --- The sticky bit; it can only be found in the others triad; it also implies that x is 
     set. 
T --- Same as t, but x is not set; rare on regular files, and useless on folders. 

S, S, Т и Т значение всегда добавляется перед пользователем-групповой других разрешения записи. Итак, первая буква обозначений представляет значения s, S, t или T, добавленные к строке. Следующие 3 буквы являются обычным разрешением.

Ваши вопросы/примеры, относящиеся к файлу-разрешения:

1. -r-sr---wt = 5543, first 5(s set for user = 4 + t set for others = 1), 
        second 5(r=4,s=1), third 4(r = 4), and last, fourth 3(w=2, t = 1). 


2. -r-S-wsrw- = 6436, first 6(S set for user = 4 + s set for group = 2), 
        second 5(r=4, x=0, since S don't account for x), 
        third 3(w = 2, s results in x = 1), and last, fourth 6(r=4,w=2). 
2

В случае, если вы хотите фактические биты, они могут быть найдены на stat.2 man page (отформатированные как код, так что это более читаемым):

The following mask values are defined for the file type of the 
    st_mode field: 

     S_IFMT  0170000 bit mask for the file type bit field 

     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 

    ... 

    The following mask values are defined for the file mode component of 
    the st_mode field: 

     S_ISUID  04000 set-user-ID bit 
     S_ISGID  02000 set-group-ID bit (see below) 
     S_ISVTX  01000 sticky bit (see below) 

     S_IRWXU  00700 owner has read, write, and execute permission 
     S_IRUSR  00400 owner has read permission 
     S_IWUSR  00200 owner has write permission 
     S_IXUSR  00100 owner has execute permission 

     S_IRWXG  00070 group has read, write, and execute permission 
     S_IRGRP  00040 group has read permission 
     S_IWGRP  00020 group has write permission 
     S_IXGRP  00010 group has execute permission 

     S_IRWXO  00007 others (not in group) have read, write, and 
          execute permission 
     S_IROTH  00004 others have read permission 
     S_IWOTH  00002 others have write permission 
     S_IXOTH  00001 others have execute permission 

биты определены в the /usr/include/uapi/linux/stat.h header file:

#ifndef _UAPI_LINUX_STAT_H 
#define _UAPI_LINUX_STAT_H 


#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) 

#define S_IFMT 00170000 
#define S_IFSOCK 0140000 
#define S_IFLNK 0120000 
#define S_IFREG 0100000 
#define S_IFBLK 0060000 
#define S_IFDIR 0040000 
#define S_IFCHR 0020000 
#define S_IFIFO 0010000 
#define S_ISUID 0004000 
#define S_ISGID 0002000 
#define S_ISVTX 0001000 

#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) 
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) 

#define S_IRWXU 00700 
#define S_IRUSR 00400 
#define S_IWUSR 00200 
#define S_IXUSR 00100 

#define S_IRWXG 00070 
#define S_IRGRP 00040 
#define S_IWGRP 00020 
#define S_IXGRP 00010 

#define S_IRWXO 00007 
#define S_IROTH 00004 
#define S_IWOTH 00002 
#define S_IXOTH 00001 

#endif 


#endif /* _UAPI_LINUX_STAT_H */