Когда мог, или я должен использовать chmod g+s на файле или каталоге?

Некоторые могут найти ниже полезное:

Я хотел, чтобы клиенты были перенаправлены на страницу входа в систему для любого действия rest, которое отправляется без токена авторизации. Поскольку все мои действия по отдыху основаны на Ajax, мне нужен хороший общий способ перенаправления на страницу входа в систему вместо обработки функции успеха Ajax.

Это то, что я сделал:

В любом запросе Ajax мой сервер вернет ответ Json 200 «НЕОБХОДИМОСТЬ АВТОРИЗАЦИИ» (если клиент должен пройти аутентификацию).

Простой пример в Java (на стороне сервера):

@Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter {

    private final Logger m_logger = LoggerFactory.getLogger(AuthenticationFilter.class);

    public static final String COOKIE_NAME = "token_cookie"; 

    @Override
    public void filter(ContainerRequestContext context) throws IOException {        
        // Check if it has a cookie.
        try {
            Map<String, Cookie> cookies = context.getCookies();

            if (!cookies.containsKey(COOKIE_NAME)) {
                m_logger.debug("No cookie set - redirect to login page");
                throw new AuthenticationException();
            }
        }
        catch (AuthenticationException e) {
            context.abortWith(Response.ok("\"NEED TO AUTHENTICATE\"").type("json/application").build());
        }
    }
}

В моем Javascript я добавил следующий код:

$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
    var originalSuccess = options.success;

    options.success = function(data) {
        if (data == "NEED TO AUTHENTICATE") {
            window.location.replace("/login.html");
        }
        else {
            originalSuccess(data);
        }
    };      
});

И это все.

32
задан Dave Sherohman 10 October 2008 в 18:02
поделиться

7 ответов

Установка каталогов g+s делает все новые файлы созданными в упомянутом каталоге, установили их группу на группу каталога.

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

Примечание: Это - способ, которым это работает в Linux, это могло работать полностью по-другому в Солярисе.

76
ответ дан 27 November 2019 в 19:54
поделиться

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

Это полезно, если Вы хотите, чтобы пользователи смогли принять полномочия конкретной группы только для выполнения одной команды.

Однако это - также угроза безопасности, поскольку это позволяет пользователям поднимать свои полномочия. Необходимо знать, что сценарии с этим набором битов не собираются делать что-либо, что позволило бы пользователям злоупотребить этими дополнительными полномочиями.

12
ответ дан 27 November 2019 в 19:54
поделиться

Для исполняемого файла, g+s переопределения идентификатор группы, который исполняемый файл выполнит как (он обычно наследован от родителя).

$ cp `which id` id-test
$ ./id-test
uid=1001(user1) gid=1001(group1) groups=1001(group1),2001(project1)
$ chgrp project1 id-test
$ chmod g+s id-test
$ ./id-test
uid=1001(user1) gid=1001(group1) egid=2001(project1) groups=1001(group1),2001(project1)

(egid "эффективный идентификатор группы" - обычно то же как ценуроз, "идентификатор группы", но здесь отличающийся.)

Для каталога, g+s переопределения идентификатор группы, который будут иметь новые файлы и каталоги (он обычно наследован от создателя).

$ mkdir project
$ chgrp project1 file1
$ umask
0022
$ touch project/file1
$ ls -l project/file1
-rw-r--r-- 1 user1 group1 0 file1
$ chmod g+s project
$ touch project/file2
$ ls -l project/file2
-rw-r--r-- 1 user1 project1 0 file2

Вы, возможно, все еще должны играть с umask для лучших результатов; что-то, по крайней мере, столь же разрешающее как 0007 требуется для общей записи и чего-то, по крайней мере, столь же разрешающего, как 0027 требуется для общего чтения.

$ umask 0077
$ touch project/file3
$ ls -l project/file3
-rw------- 1 user1 project1 0 file3
$ umask 0027
$ touch project/file4
$ ls -l project/file4
-rw-r----- 1 user1 project1 0 file4
$ umask 0007
$ touch project1/file5
$ ls -l project1/file5
-rw-rw---- 1 user1 project1 0 file5
4
ответ дан 27 November 2019 в 19:54
поделиться

Для файлов это означает, что файл выполняется как группа, которая владеет файлом, не групповой пользователь, который выполняет файл, принадлежит. Это применимо, когда Вы хотите позволить пользователю делать что-то который, для которого у него нет полномочия. Например, для одного DBMS я использую, распространено позволить всем копировать базы данных. Хотя только у группы 'DBMS' есть доступ для чтения-записи к файлу базы данных, резервная программа имеет набор g+s, чтобы позволить любому получать доступ к базе данных через него, но не непосредственно.

каталоги For, это означает, что недавно созданные каталоги будут принадлежать группе, которая владеет каталогом, не групповой пользователь, который создал файл, принадлежит. Хорошим примером для этого является интернет-пространство проекта sourceforge.net. Вообразите 3 разработчиков, поддерживающих веб-сайт проекта. Теперь, если один из них создает файл, только он может записать в него (по умолчанию). Для работы вокруг этого все пользователи на том же проекте находятся в той же группе также, и каталог имеет rws полномочие для той группы, поэтому кто бы ни создает файл, это создается как читаемое и перезаписываемое группе.

2
ответ дан 27 November 2019 в 19:54
поделиться

Больше информации о setuid и setgid здесь

0
ответ дан 27 November 2019 в 19:54
поделиться

Чтобы подробно остановиться на Вашей определенной проблеме немного, было уже отмечено, что sgid исполняемые файлы могут вызвать проблемы путем предоставления пользовательских разрешений, которые они обычно не имеют. В то время как это - проблема для любого исполняемого файла, это создает потенциально годное для использования состояние состязания в случае сценариев (конкретно значение "файлов, которые выполняются посредством внешнего интерпретатора, определенного #! в начале файла"), который может использоваться для выполнения любого произвольного кода с полномочиями сценария.

Unix deriviatives реализовал много схем за эти годы, которые нацелены на смягчение или устранение этой уязвимости, большинство которых включало некоторую форму запрещения выполнения suid или sgid сценариев полностью или требования, чтобы Вы перешли через несколько обручей для включения его (обычно на основе сценария сценарием). Одна такая схема была бы причиной Вашей неспособности запустить скрипты после включения их флага sgid.

0
ответ дан 27 November 2019 в 19:54
поделиться

Когда необходимо использовать его: Устраните проблему принадлежности файла SVN при использовании svn+ssh. Кто-то сказал мне, что это только происходит на BDB, но у меня была такая проблема в устройстве хранения данных FSFS также. В основном, когда Вы хотите сохранить владение дочерних файлов в каталоге последовательным, когда существуют другие пользователи, пишущие материал на нем, необходимо было бы использовать u+s/g+s.

0
ответ дан 27 November 2019 в 19:54
поделиться
Другие вопросы по тегам:

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