我一直最讨厌 MS SQL Server 中的一件事就是安全性的工作方式。如果你有趣地看待服务器,安全上下文会不断切换,而且通常很难(无论如何对我来说)预测或调试。
在今天处理一个问题时,我想,“我希望我可以在代码中添加一行,以显示 SQL Server 在代码运行时使用的安全上下文。” 存在这样的命令吗?例如,SELECT security_context()
更清楚一点...如果我处于存储过程中并且因此受到 SP 所有者的安全上下文的约束,那么我希望看到这一点。如果我在由 sp_executesql 调用的代码中,并且它导致安全性处于 SQL Server 服务帐户的上下文中,那么我希望看到这一点。
至少这样我也许能够弄清楚为什么 SQL Server 认为我不应该访问某些内容。
谢谢!
例子
-- Set up
CREATE USER Test_User WITHOUT LOGIN
CREATE TABLE Test_Security_Context (my_id INT)
INSERT INTO Test_Security_Context VALUES (1)
DENY SELECT ON Test_Security_Context TO Test_User
GO
CREATE PROCEDURE Test_Security_Context_SP
AS
SELECT SUSER_SNAME()
SELECT * FROM Test_Security_Context -- This will return ok
EXEC('SELECT SUSER_SNAME(); SELECT * FROM Test_Security_Context') -- SUSER_SNAME() will match above but select fails …Run Code Online (Sandbox Code Playgroud) 亲爱的 K8S 社区团队,
部署应用程序 pod 时,我从 nginx 收到此错误消息。我的应用程序 angular6 应用程序托管在 nginx 服务器内,该服务器部署为 EKS 内的 docker 容器。
我将我的应用程序配置为“只读容器文件系统”,但我将“emptyDir”类型的“临时挂载”卷与只读文件系统结合使用。
所以我不确定出现以下错误的原因:
2019/04/02 14:11:29 [emerg] 1#1: mkdir() "/var/cache/nginx/client_temp" failed (30: 只读文件系统) nginx: [emerg] mkdir() "/ var/cache/nginx/client_temp”失败(30:只读文件系统)
我的deployment.yaml是:
...
spec:
volumes:
- name: tmp-volume
emptyDir: {}
# Pod Security Context
securityContext:
fsGroup: 2000
containers:
- name: {{ .Chart.Name }}
volumeMounts:
- mountPath: /tmp
name: tmp-volume
image: "{{ .Values.image.name }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
securityContext:
capabilities:
add:
- NET_BIND_SERVICE
drop:
- ALL
securityContext:
readOnlyRootFilesystem: …Run Code Online (Sandbox Code Playgroud) deployment nginx security-context kubernetes kubernetes-helm
我确实了解这样做的缺点,但是我的图像只能与在其中运行 cmd 的 root 用户一起使用。
服务器 kubernetes 版本是:v1.19.14. 我的里面deployment.yaml有:
spec:
containers:
- name: myapp
securityContext:
allowPrivilegeEscalation: false
runAsUser: 0
command: ...
image:...
Run Code Online (Sandbox Code Playgroud)
但是当describe rs我看到以下内容时:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedCreate 0s (x13 over 21s) replicaset-controller Error creating: pods "myapp-7cdd994c56-" is forbidden: PodSecurityPolicy: unable to admit pod: [spec.containers[0].securityContext.runAsUser: Invalid value: 0: running with the root UID is forbidden]
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
root security-context kubernetes kubernetes-helm kubernetes-pod
我完成了这篇文章的答案,但令牌属性为null,用户正确登录,路由在防火墙后面.此外,我正在其他服务中注入SecurityContext,它工作正常.
services.xml:
<service id="tc.extensions.relation_helper"
class="TC\CoreBundle\Extensions\RelationHelperExtension">
<argument type="service" id="security.context" />
<tag name="twig.extension" />
</service>
Run Code Online (Sandbox Code Playgroud)
我的扩展名:
class RelationHelperExtension extends Twig_Extension
{
/**
* @var User
*/
private $user;
public function __construct(SecurityContext $securityContext){
$this->user = $securityContext->getToken()->getUser();
}
Run Code Online (Sandbox Code Playgroud) 在我的 POD 中,我想使用 securityContext 将所有容器限制为只读文件系统
:readOnlyRootFilesystem: true
示例(注意:为简洁起见,减少了 yaml)
apiVersion: v1
kind: Pod
metadata:
labels:
run: server123
name: server123
spec:
securityContext:
readOnlyRootFilesystem: true
containers:
- image: server1-image
name: server1
- image: server2-image
name: server2
- image: server3-image
name: server3
Run Code Online (Sandbox Code Playgroud)
这将导致:
错误:验证“server123.yaml”时出错:验证数据时出错:ValidationError(Pod.spec.securityContext):io.k8s.api.core.v1.PodSecurityContext 中的未知字段“readOnlyRootFilesystem”;如果您选择忽略这些错误,请使用 --validate=false 关闭验证
相反,我必须配置为:
apiVersion: v1
kind: Pod
metadata:
labels:
run: server123
name: server123
spec:
containers:
- image: server1-image
name: server1
securityContext:
readOnlyRootFilesystem: true
- image: server2-image
name: server2
securityContext:
readOnlyRootFilesystem: true
- image: server3-image
name: server3
securityContext:
readOnlyRootFilesystem: …Run Code Online (Sandbox Code Playgroud) 我正在对Symfony2控制器进行功能测试,继承我的测试类:
class InsecureWebTestCase extends WebTestCase {
protected $client = null;
public function setUp() {
$this->client = static::createClient();
$session = $this->client->getContainer()->get('session');
$firewall = 'default';
$token = new UsernamePasswordToken('norbert.scrunge@gmail.com', null, $firewall, array('ROLE_USER', 'ROLE_ADMIN'));
// $this->client->getContainer()->get('security.context')->setToken($token);
$session->set("_security_$firewall", serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将控制器用作应用程序的一部分:
$this->container->get('security.token_storage')->getToken()->getUser()并且$this->getUser()是我的Doctrine"用户"实体的实例.
但运行功能测试时:
$this->container->get('security.token_storage')->getToken()->getUser()是包含用户名和一个字符串$this->getUser()是NULL.
在我的应用和功能测试中,我需要做些什么才能使行为保持一致?
我有这样的测试:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@ActiveProfiles("test")
public class MyTests {
@Autowired
private TestRestTemplate restTemplate;
....
Run Code Online (Sandbox Code Playgroud)
在测试中,我禁用了身份验证/授权
但在代码中我使用以下内容:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Run Code Online (Sandbox Code Playgroud)
但这是测试失败的原因.
我怎么能模拟我的测试?
这个不起作用:
@Test
public void testUpdateWithoutNameAndEmail() {
Authentication authentication = Mockito.mock(Authentication.class);
SecurityContext securityContext = Mockito.mock(SecurityContext.class);
Mockito.when(securityContext.getAuthentication()).thenReturn(authentication);
SecurityContextHolder.setContext(securityContext);
Mockito.when(authentication.getName()).thenReturn("aName");
restTemplate.exchange(..
Run Code Online (Sandbox Code Playgroud)
SecurityContextHolder.getContext().getAuthentication() 在代码中返回null
而且这个也是:
@Autowired
private TestRestTemplate restTemplate;
@Test
@WithMockUser(username = "aUser", roles = { "ADMIN" })
public void testUpdateWithoutNameAndEmail() {
...
Run Code Online (Sandbox Code Playgroud) java spring integration-testing spring-security security-context
我无法启动需要特权安全上下文的 pod。Pod 安全策略:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: pod-security-policy
spec:
privileged: true
allowPrivilegeEscalation: true
readOnlyRootFilesystem: false
allowedCapabilities:
- '*'
allowedProcMountTypes:
- '*'
allowedUnsafeSysctls:
- '*'
volumes:
- '*'
hostPorts:
- min: 0
max: 65535
hostIPC: true
hostPID: true
hostNetwork: true
runAsUser:
rule: 'RunAsAny'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'RunAsAny'
fsGroup:
rule: 'RunAsAny'
Run Code Online (Sandbox Code Playgroud)
集群角色:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: privileged
rules:
- apiGroups:
- '*'
resourceNames:
- pod-security-policy
resources:
- '*'
verbs:
- '*'
Run Code Online (Sandbox Code Playgroud)
集群角色绑定:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding …Run Code Online (Sandbox Code Playgroud) 我正在尝试基于 /SCC 创建 Helm 图表条件模板,SecurityContextConstraint无论我是否安装在 Openshift 集群上。因为 SCC 是 Openshift 特定的资源。
因此,在helm install <release-name> <chart> -n <namespace>Openshift 集群上执行 ) 时,应该会自动创建 SCC。
后备选项是使用这样的东西:
{{ if .Values.isOpenshift }}
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
...
{{ end }}
Run Code Online (Sandbox Code Playgroud) 我如何确定以下行在今天和未来版本的 Spring 中会返回什么?我没有找到有关此的文档。我怎样才能确定 Spring 决定分配给这个字段的内容是什么?
SecurityContextHolder.getContext().getAuthentication().getDetails()
Run Code Online (Sandbox Code Playgroud)
根据这个你可以期待西班牙宗教裁判所
security-context ×10
kubernetes ×4
java ×2
spring ×2
symfony ×2
deployment ×1
helm3 ×1
nginx ×1
openshift ×1
php ×1
rbac ×1
root ×1
security ×1
sql-server ×1
twig ×1