please ,sudo替代品
委派精确的最小特权访问权限。轻松地用正则表达,仅揭露所需的内容,仅此而已。或使用编辑please文件编辑。
在不给用户提供完整的根壳的情况下管理盒子,大多数管理员都以一种或另一种形式具有正则表达式的经验,因此让我们以这种方式配置访问。
我看到了正则是正则不喜欢正则。没问题,您仍然可以使用please使用, please使用Ectect _的同行,或将每个字段/属性视为纯文本,并逃脱控制字符?(){} {} []+等。
please写有记忆安全的生锈。传统的C内存不安全,可能存在逻辑问题,但是该代码库相对较小。
我如何安装
它可能已经在您正在使用的存储库中:
如果没有,这是一个简单的安装:
please
cargo test && cargo build –release \\
&& install -o 0 -g 0 -m4755 target/release/ please target/release/ please edit /usr/local/bin\”>
git clone https://*gitl*ab.*com/edneville/please.git cd please cargo test && cargo build --release \\ && install -o 0 -g 0 -m4755 target/release/ please target/release/ please edit /usr/local/bin
拱:
pleaser && makepkg -isr\”>
pacman -Syu git fakeroot devtools binutils gcc rust git clone https://aur@aur.ar**chlin*ux.org/pleaser.git cd please r && makepkg -isr
Debian/Ubuntu:
apt install please r
Fedora(35):
dnf install please r
Netbsd:
pkgin install please r
Suse Tumbleweed:
zypper install please r
RHEL 7(EPEL):
please/
cargo test && cargo build –release && install -oroot -groot -D -m4755 target/release/ please target/release/ please edit /usr/local/bin\”>
yum install cargo git pam-devel git clone \'https://*gitl*ab.*com/edneville/please.git\' cd please / cargo test && cargo build --release && install -oroot -groot -D -m4755 target/release/ please target/release/ please edit /usr/local/bin
可选地将sudo设置为please的别名:
please\”
alias sudoedit=\” please edit\”\”>
alias sudo=\" please \" alias sudoedit=\" please edit\"
或者,如果您愿意,请在本地链接:
please edit sudoedit\”>
cd /usr/local/bin && ln -s /usr/local/bin/ please sudo && ln -s /usr/local/bin/ please edit sudoedit
我该如何设置
如果您不使用发行版本来验证requare_pass进行身份验证,则可能需要配置PAM。基于debian的需要与/etc/pam.d/相似的东西, please和/etc/pam.d/ please编辑:
#%PAM-1.0 # Set up user limits from /etc/security/limits.conf. session required pam_limits.so @include common-auth @include common-account @include common-session-noninteractive
在同一文件中,基于红帽的东西需要与此类似的东西:
#%PAM-1.0 auth include system-auth account include system-auth password include system-auth session optional pam_keyinit.so revoke session required pam_limits.so session include system-auth
接下来,配置您的 / etc / please .ini,用适当的值替换用户名。 INI分为部分选项,匹配和操作。
部分选项
| 部分 | 影响 |
|---|---|
| [部分名称] | 部分名称,列表模式显示 |
| 包括=文件 | 将文件作为另一个INI源,将在本节中跳过其他选项。 |
| 包括= dir | 将.Ini文件的DIR作为其他来源,以ASCII排序订单,将在本节中跳过其他选项。不匹配的文件将被忽略以允许编辑TMP文件。 |
包括和包括的包括和包括强制性论点。
比赛
假设用户是吉姆:
选项如下:
| 部分 | 影响 |
|---|---|
| 名称=正则 | 强制性,将配置应用于该实体。 |
| TARGET = REGEX | 可能会成为这些用户。 |
| 规则=正则 | 这是本节的命令正则命令正则默认值为 ^$ |
| notbefore = yyyymmdd | 该规则有效时的日期或yyyymmddhhmmss。 |
| notafter = yyyymmdd | 该规则到期时的日期或Yyyymmddhhmmss。 |
| dateMatch = [DAY DD MON HH:MM:SS UTC YYYY] | 正则匹配日期字符串 |
| type = [编辑/运行/列表] | 设置条目类型,run =执行,编辑= please编辑,list =显示用户权限 |
| group = [true/false] | 表示该名称=是指组而不是用户。 |
| hostName = REGEX | 主机适用的位置,默认为“ Localhost”。 |
| target_group =正则 | 设置时必须提供匹配的组 |
| dir =正则 | 允许在执行前切换到正则定义的目录。 |
| 允许=正则 | 与-a结合使用时,允许匹配环境键 |
| search_path =字符串 | 将search_path更改为:分离的目录列表 |
确切的对应物,必须完全匹配。当存在正则和确切规则时,确切的规则匹配将具有优先级。
| 部分 | 影响 |
|---|---|
| extcent_name =字符串 | 匹配此确切名称 |
| extrect_hostname =字符串 | 匹配此确切的主机名 |
| extcent_target =字符串 | 匹配此确切的目标用户 |
| extct_target_group =字符串 | 匹配此确切的目标组 |
| extcent_rule =字符串 | 匹配此确切规则 |
| extcent_dir =字符串 | 匹配此确切目录 |
动作
| 部分 | 影响 |
|---|---|
| 许可= [true/false] | 默认为true |
| require_pass = [true/false] | 默认为true |
| last = [true/false] | 当true时,匹配时停止处理,默认为false |
| 原因= [true/fals/tregex] | 设置时,需要-r提供的原因,默认为false |
| 超时= [数字] | 在整个几秒钟内等待密码输入多长时间 |
| syslog = [true/false] | 将此活动记录到Syslog,默认值= true |
| token_timeout = [数字] | 身份验证令牌在整个几秒钟内有效多长时间 |
| env_assign.key = value | 武力环境密钥要分配值 |
| exitcmd = [程序] | ( please编辑)如果程序退出0,请继续更换文件 |
| editmode = [八分代模式/keep] | ( please编辑)将目标文件模式设置为八进制模式,或保留现有文件的模式。如果不存在文件或未声明模式,则模式降至0600。如果存在文件,则在文件重命名之前读取和使用该模式 |
使用贪婪*。但是,在以前的版本中没有锚点(^和$),遵循发现的方法并坚持认为,在正则是锚点。这避免了/bin/bash匹配/home/user/bin/bash。
如果符合包含指令,则将处理该部分中的其他条目。纳入包括的情况也是如此。
规则的顺序很重要。最后一场比赛将获胜。设置许可证= false如果您想排除某些内容,但这应该非常罕见,因为许可证应与正则持续力相对,而不是使用正面匹配,然后使用负面匹配。最佳实践的规则是避免打开失败,然后尝试排除大多数宇宙。
例如,使用以下两个条目:
[jim_root_du] name = jim target = root permit = true rule = ^(/usr)?/bin/du (/home/[a-z0-9-]+\\s?)+ require_pass=false
[jim_postgres] name = jim target = postgres permit = true rule = /bin/bash require_pass = false
将允许运行DU,AS/usr/bin/du或/bin/du作为根:
$ please du /home/*
并将允许在Postgres时运行Bash Shell:
please -t postgres /bin/bash
postgres$\”>
$ please -t postgres /bin/bash postgres$
日期范围
对于大型环境,第三方需要在短时间内进行调试,这并不罕见。为了适应这个问题,有没有时间和时间段。这些可以是Yyyymmdd或Yyyymmddhhmmss。
使用Yyyymmdd的较短日期形式时,考虑了整天。
许多企业可能希望只有在有限的时间内允许使用用户,即使该个人在角色中处于永久性角色。
日期匹配
另一种日期类型是数据匹配项,这将部分限制为对日期字符串日dd -mon HH:MM:SS UTC年份的截面匹配项。
您可以允许一些一组用户在星期一执行一些房屋:
[l2_housekeeping] name = l2users group = true target = root permit = true rule = /usr/local/housekeeping/tidy_(logs|images|mail) datematch = ^Mon.*
默认部分
当匹配部分名称以默认为开头时,操作将保持设置,直到另一个匹配部分覆盖为止。重要的是要注意,允许= true将被隐式设置在匹配项上,因此,除非有充分的理由,否则默认部分中的set允许= false ,并且在随后的匹配部分中cluber = true 。有关更多详细信息, please参见.ini 。
please编辑
please编辑启用文件作为另一个用户的编辑。使用类型=编辑启用编辑而不是执行。第一个论点将传递给编辑。
默认情况下,文件权限位将反映现有文件权限。
如下所示:
- 用户运行编辑, please编辑-u root /etc /fstab
- /etc/fstab复制到/tmp/ please编辑。$ user.r8cyph9h._etc_fstab
- 用户的编辑器针对 / tmp / please编辑。$ user.r8cyph9h._etc_fstab
- 如果编辑器退出0,并且exitCMD退出0,则 /tmp / please编辑。$ user.r8cyph9h._etc_fstab被复制到/etc/fstab.lld3wrqb。 please编辑。复制。$用户
- /etc/fstab.lld3wrqb。 please编辑。复制。$用户将(目标)root拥有并重命名为 /etc /fstab
出口
在TMP编辑文件移动到源位置之前,可以使用ExITCMD。这可用于测试配置文件在重命名到位之前有效。
对于类似于Apache的内容,请考虑在运行测试以适应的测试之前将配置树复制到TMP目录。
其他例子
音频组的成员可以删除使用UserDel的userName_TMP的应用程序可能无法以username_tmp的形式进行清理的临时用户:
[user_remove_tmp_user]
name = audio
group = true
permit = true
require_pass = false
rule = /usr/sbin/userdel -f -r %{USER}_tmp\\.[a-zA-Z0-9]{10}
出于客房清洁的目的,可能允许某些用户销毁看起来大致像它们的日期盖章的ZFS快照:
[user_remove_snapshots]
name = data
group = true
permit = true
require_pass = false
rule = /usr/sbin/zfs destroy storage/photos@\\d{8}T\\d{6}
列出您可能会或可能不会做的事情:
please -l
You may run the following:
file: /etc/ please .ini
ed_root_list:root: ^.*$
You may edit the following:
file: /etc/ please .ini
ed_edit_ini:root: ^/etc/ please .ini$\”>
$ please -l
You may run the following:
file: /etc/ please .ini
ed_root_list:root: ^.*$
You may edit the following:
file: /etc/ please .ini
ed_edit_ini:root: ^/etc/ please .ini$
上面的输出表明我可能会运行任何内容,并且可以编辑please .ini配置。
或者,也许任何名称启动的用户admin都可以执行UserAdd和userDel:
[admin_users] name = admin_\\S+ permit = true require_pass = false rule = /usr/sbin/user(add -m|del) \\S+
文件
/ etc/ please .ini
大安装
对于大安装,请考虑以下内容:
合并
当所有成员最小特权匹配该集合时,您可以在其中使用组。最好在这里考虑人们通常会扮演相同的角色,因此请尝试以这种方式组织规则,因此请在单个名称Regex Match中使用组或列表帐户。
中央配置注意事项
为了避免服务中的单个故障点,应在单个位置生成INI配置并将其推入安装。 INI文件很快解析,而访问LDAP的情况不仅较慢,而且容易出错。
可能需要使用缓存,但是需要一种正(正确匹配)和负(不正确匹配)的形式。 10,000台具有数百个活跃用户对LDAP服务器进行查找的计算机可能会出现问题。
由于这些原因,我更喜欢Rsync分布,因为该协议高度有效,并且总体上会降低网络转移。
LDAP可能会在以后重新考虑。
贡献
如果您发现任何您觉得缺少的东西,无论最初的设计如何, please随时提出有或没有拉的请求的问题。
非常感谢找到错误和记录问题,我预先感谢您。
我欢迎用张开双臂拉的请求。
位置
该项目的源代码当前托管在GitLab上,并镜像到GitHub。板条箱上有一个板条箱。它还具有保留其他项目信息的主页。
为什么please在某个圈子里r?
该项目命名为“ please ”。在某些地方,该项目名称被其他事物用于其他事物。有些软件包将被命名please r,有些包裹会please 。唯一重要的是,如果您希望某人成为三明治,请首先说“ please ”。
