2016-11-02 17 views
-1

Как операционная система не позволяет обычным пользователям выполнять команды, такие как fdisk и umount, хотя у команд есть разрешения на выполнение для всех?Как управляются привилегированные команды?

[[email protected] ~]# ls -la $(which umount) 
-rwsr-xr-x. 1 root root 31960 Aug 21 2015 /usr/bin/umount 
[[email protected] ~]# ls -la $(which fdisk) 
-rwxr-xr-x. 1 root root 182472 Aug 21 2015 /usr/sbin/fdisk 

ответ

0

Там, вероятно, могут быть некоторые ситуации, когда это может стоить, чтобы запретить пользователю выполнять любые двоичные файлы (я предполагаю, что это может быть один из контрмер против привилегий подвигов). Но во многих случаях обычные пользователи могут выполнять свои собственные двоичные файлы, так что, если пользователь будет писать и компилировать fdisk или что-то подобное самому себе? Действительно, вы не хотите запрещать пользователю запускать fdisk. Вы просто хотите запретить fdisk или любую другую программу, чтобы каким-то образом изменить состояние системы. Так обычный пользователь действительно может выполнятьfdisk:

$ fdisk --help 
Usage: 
fdisk [options] <disk>  change partition table 
fdisk [options] -l [<disk>] list partition table(s) 
... 

Что обычный пользователь на самом деле не может сделать, это выполнение ограниченных операций:

$ fdisk /dev/sda 
Welcome to fdisk (util-linux 2.27.1). 
Changes will remain in memory only, until you decide to write them. 
Be careful before using the write command. 
fdisk: cannot open /dev/sda: Permission denied 

fdisk Так началась успешно, напечатанный некоторые сообщения. Затем он попытался открыть raw disk device /dev/sda, и именно эта операция была действительно ограничена разрешениями, поэтому fdisk просто пожаловался, что ничего не может сделать и вышел.

Есть некоторые случаи, когда вы можете ограничить выполнение некоторыми двоичными файлами некоторых пользователей. Когда администратор или разработчик ОС хочет, чтобы обычный пользователь мог выполнять некоторые привилегированные действия (например, монтировать какой-либо раздел, который этому конкретному пользователю разрешен по какой-либо записи в /etc/fstab), они создали некоторые специальные закаленные двоичные файлы, такие как mount или sudo с набор-ID пользователя разрешение:

$ ls -l /bin/mount /usr/bin/sudo 
-rwsr-xr-x 1 root root 40152 May 27 02:31 /bin/mount 
-rwsr-xr-x 1 root root 136808 Aug 17 16:20 /usr/bin/sudo 

Когда такое бинарное выполняется, ядро ​​дает ему не пользовательский идентификатор вызывающего пользователя, но в этом случае UID 0 (корень). Поскольку обычный пользователь не может установить двоичные файлы таким образом (root-владелец и бит набора-UID-бит), теоретически может быть целесообразно ограничить выполнение этих двоичных файлов какой-либо конкретной группой (но в приведенном выше случае они являются исполняемыми во всем мире и проверяют разрешения вызывать пользователя сами по себе. Я действительно не знаю, если какие-либо ограничения на выполнение исполняемых файлов set-UID нельзя обойти и каким образом подход действительно широко используется кем-то).

И один дополнительное примечание: в случае fdisk на вашей систему, она устанавливается в /usr/sbin каталог, который может или не может быть в PATH переменный обычных пользователей, так fdisk может или не может быть выполнен обычным пользователем просто набрав fdisk в командной строке, но на самом деле это не ограничение (можно просто указать полный путь к исполняемому файлу в командной строке).