Некоторые могут найти ниже полезное:
Я хотел, чтобы клиенты были перенаправлены на страницу входа в систему для любого действия 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);
}
};
});
И это все.
Установка каталогов g+s делает все новые файлы созданными в упомянутом каталоге, установили их группу на группу каталога.
Это может на самом деле быть действительно удобно в совместных целях, если у Вас есть набор umask так, чтобы файлы сделали, чтобы группа записала по умолчанию.
Примечание: Это - способ, которым это работает в Linux, это могло работать полностью по-другому в Солярисе.
Для исполняемых файлов это означает, что, когда файл выполняется, он выполняется как группа, которая владеет файлом, не группой пользователя, выполняющего файл.
Это полезно, если Вы хотите, чтобы пользователи смогли принять полномочия конкретной группы только для выполнения одной команды.
Однако это - также угроза безопасности, поскольку это позволяет пользователям поднимать свои полномочия. Необходимо знать, что сценарии с этим набором битов не собираются делать что-либо, что позволило бы пользователям злоупотребить этими дополнительными полномочиями.
Для исполняемого файла, 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
Для файлов это означает, что файл выполняется как группа, которая владеет файлом, не групповой пользователь, который выполняет файл, принадлежит. Это применимо, когда Вы хотите позволить пользователю делать что-то который, для которого у него нет полномочия. Например, для одного DBMS я использую, распространено позволить всем копировать базы данных. Хотя только у группы 'DBMS' есть доступ для чтения-записи к файлу базы данных, резервная программа имеет набор g+s, чтобы позволить любому получать доступ к базе данных через него, но не непосредственно.
каталоги For, это означает, что недавно созданные каталоги будут принадлежать группе, которая владеет каталогом, не групповой пользователь, который создал файл, принадлежит. Хорошим примером для этого является интернет-пространство проекта sourceforge.net. Вообразите 3 разработчиков, поддерживающих веб-сайт проекта. Теперь, если один из них создает файл, только он может записать в него (по умолчанию). Для работы вокруг этого все пользователи на том же проекте находятся в той же группе также, и каталог имеет rws полномочие для той группы, поэтому кто бы ни создает файл, это создается как читаемое и перезаписываемое группе.
Чтобы подробно остановиться на Вашей определенной проблеме немного, было уже отмечено, что sgid исполняемые файлы могут вызвать проблемы путем предоставления пользовательских разрешений, которые они обычно не имеют. В то время как это - проблема для любого исполняемого файла, это создает потенциально годное для использования состояние состязания в случае сценариев (конкретно значение "файлов, которые выполняются посредством внешнего интерпретатора, определенного #! в начале файла"), который может использоваться для выполнения любого произвольного кода с полномочиями сценария.
Unix deriviatives реализовал много схем за эти годы, которые нацелены на смягчение или устранение этой уязвимости, большинство которых включало некоторую форму запрещения выполнения suid или sgid сценариев полностью или требования, чтобы Вы перешли через несколько обручей для включения его (обычно на основе сценария сценарием). Одна такая схема была бы причиной Вашей неспособности запустить скрипты после включения их флага sgid.
Когда необходимо использовать его: Устраните проблему принадлежности файла SVN при использовании svn+ssh. Кто-то сказал мне, что это только происходит на BDB, но у меня была такая проблема в устройстве хранения данных FSFS также. В основном, когда Вы хотите сохранить владение дочерних файлов в каталоге последовательным, когда существуют другие пользователи, пишущие материал на нем, необходимо было бы использовать u+s/g+s.