小编Gus*_*uss的帖子

是否可以让 OpenSSH 记录身份验证中使用的公钥?

我有一个生产系统,其中允许多个不同的人登录到一个帐户 - 该帐户用于应用程序而不是用于个人,因为我们在生产服务器上没有个人帐户。

出于审计目的,我希望能够知道谁在什么时间登录,并且当我们使用 SSH 密钥登录时,跟踪它似乎是合乎逻辑的(因为没有其他标识符可跟踪)。

当 SSH 对用户进行身份验证时,它会将用户名记录到系统的安全日志中,但不会记录登录时使用了哪个授权公钥。 是否可以让 OpenSSH 也报告使用了哪个公钥,或者只是与该键相关的评论?

正在使用的操作系统是 CentOS 5.6,但我也想知道它是否可以在其他操作系统上使用。

linux ssh logging public-key

29
推荐指数
1
解决办法
2万
查看次数

Nginx proxy_read_timeout 与 proxy_connect_timeout

我已经开始使用 Nginx 作为一组提供某种服务的服务器的反向代理。

该服务有时可能相当慢(它在 Java 上运行,而 JVM 有时会陷入“完全垃圾收集”,这可能需要几秒钟),所以我将 设置proxy_connect_timeout为 2 秒,这将使 Nginx 有足够的时间来计算出服务卡在 GC 上并且不会及时响应,它应该将请求传递到不同的服务器。

proxy_read_timeout如果服务本身需要太多时间来计算响应,我还设置了防止反向代理卡住 - 同样,它应该将请求移动到另一个应该足够空闲以返回及时响应的服务器。

我已经运行了一些基准测试,我可以清楚地看到,proxy_connect_timeout由于某些请求完全在为连接超时指定的时间返回,因此工作正常,因为服务卡住并且不接受传入连接(该服务使用 Jetty 作为嵌入式servlet 容器)。这proxy_read_timeout也有效,因为我可以看到在那里指定的超时后返回的请求。

问题是proxy_read_timeout + proxy_connect_timeout,如果服务被卡住并且在 Nginx 尝试访问它时不接受连接,但在 Nginx 可以超时之前 - 它被释放并开始处理,但速度太慢,Nginx 会因为读取超时而中止。我相信该服务有这样的情况,但是在运行了几个基准测试之后,总共有数百万个请求 - 我没有看到一个请求在上面的任何内容中返回proxy_read_timeout(这是更大的超时)。

我很感激对此问题的任何评论,尽管我认为这可能是由于 Nginx 中的错误(我还没有查看代码,所以这只是一个假设)连接后超时计数器不会重置如果 Nginx 没有从上游服务器读取任何内容,则成功。

nginx proxy timeout

23
推荐指数
2
解决办法
12万
查看次数

如何重写 url 到后端,同时在 nginx 入口中保留浏览器 url?

我正在尝试重写服务的路径,同时在 kubernetes 上使用 nginx 入口保留浏览器 URL。

我需要的是这样的:

  • http://example.com/path=>http://service
  • http://example.com/path/bar=>http://service/bar
  • http://example.com/path/file.css=>http://service/file.css

也就是说,使其/path成为上游服务器中的根(或某个不同的 url)。

从我在这里看到的,这是使用 proxy_pass 上的尾部斜杠来完成的,但 nginx ingress 似乎没有这个选项。

这可能是 nginx 入口吗?

nginx kubernetes nginx-ingress

15
推荐指数
1
解决办法
4万
查看次数

使用 cookie 控制 Nginx 代理目标?

我正在尝试使用有趣的 Apache mod_rewrite 设置转换反向代理以使用 Nginx(由于外部问题,我们正在从 Apache 迁移到 Nginx,除了这部分外,大多数一切都正常)。

我最初的设置是读取 HTTP cookie(由某些应用程序设置)并根据其值将反向代理定向到不同的后端。它是这样的:

RewriteCond %{HTTP_COOKIE}  proxy-target-A
RewriteRule ^/original-request/ http://backend-a/some-application [P,QSA]

RewriteCond %{HTTP_COOKIE}  proxy-target-B
RewriteRule ^/original-request http://backend-b/another-application [P,QSA]

RewriteRule ^/original-request http://primary-backend/original-application [P,QSA]
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 Nginx 实现相同的目标,我的初始配置是这样的(其中“proxy_override”是 cookie 的名称):

location /original-request {
    if ($cookie_proxy_override = "proxy-target-A") {
        rewrite . http://backend-a/some-application;
        break;
    }
    if ($cookie_proxy_override = "proxy-target-B") {
        rewrite . http://backend-b/another-application;
        break;
    }
    proxy_pass http://primary-backend/original-application;
}
Run Code Online (Sandbox Code Playgroud)

