Умэск используется с аргументами chmod-стиля

Аргумент к umask позволяет внешнему пользователю слишком много управления

Описание

Умэск использовал с chmod - проверки аргументов стиля на команды umask, которым задали аргумент в стиле аргументов к chmod.

Для новых файлов umask значение задает который полномочия не установить, другими словами, который полномочия удалить. umask аргумент поразрядно отрицается и затем применяется новые полномочия файла.

Напротив, chmod устанавливает полномочия, когда вы задаете их.

Риск

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

Фиксация

Установите umask так, чтобы у пользователя (u) было меньше полномочий, выключенных, чем группа (g). Установите umask так, чтобы у группы было меньше полномочий, выключенных, чем другие пользователи (o) или u <= g <= o.

Вы видите umask значение путем вызова,

umask
или символьное значение путем вызова,
umask -S

Примеры

развернуть все

#include <stdio.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>

typedef mode_t (*umask_func)(mode_t);

const mode_t default_mode = (
    S_IRUSR    /* 00400 */ 
    | S_IWUSR  /* 00200 */ 
    | S_IRGRP  /* 00040 */ 
    | S_IWGRP  /* 00020 */
    | S_IROTH  /* 00004 */
    | S_IWOTH  /* 00002 */
    );         /* 00666 (i.e. -rw-rw-rw-) */

static void my_umask(mode_t mode)
{
    umask(mode);
}

int umask_use(mode_t m)
{
    my_umask(default_mode);
    return 0;
}

Этот пример использует функцию под названием my_umask, чтобы установить режим маски по умолчанию. Однако переменная default_mode дает полномочия 666 или -rw-rw-rw. umask инвертирует это значение. Однако это отрицание означает, что режим маски по умолчанию выключает полномочия чтения-записи для пользователя, групповых пользователей и других внешних пользователей.

Исправление — инвертирует предпочтительные полномочия

Одно возможное исправление должно инвертировать аргумент default_mode к my_umask. Это исправление аннулирует отрицание umask для новых файлов.

#include <stdio.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>

typedef mode_t (*umask_func)(mode_t);

const mode_t default_mode = (
    S_IRUSR    /* 00400 */ 
    | S_IWUSR  /* 00200 */ 
    | S_IRGRP  /* 00040 */ 
    | S_IWGRP  /* 00020 */
    | S_IROTH  /* 00004 */
    | S_IWOTH  /* 00002 */
    );         /* 00666 (i.e. -rw-rw-rw-) */

static void my_umask(mode_t mode)
{
    umask(mode);
}

int umask_use(mode_t m)
{
    my_umask(~default_mode);
    return 0;
}

Информация о результате

Группа: безопасность
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: BAD_UMASK
Влияние: низко
ID CWE: 560, 922

Введенный в R2015b