当您运行时sudo
,它不会在您上次运行后至少 5 分钟内询问密码。Defaults timestamp_timeout=0
您可以通过添加到sudoers
with来更改此超时sudo visudo
。这也立即将其锁定。
我的问题是,是否有办法只做一次,而没有visudo
.
我希望特定用户递归更改特定目录的所有内容的所有者和组,并且仅更改该目录。目录是一种“收件箱”,服务在其中写入文件和子目录。
目前,我有一个管理员sudo chown
,但我希望目标所有者自己做,而不需要该用户拥有更多权限。假设原所有者是“headsman”,最终所有者应该是“audience”。两个用户都不在同一个组中。
sudo chown -R audience:watchers /usr/files/pathofdir
不太对,因为我不希望观众有无限的权限使用 chown。我的第一个猜测是尝试在 /usr/bin/chown 和 /usr/bin/chgrp 的许可下向 /etc/sudoers 添加“受众”。但这太权威了。
我想专门为观众编写一个脚本,但我不知道如何使该脚本具有正确的权限,仅此而已。
有什么好方法可以做到这一点?
我试图了解直接与 root 进行 ssh 或在维护服务器的上下文中创建辅助 sudo 用户之间的技术论点/安全含义。为了澄清,我们谈论的是由单个管理员拥有的服务器。对于在机器上工作的多人来说,很明显,每个真实的人都有唯一的用户和细粒度的权限有审计跟踪的好处。
我的想法是,如果这是一个桌面站,这是有道理的,建议使用非 root 用户进行日常工作,但在服务器上,您通常登录来维护它,并且 99% 的时间您的所有活动都需要 root权限。
那么创建一个“代理”用户是否有任何安全优势,您无论如何都要 sudo 到 root,而不是直接提供对 root 的 ssh 访问?
我能想到的唯一好处是通过默默无闻的安全性,即机器人通常会尝试探测“root”用户。但是从我的角度来看,如果sudoers的用户被盗用了,就和盗用root用户一样,所以游戏结束。
此外,大多数远程管理框架、NAS 系统、管理程序都鼓励使用 root 用户进行 Web 登录。
我在 Debian 10 (Buster) 和 Apache 2.4.38 上运行一个 Web 服务器。我创建了一个acme
运行脚本以更新 TLS 证书的特殊用户。
$ cat /etc/passwd | grep ^acme
acme:x:1002:1002::/var/acme:/usr/bin/nologin
$ cat /etc/group | grep ^acme
acme:x:1002:
acme
更新证书后,应允许此用户重新加载 Apache 2 配置。所以我将此行添加到我的/etc/sudoers
using 中visudo(8)
:
%acme ALL=(root) NOPASSWD: /etc/init.d/apache2 reload
不幸的是,这不起作用:
$ sudo -u acme /etc/init.d/apache2 reload
[....] Reloading apache2 configuration (via systemctl): apache2.serviceFailed to reload apache2.service: Access denied
See system logs and 'systemctl status apache2.service' for details.
failed!
我错过了什么吗?
试图做一个web界面IPtables管理。
创建了一个文件test.php
$output = shell_exec('sudo bash /usr/bin/iptables.sh 2>&1');
echo $output;
给 /usr/bin/iptables.sh NOPASSWD 这样我就可以通过 apache 使用 sudo 执行文件,而无需使用密码
sudo iptables -L
sudoers 文件:
apache ALL=(root) NOPASSWD: /usr/bin/iptables.sh
但我仍然收到错误
我们相信您已经收到了本地系统管理员的常规讲座。它通常归结为以下三件事:#1) 尊重他人的隐私。#2) 打字前三思。#3) 权力越大,责任越大。sudo:需要终端才能读取密码;使用 -S 选项从标准输入读取或配置 askpass 助手{"mode":"full","isActive":false}
但是,如果我使用
apache ALL=(root) NOPASSWD: ALL
一切正常。
我仔细检查了我的目录并使用了确切的路径
[root@CentOS bin]# readlink -f iptables.sh
/usr/bin/iptables.sh
这里超级无能,有人可以帮我指路吗?:'(
我在这里关注本教程:
https://kifarunix.com/how-to-configure-sudo-via-openldap-server/
很多都是有道理的,但对于 openldap 来说仍然是新的,所以其中一些也很神秘。我让 openldap 运行,用户在其他机器上进行身份验证,甚至使用 phpldapadmin。所以是时候让 sudoers 为一些用户工作了。我运行了sudoers2ldif
命令,得到了一个类似于教程中显示的文件,并进行了相应的编辑。当它运行ldapadd -Y EXTERNAL -H ldapi:/// -f sudoers_modified.ldif
时失败并出现错误:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=defaults,ou=SUDOers,dc=apo,dc=local"
ldap_add: Invalid syntax (21)
additional info: objectClass: value #1 invalid per syntax
21 是 .ldif 文件的行号吗?或其他一些错误代码...也不知道 objectClass 命令上的无效内容...发布的是下面的 ldif 文件。
dn: cn=defaults,ou=SUDOers,dc=bbb,dc=local
objectClass: top
objectClass: sudoRole
cn: defaults
description: Default sudoOption's go here
sudoOption: !visiblepw
sudoOption: always_set_home
sudoOption: match_group_by_gid
sudoOption: always_query_group_plugin
sudoOption: env_reset
sudoOption: env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
sudoOption: env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
sudoOption: env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
sudoOption: env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
sudoOption: env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
sudoOption: secure_path = /sbin:/bin:/usr/sbin:/usr/bin
dn: cn=sudo,OU=SUDOers,dc=bbb,dc=local
objectClass: top
objectClass: sudoRole
cn: sudo
sudoUser: bobby
sudoHost: ALL
sudoRunAsUser: ALL
sudoCommand: ALL
也许 sudoRole 需要以某种方式添加?我为此成功添加的另一个 ldif 是:
dn: ou=SUDOers,dc=bbb,dc=local
objectCLass: top
objectClass: organizationalUnit
ou: SUDOers
description: BBB SUDOers container
我在这里找到了另一个教程:
https://forums.centos.org/viewtopic.php?t=73807
由于类似的信息略有不同,我没有使用这个,因为发布的一个 ldif 文件有很多东西说它是“自动生成的”,我不知道它是如何或从哪里来的。
在一个答案之后,我相信上面链接中显示的文件包含数据:
vi /testfolder/sudoers.ldif
#------------------------
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 b181185c
dn: cn=sudoers,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: sudoers
olcAttributeTypes: {0}( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s
) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Substrin
gsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {1}( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s
) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Substring
sMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {2}( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Com
mand(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4
.1.1466.115.121.1.26 )
olcAttributeTypes: {3}( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(
s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3
.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {4}( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Opti
ons(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466
.115.121.1.26 )
olcAttributeTypes: {5}( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'U
ser(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.
1466.115.121.1.26 )
olcAttributeTypes: {6}( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC '
Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.
1.1466.115.121.1.26 )
olcAttributeTypes: {7}( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' DESC 'S
tart of time interval for which the entry is valid' EQUALITY generalizedTim
eMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.12
1.1.24 )
olcAttributeTypes: {8}( 1.3.6.1.4.1.15953.9.1.9 NAME 'sudoNotAfter' DESC 'En
d of time interval for which the entry is valid' EQUALITY generalizedTimeMa
tch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1
.24 )
olcAttributeTypes: {9}( 1.3.6.1.4.1.15953.9.1.10 NAME 'sudoOrder' DESC 'an i
nteger to order the sudoRole entries' EQUALITY integerMatch ORDERING intege
rOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
olcObjectClasses: {0}( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' DESC 'Sudoer
Entries' SUP top STRUCTURAL MUST cn MAY ( sudoUser $ sudoHost $ sudoCommand
$ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoOrder $ su
doNotBefore $ sudoNotAfter $ description ) )
一旦我意识到该文件是我添加它的架构并最终使这一切正常工作,因此我接受了答案,即使我不得不深入研究我正在做的事情。顺便说一句,我的 ldap 中没有使用架构文件,我必须通过 ldapadd 添加它
大家好,有人可以帮我用 scrit shell 获取这个命令吗?
root@VPS:/work# cpan
Loading internal logger. Log::Log4perl recommended for better logging
CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.
Would you like to configure as much as possible automatically? [yes] yes
Autoconfiguration complete.
commit: wrote '/root/.cpan/CPAN/MyConfig.pm'
You can re-run configuration any time with 'o conf init' in the CPAN shell
Terminal does not support AddHistory.
To fix enter> install Term::ReadLine::Perl
cpan shell -- CPAN exploration and modules installation (v2.22)
Enter 'h' for help.
cpan[1]>install Geo::IP
我正在尝试在没有 root 身份的情况下重新启动服务。这是正在使用命令的代码片段
template {
source = "{{vault_template_dir}}/agent.crt.tpl"
destination = "{{vault_tls_dir}}/agent.crt"
command = "/usr/bin/systemctl restart vault.service"
}
在研究和阅读了类似的问题之后,我尝试通过编辑/etc/sudoers
文件并添加以下行来为我使用的组(user=vault,group=vault)提供一个有限的 sudo 命令:
%vault ALL=(root) NOPASSWD: /usr/bin/systemctl restart vault.service
但是,当我尝试运行命令时仍然出现错误。错误日志文件:
Apr 4 23:27:41 xxxxxx vault[133973]: Failed to restart vault.service: Interactive authentication required.
保险库服务
[Unit]
After=network.service hostname.service consul-init.service consul.service
Description="Hashicorp Vault - A tool for managing secrets"
Documentation=https://www.vaultproject.io/docs/
StartLimitInterval=200
StartLimitBurst=5
[Service]
User=vault
Group=vault
ExecStart=/usr/bin/vault server -config="{{vault_server_config_file}}"
ExecReload=/usr/bin/kill -HUP $MAINIP
CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK
LimitNOFILE=65536
LimitMEMLOCK=infinity
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
有人可以帮我解决这个问题吗?
我正在尝试使用newusers
ubuntu 18 上的 util 从文件中批量创建一些用户。
以 root 用户身份在 cron 中运行时,没有任何反应。当我手动运行命令时,它会按预期工作并在文件中创建用户。这是我的 crontab,每分钟运行一次以进行测试:
*/1 * * * * newusers /tmp/ftp_users.txt
像这样手动运行它很好newusers /tmp/ftp_users.txt
。
我不知道让这个命令在 cron 中运行我缺少什么。
我可以使用 sudo mount.cifs 挂载我的驱动器......我可以通过 sudo umount /mnt/mountpoint 卸载
它提示我输入密码,所以我将 sudoers 文件更改为 NOPASSWD:ALL 现在它没有提示我。
我有一个应用程序,我希望能够在运行该应用程序时由任何有权访问该应用程序的人安装驱动器,但是如果我这样做 sudo -u username mount.cifs.... 然后它会提示我输入用户密码尝试做这个。这将全部被编写脚本或执行命令,就像从命令行一样。
我需要它做的是为运行应用程序的任何人提供至少执行挂载命令的能力,尽管我也希望它能够创建目录(mkdir),以便我可以从控制文件创建挂载和然后它可以创建目录,然后根据给定的参数进行连接。我已经编写了代码来检查挂载是否存在,如果不存在则创建或连接,但不知道如何解决 sudo 命令的工作原理。
我想避免写这个,以便每次资源不可用并且挂载下降时,它不需要发送消息让某人登录并手动执行此操作。