我想做以下事情:
$ echo "secrets" > protected_file
Run Code Online (Sandbox Code Playgroud)
但问题是,我没有“protected_file”的文件权限,所以我尝试以下操作:
$ sudo echo "secrets" > protected_file
Run Code Online (Sandbox Code Playgroud)
但这也不起作用,因为只有命令的“echo”部分在 sudo 下执行。
这样做的正确方法是什么?
——杰弗里·李
我正在从 php 进行系统调用,它是
`sudo /usr/bin/perl -pi -e 's/foo/bar/g' /tmp/newxml.xml`;
Run Code Online (Sandbox Code Playgroud)
在 php cli 中运行良好。但是不能通过浏览器在 php 中工作,因为 apache 没有所需的执行权限。如何使 apache 成为一个 sudoer 以允许仅运行 /usr/bin/perl ?
我知道必须编辑 /etc/sudoers 才能做到这一点,但我不确定如何完成。任何指针?
我正在运行 RHEL 5.5
我必须运行这个命令来初始化gitosis:
sudo -H -u git gitosis-init < /home/ec2-user/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)
但这要求我输入 ec2-user 的密码:
$ sudo -H -u git gitosis-init < id_rsa.pub
[sudo] password for ec2-user:
Run Code Online (Sandbox Code Playgroud)
我没有密码,因为我使用默认的 .pem 密钥文件登录。
我知道我可以以 git 用户身份登录并执行此操作,但是还有其他方法吗?
更新:
使用 Linux AMI 12.09(微实例),在区域 us-east-1(弗吉尼亚北部)
系统管理员存在于所有环境的 sudoers 文件中,但其他 sudoers 没有。不同的环境都有略微不同的sudoer。大多数时候,90% 的用户是相同的,10% 的用户不同,所以我们不能只有一个 sudoers 文件来处理所有事情。
现在,我们正在使用具有 10 个不同文件的 puppet,名称分别为 sudoers.production1、sudoers.production2、sudoers.production3、sudoers.testing1、sudoers.staging1 等等。
Puppet 然后根据服务器的 $domain(例如:dbserver.staging1.acme.com)或 $hardwaremodel 选择要部署的文件。它工作正常,但维护这么多文件是一场噩梦。
我想根据服务器的域自动生成 sudoers 文件,并且只有一个大文件具有所有用户和所有环境的所有 sudoers 权限。看起来像的东西:
User_Alias ADMINS = abe, bob, carol, dave
case $domain {
"staging1.acme.com" {
#add dev1,dev2,tester1,tester2 to sudoers file
}
"testing2.acme.com" {
#add tester1, tester3, tester4 to sudoers file
}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?欢迎提供替代方案的建议。我很感激任何提示。
更新 1:
出于安全原因,我们不希望将位于 puppet 客户端上的文件夹中的一堆文件连接起来,以防有人将文件(无论是否恶意)放入其中并破坏组合文件或在其中插入某些内容。
最重要的是,为了可用性,我们希望将 puppet 服务器上与 sudoers 相关的文件(片段或完整)的数量保持为 3(生产/阶段/测试)或最好是 1 个文件。该文件将(以某种方式)在 puppet 服务器上生成 sudoers 文件,并将一个自定义文件发送到每个 puppet 客户端。
这样做的目的是只在单个文件中搜索用户名,并比在 11 个文件中更快地删除它。将用户添加到一堆环境中时,不会那么快,但只需要打开和查看一个文件,大大减少了遗漏的机会。
我们的 Sudo 版本是 1.6.9p8,所以我们不能使用 …
也许我的问题很愚蠢,但我真的被困住了......
我的操作系统是 Ubuntu 12.04
我的 sudoers:
# # 必须以 root 身份使用“visudo”命令编辑此文件。 # # 请考虑在 /etc/sudoers.d/ 中添加本地内容而不是 # 直接修改这个文件。 # # 有关如何编写 sudoers 文件的详细信息,请参阅手册页。 # 默认值 env_reset 默认值 mail_badpass 默认secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # 主机别名规范 # 用户别名规范 # Cmnd 别名规范 # 用户权限说明 根 ALL=(ALL:ALL) ALL dart ALL=(ALL) NOPASSWD: ALL # admin组的成员可以获得root权限 %admin ALL=(ALL) ALL # 允许组 sudo 的成员执行任何命令 %sudo ALL=(ALL:ALL) ALL # 有关“#include”指令的更多信息,请参见 sudoers(5): #includedir /etc/sudoers.d
一些控制台命令输出:
$ id 飞镖 uid=1000(dart) gid=1000(dart) 组=1000(dart),24(cdrom),30(dip),46(plugdev),107(lpadmin),124(sambashare) $ sudo ls /root/ [sudo] dart 的密码:
为什么系统询问sudo的密码?我怎样才能避免它?
我遇到一种情况,我希望主管理员用户(所有人都使用 sudo)将无密码 sudo 作为一个命令的另一用户。据我所知, /etc/sudoers 中应该给出以下内容:
ramo ALL=(otherUser) NOPASSWD: /usr/bin/command
ramo ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)
但这两行似乎冲突,或者第二行覆盖了第一行。关于如何实现这一目标有什么想法吗?
干杯
拉莫
编辑:事实证明我在指定用户时稍微误解了 sudo 的工作原理。我的印象是,如果您有 ALL=(otherUser) 那么您不需要“sudo -u otherUser”,而只需 sudo 即可。事实并非如此。
用户smithj在/etc/sudoers文件中列出:
root ALL=(ALL) ALL
smithj ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)
smithj通过putty登录系统。他试图sudo但得到这个:
sudo adduser jonesjp
Sorry, try again.
Sorry, try again.
Sorry, try again.
sudo: 3 incorrect password attempts
Run Code Online (Sandbox Code Playgroud)
他永远不会被提示输入密码。这是在 CentOS 6 上。
这曾经有效,但另一位管理员进行了一些未知的更改,导致此问题并且他不可用。
如何禁用 EC2 实例上默认 ubuntu 用户的无密码 sudo 访问?这样做安全吗?
如何从 sudo 用户检查 root 环境变量?我尝试了 su 和 sudo 的各种键和组合,但没有运气。
比如普通用户$HISTFILESIZE=2000,root用户9999。
vagrant@default-debian-78-64-nocm:~$ echo $HISTFILESIZE
2000
vagrant@default-debian-78-64-nocm:~$ sudo -i
root@default-debian-78-64-nocm:~# echo $HISTFILESIZE
9999
Run Code Online (Sandbox Code Playgroud)
但是当我尝试通过 sudo 获取 root $HISTFILESIZE 时 - 它总是返回 2000:
vagrant@default-debian-78-64-nocm:~$ sudo -i echo $HISTFILESIZE
2000
vagrant@default-debian-78-64-nocm:~$ sudo -i su - -c "echo $HISTFILESIZE"
2000
vagrant@default-debian-78-64-nocm:~$ sudo -i bash -c "echo $HISTFILESIZE"
2000
vagrant@default-debian-78-64-nocm:~$ sudo -i bash -l -c "echo $HISTFILESIZE"
2000
Run Code Online (Sandbox Code Playgroud) 当我在 MacOS 上命令时:
> sudo mv /usr/bin/php /usr/bin/php-52
Run Code Online (Sandbox Code Playgroud)
我得到结果:
mv: rename /usr/bin/php to /usr/bin/php-52: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我能做什么?谢谢!
sudo ×10
amazon-ec2 ×2
linux ×2
password ×2
apache-2.2 ×1
bash ×1
centos ×1
git ×1
mac-osx ×1
php ×1
pipe ×1
puppet ×1
redhat ×1
ubuntu ×1
ubuntu-12.04 ×1