但它没有。我试图通过编写主代理重定向到基于${cookie_proxy_override}的内容来查看 Nginx 是否可以读取我的 cookie ,我可以看到它读取的内容很好,但ifs 似乎总是失败。

根据 Rikih 的回答,我的下一次尝试是这样的:

location /original-request {
    if ($http_cookie ~ "proxy-target-A") …
Run Code Online (Sandbox Code Playgroud)

mod-rewrite nginx reverse-proxy cookie

14
推荐指数
2
解决办法
4万
查看次数

如何读取 Linux 'w' 命令输出中的“IDLE”列?

我试图找出一个进程来监视远程服务器上的用户会话并在他们空闲时间过长时向他们发出警报,这与 Linux 命令w非常合适。

问题是 -w使用 3 种不同的格式来指定会话的空闲时间,我无法正确计算它们。的输出w可能如下所示:

 11:40:57 up 400 days, 10:46, 13 users,  load average: 5.07, 5.10, 4.83
USER     TTY      FROM           LOGIN@   IDLE   JCPU   PCPU WHAT
john     pts/1    XX.XX.XX.XX   Wed13   22:29m  0.13s  0.04s ssh master-db
june     pts/2    XX.XX.XX.XX   Wed13   46.00s  0.67s  0.13s -bash
jenn     pts/4    XX.XX.XX.XX   11:13   27:47   4.16s  0.11s -bash
Run Code Online (Sandbox Code Playgroud)

如您所见,IDLE 对每个用户都有不同的格式:

  • “AA.BBs”显然意味着自她上次在控制台上活动以来已经过去了 AA 秒和 BB 1/100 秒(在六月的情况下为 46 秒)。
  • “AA:BBm”可能意味着自 John 上次在他的会话中处于活动状态以来已经过去了 AA 小时和 BB 分钟。
  • “AA:BB”是我无法弄清楚的格式 - 詹妮弗有多久没有参加她的会议了?

linux command-line-interface utilities

14
推荐指数
2
解决办法
1万
查看次数

如何“un-ANSI-fy”日志?

最近,命令行工具倾向于在其日志输出中使用花哨的 ANSI 颜色(例如,NPM 和许多基于 nodejs 的工具、rvm、docker 和其他一些“现代”工具)。

这使得在屏幕上阅读 (*) 变得很好,但当您想将输出通过管道传输到日志文件或通过不能很好地处理 ANSI 的传输(如各种远程执行工具和基于 Web 的监控解决方案)时,就不那么好了。许多更成熟的工具至少可以检测输出何时不是 TTY 并禁用颜色,但不能使用那些新奇的“用户友好”CLI - 这让我尝试通过管道摆脱 ANSI 颜色通过另一个过程输出。

对输出进行 sed 处理s/\x1B\[[0-9]*\w//g似乎可以完成工作,但是有没有更简洁的方法然后只需将正则表达式复制粘贴到我的所有脚本中?

(*) 至少直到该工具尝试在您的深色背景终端上以深红色显示错误为止。

shell console ansi

10
推荐指数
1
解决办法
1361
查看次数

将 Amazon Elastic Container Registry 与 Jenkins 集成

我正在尝试将 Amazon 新的 Elastic Container Registry (ECR) 与我的 Jenkins 构建服务集成。我正在使用 Cloudbees Docker Build & Publish 插件来构建容器映像并将它们发布到注册表。

为了使用 ECR 而不是我的私有注册表,我运行了 AWS CLI 命令aws --region us-east-1 ecr get-login,该docker login命令会发出一个命令来运行 - 但我只是复制了密码并从该密码中创建了一个类型为“带密码的用户名”的 Jenkins 凭证(用户名是总是“AWS”)。

这很好用!问题是 AWS CLI 生成的 ECR 密码的有效期仅为 12 小时。所以现在,我必须每天手动重新生成两次密码并手动更新 Jenkins 凭据屏幕,否则我的构建开始失败。

有没有办法生成永久的 ECR 登录令牌,或者以某种方式自动生成令牌?

amazon-web-services jenkins docker amazon-ecr

10
推荐指数
2
解决办法
5746
查看次数

SELinux:如何创建新的文件类型

在 RHEL/CentOS 7 上,我试图为文件创建一个新的 SELinux 安全上下文,以支持我正在编写的新服务。

我已经为我的新服务创建了一个类型强制文件,但我无法创建一个系统将识别为文件类型的新类型。

我正在基于此CentOS 5“构建本地策略模块”文档工作,该文档指示我创建一个 TE 文件,然后使用checkmodulesemodule_package编译它。

如果我只是在我的 TE 文件中写入:

type myservice_spool_t;
Run Code Online (Sandbox Code Playgroud)

然后 TE 编译得很好,但是当我尝试时,semanage fcontext我得到了这个:

$ sudo semanage fcontext -a -t myservice_spool_t "/var/spool/myservice(/.*)?" 
ValueError: Type myservice_spool_t is invalid, must be a file or device type
Run Code Online (Sandbox Code Playgroud)

我已经阅读了各种教程,但没有找到一个有效的例子——我所看到的一切都是:

  • 过时 - 例如这个RHEL 4 SELinux 文档页面说应该使用type myservice_spool_t, file_type;checkmodule说:ERROR 'attribute file_type is not declared'
  • 不完整 - 例如,这个答案会让我使用宏,file_type()checkmodule说: …

selinux rhel7 centos7

8
推荐指数
1
解决办法
4060
查看次数

删除机器账号后如何用Samba重新加入AD2003域?

在一些故障排除期间,我从 AD 2003 域中删除了运行 samba 的 Linux 服务器的计算机帐户。我们使用 Kerberos 进行身份验证,在删除机器帐户后,我尝试再次使用

net ads join -U Administrator
Run Code Online (Sandbox Code Playgroud)

但我不断收到这样的 Kerberos 错误:

[2009/08/18 16:14:36, 0] libads/kerberos.c:ads_kinit_password(228)
     kerberos_kinit_password MACHINE$@MY.DOMAIN.COM failed: Client not found in Kerberos database
 Failed to join domain: Improperly formed account name
Run Code Online (Sandbox Code Playgroud)

似乎 samba 记得它曾经有一个 AD 帐户并不断尝试重新连接到它,但我想从头开始创建一个新帐户。我试图删除我能找到的所有 .tdb 文件以及 /var/cache/samba 下的所有内容,但无济于事 - 它的行为仍然相同。

我也尝试在 AD 端创建机器帐户,但是当我尝试加入时遇到类似的错误,关于无法使用机器帐户进行身份验证 - 看起来 samba 尝试了以前的机器帐户密码而我没有知道如何重置它,或者即使我能弄清楚 samba 使用什么 - 如何在 AD 中设置它。

任何帮助将不胜感激,因为此时我唯一能想到的就是重新格式化并重新安装机器,我真的很想不这样做。

提前致谢。

linux active-directory kerberos samba

5
推荐指数
1
解决办法
2万
查看次数

使用 fstab 绑定挂载只读?

我正在使用mount --bind将某个目录附加到另一个路径下(它是系统的一部分,该系统包含多个镜像副本,其中一些副本与其他副本略有不同,但我不希望复制某些部分,例如 ISO)。

问题是我真的希望绑定安装是只读的,但是当我写下/etc/fstab这些安装有 optionsro,bind和 issue 时mount -a,我得到了这个:

mount: warning: /some/target/path seems to be mounted read-write.
Run Code Online (Sandbox Code Playgroud)

确实如此 - 看起来该ro选项被忽略了,警告可能是因为 mount 在完成后重新检查了 mount。

根据安装手册页:

请注意,文件系统挂载选项将与原始挂载点上的相同,并且无法通过将 -o 选项与 --bind/--rbind 一起传递来更改。可以通过单独的重新安装命令更改安装选项

给出的解决方案是发出mount后跟mount -o remount,ro-的命令,这在/etc/fstab用于安装时效果不佳。任何想法如何解决这个问题?

linux mount

5
推荐指数
1
解决办法
6695
查看次数

cloud-init 模块顺序错误,如何修复?

我正在使用 cloud-init 设置运行 Ubuntu 14.04 的 AWS EC2 机器。cloud-init 比较有用的功能之一是write_files允许我在虚拟机初始化期间安装附加文件的模块。

write_files有几个有用的功能,其中的设置文件的所有者,作为记录在这里。不幸的是,我似乎无法write_files在 Ubuntu 14.04 中使用此功能将文件所有者设置为任何非系统帐户,因为添加用户的 cloud-init 模块 - “用户组”正在该write_files部分之后运行。如果我将文件所有者设置为在该users部分中添加的用户(或在我的情况下为 default users),即使我通过 uid 执行此操作,我也会收到如下错误:

StandardError:('write-files', OSError("Unknown user or group: 'getpwnam(): name not found: ubuntu'",))
Run Code Online (Sandbox Code Playgroud)

这似乎编码到 /etc/cloud/cloud.cfg 中,其中包含以下部分:

cloud_init_modules:
 - migrator
 - seed_random
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - set_hostname
 - update_hostname
 - update_etc_hosts
 - ca-certs
 - rsyslog
 - users-groups
 - ssh
Run Code Online (Sandbox Code Playgroud)

我在互联网上看到了一些cloud_init_modules在 cloud-init 用户数据中设置的示例,但是如果我添加这样一个部分并将其排序 …

ubuntu cloud-init ubuntu-14.04

5
推荐指数
1
解决办法
1479
查看次数