我正在编写一个 shell 脚本,其中大多数命令不需要 root 权限。该脚本应由管理员运行。但我希望能够将不需要 root 权限的脚本部分“su”到普通用户帐户。这将最大限度地减少使用 root 权限完成的操作数量并提高安全性。
有 linux 命令可以做到这一点吗?
我知道可以 su 到任何用户帐户,但我不想依赖于机器上存在特定用户名的假设。
想着在脚本的时候创建一个临时账号,在脚本结束的时候删除。但是如果我不在这个账户上设置密码,那么攻击者在账户的短暂生命周期内是不是就不能使用它呢?我无法将用户 shell 设置为 /sbin/nologin,因为显然这会阻止在“起诉”帐户的 shell 脚本中执行命令。
谢谢你的帮助。
创建没有密码的用户的好方法是什么?没有密码,我的意思是一个帐户,它只能由使用 su/sudo 命令的 root 帐户使用(如 Apache 或 Nginx 使用的“nobody”用户)。
我已经读过在 /etc/shadow 文件的密码字段中放置 * 可以工作,但我想知道是否有办法使用 useradd 命令来做到这一点。
我想过这样做:
useradd my_new_user -s /sbin/nologin -p '*'
Run Code Online (Sandbox Code Playgroud)
但我不确定 useradd 命令可以这样使用。我还没有找到任何关于它的参考。
我想在我的服务器上同步一个包含 Python 3 应用程序的目录。
该目录包含我感兴趣的文件:以 .py 结尾的文件
还有一些我想忽略的文件(这些是__pycache__目录中的文件)。(注意:__pycache__我的项目的任何子目录中都可能有目录)。我希望这些__pycache__目录被忽略,无论它们出现在哪里)。
我认为应该有一种简单的方法可以做到这一点,但找不到。--filter 选项似乎没有记录,并且 --exclude 选项不能像 rsync 帮助中描述的那样工作。
这台服务器运行 Debian 7,我面临着一个很大的谜团。
这是我的 cron 任务:
$ sudo crontab -e
42 15 * * * apt-get -y update >> /var/log/my-apt-update.txt
52 15 * * * apt-get -y upgrade >> /var/log/my-apt-upgrade.txt
Run Code Online (Sandbox Code Playgroud)
我添加了这">> /var/log/my-apt-upgrade.txt"部分是因为我试图理解为什么我的系统永远不会升级。
cron 任务运行。每天我在 /var/log/syslog 中有这些行:
Nov 14 15:42:01 myhostname /USR/SBIN/CRON[3374]: (root) CMD (apt-get -y update >> /var/log/my-apt-update.txt)
Nov 14 15:52:01 myhostname /USR/SBIN/CRON[3394]: (root) CMD (apt-get -y upgrade >> /var/log/my-apt-upgrade.txt)
Run Code Online (Sandbox Code Playgroud)
并且 /var/log/my-apt-upgrade.txt 有这样的段落(我只显示最近两天):
Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded: …Run Code Online (Sandbox Code Playgroud) 我对保护 Web 应用程序免受机器人攻击的背景感兴趣,但我认为它适用于机器人可以通过 IPv6 进行的所有类型的攻击。
在 Web 应用程序中,您希望保护一些页面免受机器人攻击。
它可能是一个登录页面:您希望避免数百万个尝试用户名/密码组合的请求。
它可能是一个注册页面。您不希望在您的网站上创建数千个机器人帐户。
或者您可能不希望立即下载数据库的全部内容。您认为匿名用户每天向您的数据库发出 100 或 200 个请求来获取一些信息是可以接受的,但您不能接受机器人每分钟执行 1000 个请求来下载您提供的所有内容。
或者只是为了统计目的。您正在记录网站上的访问者活动,并且您不希望机器人完全影响您的数据,例如,人为地点击链接数千次,以便其链接到的文章成为您的新闻网站上“最受欢迎的文章” 。
我经常使用基于 IP 地址的节流/速率限制以及 Nginx 速率限制功能来处理此问题:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/m;
server {
location /sensitiveUrl {
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
Run Code Online (Sandbox Code Playgroud)
但对于 IPv6,我不确定这有多有效。我的意思是,使用 IPv4 相对有效,因为攻击者创建和使用数千个 IP 地址的成本很高,但使用 IPv6 似乎任何人都可以创建数百万个 IP。这要怎么处理呢?我应该对 IPv6 网络而不是地址应用限制吗?如果我这样做的话,实际效果如何?
是否有一个命令可以做到这一点:如果一个包已经安装,更新它,否则安装最新版本
现在我正在执行两个命令:
yum install mypackage
yum update mypackage
Run Code Online (Sandbox Code Playgroud)
也许有更有效的方法?
我一直在阅读有关必须使用 sasl 支持编译后缀才能使用 sasl 身份验证的所有地方。
我已经运行了 postfix 实例(Centos 6.4 和 Fedora 18 机器)。它们是使用包管理器 (yum) 安装的。
如何检查 postfix 是否是使用 sasl 支持编译的?