在 AWS 和 Ansible 1.9 上使用 Ubuntu 14.04 并出现以下权限错误:
$ whoami
>> ubuntu
$ mkdir -p $HOME/.ansible/tmp/testfolder
>> mkdir: cannot create directory ‘/home/ubuntu/.ansible/tmp/testfolder’: Permission denied
$
$ # this works!!
$ sudo mkdir -p $HOME/.ansible/tmp/testfolder
$ # this also works!! (maybe ubuntu doesn't have sudo privileges...)
$ sudo rm -rf $HOME/.ansible/tmp/testfolder
$
$ # ???
$ sudo adduser ubuntu sudo
>> The user `ubuntu' is already a member of `sudo'.
如果ubuntu
属于该sudo
组,为什么我不能创建该目录而sudo
可以?我如何才能真正赋予ubuntu
的权限sudo
?
编辑: 以供参考,
$ ls -ld /home/ubuntu/.ansible/
>> drwxr-xr-x 4 root root 4096 Sep 8 00:20 /home/ubuntu/.ansible/
答案1
我认为您不清楚sudo
如果用户是某个组的成员,该组代表什么。
默认情况下,如果用户是组的成员sudo
,则该用户可以root
通过模拟 root 身份运行命令:
sudo some command
文件中有一行/etc/sudoers
可以实现这一点:
%sudo ALL=(ALL:ALL) ALL
再次强调,成为组成员sudo
并不意味着您root
或不授予您运行仅可root
即时运行的命令的权限。您始终需要sudo
在该命令前使用。因此,如果用户不是组成员,则sudo
该用户将无法运行任何命令,即使root
使用sudo
。
就你的情况而言,当你运行时:
mkdir -p $HOME/.ansible/tmp/testfolder
您将收到权限被拒绝的消息,因为该目录/home/ubuntu/.ansible
归所有者所有root
,并且其他人无权对其进行写入。
另一方面,当您使用时:
sudo mkdir -p $HOME/.ansible/tmp/testfolder
您正在模仿root
谁有权限写入该目录,因此命令成功了。