环境:OSX Sierra,Darwin Kernel Version 16.3.0
根本问题:我想在中央存储库中使用一堆 shell 脚本,它们有一个 #!/usr/bin/zsh。在我的 Mac 上,zsh 位于 /bin/zsh 中。
尝试的解决方案:我想创建一个符号链接
ln -s /bin/zsh /usr/bin/zsh
Run Code Online (Sandbox Code Playgroud)
我的用户帐户具有管理员权限,但我不是 root,我不想在这台 Mac 上启用 root 用户。因此我首先做了一个
sudo su
Run Code Online (Sandbox Code Playgroud)
获取具有 root 权限的 shell,然后执行ln命令。但是我仍然收到错误消息ln: /usr/bin/zsh: Operation not allowed。
问题:
为什么我会收到此错误消息?
我需要做什么来创建链接?
有没有更好的方法来实现我最初的目标?请注意,修复 #! 线不是一种选择。
我使用 vi 编辑器对 Ubuntu Linux 计算机上的配置文件进行了长时间的更改。不幸的是,我忘记先 sudo,所以现在我在编辑器中,但由于缺少权限而无法保存我的更改。我可以在该终端上追溯 sudo 用户,或者采取什么最佳行动方案?
我已经在Stack Overflow 中问过这个问题,但我被要求在这里发布。所以做同样的事情。
我使用我的java程序运行了这个命令-
sudo -u <username> -S pwd
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出-
command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo
Run Code Online (Sandbox Code Playgroud)
我尝试编辑 /etc/sudoers 但它已经包含
<username> ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
然后,我了解到这可以通过在 /etc/sudoers 中注释掉以下代码来完成
# Defaults requiretty
Run Code Online (Sandbox Code Playgroud)
此外,默认情况下,当尝试以其他用户身份使用 执行命令时sudo
,我们必须提供自己的密码。但这可以通过在 /etc/sudoers- 中进行以下更改来更改
Defaults targetpw
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否可以在 Java 中执行我的上述命令而无需在任何地方进行任何更改,即通过默认设置?
我最近刚刚在服务器上为作为 Upstart 服务运行的 Web 应用程序设置了一个远程 git repo。我想使用 post-receive 挂钩来触发更新应用程序代码所需的操作,然后停止然后重新启动 upstart 服务。这是我的 repo.git/hooks/post-receive 文件:
#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
echo "Checking out new files and restarting app"
echo $USER
git checkout -f
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service
Run Code Online (Sandbox Code Playgroud)
根据我在这里读到的信息:askUbuntu.com,让 upstart 命令以 root 身份执行的方法是编辑我的 visudo 文件。这是相关的片段:
%sudo ALL=(ALL:ALL) ALL
admin ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service /sbin/stop myapp-service
Run Code Online (Sandbox Code Playgroud)
但是当我 git push 到遥控器时,我得到如下输出:
$ git commit -am "test" && git push prod master
[master 59ffccd] test
1 file changed, 1 insertion(+), 1 deletion(-)
Counting objects: …
Run Code Online (Sandbox Code Playgroud) 我最近升级到雪豹。我注意到一些由 MacPorts 编写的文件安装时权限错误——它们的 umask 为 0077。我想我已经缩小了问题的范围:
port
命令通过调用sudo
。.bashrc
文件指定了 0077 的 umask。反正有没有sudo
使用旧的行为?现在,它是一种烦人,因为我必须使用sudo
运行像简单的命令port installed
,port outdated
等等。
(此问题在此MacPorts 票证中有更详细的描述。)
我发现了umask
sudo的选项,并在其中/etc/sudoers
添加了以下行:
Defaults umask=0022
Run Code Online (Sandbox Code Playgroud)
然而,这并没有起到期望的,因为实际所用的umasksudo
是工会与此默认掩码用户掩码的。为了重写的行为sudo
的umask的,直接使用默认的(即不是工会的用户和默认sudo的面膜),可以添加以下内容:
Defaults umask_override
Run Code Online (Sandbox Code Playgroud) 我在 OS X 上有一个只能以 root 身份运行的二进制程序。
我厌倦了sudo
每次调用它并输入密码时都预先准备好,并且希望它在我定期调用它时自动以 root 身份运行,而不需要输入密码。
该程序的所有者是root,其组是wheel。
我试图chmod ug+s
在执行时将 userid 和 groupid 设置为 root/wheel,但是当我在没有 sudo 的情况下运行程序时,它仍然抱怨它只能使用 sudo 或以 root 身份运行。
我正在尝试添加一个新的管理员用户,但是:
# adduser username admin
adduser: The user `username' does not exist.
# man sudoers
No manual entry for sudoers
# less /etc/sudoers
/etc/sudoers: No such file or directory
Run Code Online (Sandbox Code Playgroud)
系统是 Debian 7 (Wheezy) 我做错了什么?
为什么以下两次执行的输出不同?(我的最终命令中的变量需要双引号)
$ sudo su -c "echo `cat /root/root_file`"
cat: /root/root_file: Permission denied
$ sudo su -c 'echo `cat /root/root_file`'
Yay, highly classified content!
Run Code Online (Sandbox Code Playgroud) 我有几台机器,我定期 ssh 进入,只是为了使用sudo su
我的会话的其余部分作为某个特殊用途的用户登录。一般工作流程是:
mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff
Run Code Online (Sandbox Code Playgroud)
我想把它归结为一个可以别名的单行代码,这样我就可以为每台机器设置一个别名,然后在一个命令中到达我需要的地方,而无需键入sudo su - specialuser
样板。我也许me@othermachine
可以sudo su
在登录时设置为,但我想保持操作的灵活性,就像me
我需要的那样。
(注意:我无法控制othermachine
或控制它的设置方式;这是我在受雇时采用的既定工作流程。)
我的第一个想法是
ssh me@othermachine "sudo su - specialuser"
Run Code Online (Sandbox Code Playgroud)
和这种工作,但它没有提示我,^C
杀死它并将我注销,我认为其他各种事情也可能是错误的。
在阅读Run Remote ssh command with Full Login Shell 之后,我尝试了一些更奇特的东西,比如
ssh me@othermachine 'bash -l -c "sudo su - specialuser"'
Run Code Online (Sandbox Code Playgroud)
和
ssh me@othermachine 'bash -l -c …
Run Code Online (Sandbox Code Playgroud) 我总是读到我应该禁用 SSH 的 root 登录并使用具有 sudo 的用户登录。但两者之间的区别在哪里:
ssh root@vps
Run Code Online (Sandbox Code Playgroud)
和
ssh myuser@vps
sudo -i
Run Code Online (Sandbox Code Playgroud)
我没有对我的服务器的物理访问权限,并且需要以某种方式进行每次远程访问的 root 权限。这里唯一的优势是用户名未知吗?
您可以在服务器上打开的最大安全漏洞之一是允许通过 ssh 直接以 root 身份登录,因为任何破解者都可以尝试暴力破解您的 root 密码,如果他们能找出您的密码,则有可能访问您的系统。
最好有一个您经常使用的单独帐户,并在必要时简单地 sudo 到 root。