Sudo root 权限是针对特定时间授予的,但仅限于一个终端。如果我想在那个时间段内在另一个终端中使用 sudo,我必须再次输入密码。如何强制 sudo 跨终端工作?
(Parallels Desktop 9,最新版本)
按照说明,我切换到root:
$ su - root
$ whoami
root
$ echo $EUID
0
Run Code Online (Sandbox Code Playgroud)
然后执行安装程序:
$ cd /media/cdrom0
$ ./install
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
sudo: unable to execute ./install: Permission denied
Run Code Online (Sandbox Code Playgroud)
什么?我是根!这是怎么回事?我仔细检查以确保设置了执行位:
$ ls -lA | grep install$
-r-xr-xr-x 1 root root 17284 Oct 25 09:22 install
Run Code Online (Sandbox Code Playgroud)
是的。人们在网上说你需要输入sudo后安装脚本拖动到终端。所以我这样做了,这个命令就是这样形成的:
$ sudo '/media/cdrom0/install'
sudo: unable to execute /media/cdrom0/install: Permission denied
Run Code Online (Sandbox Code Playgroud)
这里的解决方案是什么?
我需要允许非 root 用户挂载/卸载设备。说到 UNIX,我完全是个菜鸟,所以请帮我把它弄糊涂。
我一直在寻找interwebz的所有答案,似乎每个人都给出了相同的答案,即修改/etc/fstab
以将该设备包含在该user
选项中(或者users
,两者都尝试过)。我这样做了,它仍然说mount: only root can do that
。
这是我的 fstab 的内容:
# /etc/fstab:静态文件系统信息。 # # 使用 'vol_id --uuid' 打印一个通用唯一标识符 # 设备; 这可以与 UUID= 一起使用,作为一种更强大的设备命名方式 # 即使添加和删除磁盘也能正常工作。请参见 fstab(5)。 # # proc /proc proc 默认值 0 0 # / 在安装过程中位于 /dev/mapper/minicc-root UUID=1a69f02a-a049-4411-8c57-ff4ebd8bb933 / ext3 relatime,errors=remount-ro 0 1 # /boot 在安装过程中位于 /dev/sda5 UUID=038498fe-1267-44c4-8788-e1354d71faf5 /boot ext2 relatime 0 2 # 安装期间交换位于 /dev/mapper/minicc-swap_1 UUID=0bb583aa-84a8-43ef-98c4-c6cb25d20715 无交换 sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 用户,noauto,exec,utf8 0 0 /dev/scd0 …
我已经设置了 .ssh/authorized_keys 并且能够使用 pub/private 密钥使用新的“用户”登录......我还将“用户”添加到 sudoers 列表中......我现在遇到的问题是什么时候我尝试执行一个 sudo 命令,简单的像:
$ sudo cd /root
Run Code Online (Sandbox Code Playgroud)
它会提示我输入我输入的密码,但它不起作用(我使用的是我设置的私钥密码)
另外,我已经禁用了用户的密码
$ passwd -l user
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
某处我最初的评论被误解了......
我正在尝试强化我的系统......最终目标是使用公钥/私钥进行登录而不是简单的密码身份验证。我已经想出了如何通过authorized_keys 文件来设置所有这些。
此外,我将最终阻止通过 root 帐户登录服务器。但在我这样做之前,我需要 sudo 为第二个用户(我将一直登录系统的用户)工作。
对于第二个用户,我想阻止常规密码登录并仅强制发布/私钥登录,如果我不通过“ passwd -l user 锁定用户......那么如果我不使用密钥,我仍然可以使用常规密码进入服务器。
但更重要的是,我需要让 sudo 与禁用密码的用户一起使用公钥/私钥设置。
编辑:好的,我想我已经明白了(解决方案):
1) 我已经调整了 /etc/ssh/sshd_config 并设置了PasswordAuthentication no
这将阻止 ssh 密码登录(确保在执行此操作之前设置了有效的公钥/私钥
2)我调整了sudoers列表visudo
并添加了
root ALL=(ALL) ALL
dimas ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
3) root 是唯一有密码的用户帐户,我正在测试两个没有设置密码的用户帐户“dimas”和“sherry”(密码为空,passwd -d user
)
以上基本上可以防止每个人使用密码登录系统(必须设置公钥/私钥)。
此外,sudoers 列表中的用户具有管理员权限。他们也可以su
到不同的帐户。所以基本上“dimas”可以sudo su sherry
,但是“dimas不能做su sherry
。同样,不在sudoers列表中的任何用户都不能做su user …
我在我的朋友服务器上有 sudo 访问权限,运行 centos-6.3,但是当我尝试运行一些命令时,例如sudo vim /var/www/html/index.html
出现错误sudo: vim: command not found
,但是我可以运行sudo su
,然后vim /var/www/html/index.html
它按预期工作。
echo $PATH
并且sudo echo $PATH
都产生:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
Run Code Online (Sandbox Code Playgroud)
sudo which vim
然而产生:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
Run Code Online (Sandbox Code Playgroud)
我试过添加
export PATH=$PATH:/usr/local/bin
Run Code Online (Sandbox Code Playgroud)
在/root/.bashrc
其使用时,作为固定的问题,sudo su
而不是只sudo <command>
。
我如何sudo <command>
上班?
我有服务器 A 和服务器 B(都是 Ubuntu 10.04 LTS)执行不同的任务。服务器 A 需要戳服务器 B,它会生成一个文件,并在完成后通过 scp 将其发送回服务器 A。这一切都在内部进行,我不太关心安全问题。SSH 密钥交换已经在服务器 A 和 B 之间执行并且工作正常。
在服务器 B 上,脚本generateOfflineSig
看起来像
#!/bin/bash
echo "in script"
sudo apt-offline set offline_package.sig --install-packages "$0"
echo "after sudo"
scp offline_package.sig jeff@servera:/tmp
Run Code Online (Sandbox Code Playgroud)
同样在服务器 B 上,visudo 有这个条目:
jeff ALL=NOPASSWD: ALL
如果我sudo ls
在服务器 B 上执行,这会起作用……没有询问密码。
不幸的是,SSH 总是要求在服务器 A 上输入密码:
jeff@servera:~$ ssh -t jeff@serverb /home/jeff/generateOfflineSig "incron"
in script
[sudo] password for jeff:
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?这个过程不能被密码输入中断。
简而言之:如何让 sudo 每次都不刷新 PATH?
我在我的服务器上部署了一些网站(Debian 测试),这些网站是用 Ruby on Rails 编写的。我使用 Mongrel+Nginx 来托管它们,但是当我需要重新启动 Mongrel(例如,在进行一些更改之后)时会出现一个问题。
所有站点都在 VCS 中检查(git,但这并不重要)并且将所有者和组设置为我的用户,而 Mongrel 运行在权限受到严格限制的 mongrel 用户下。所以Mongrel必须在root下启动(它可以自动改变UID)或mongrel。
为了管理 mongrel,我使用 mongrel_cluster gem,因为它允许只用一个命令启动或停止任意数量的 Mongrel 服务器。但是它需要目录 /var/lib/gems/1.8/bin 位于 PATH 中:这不足以以绝对路径启动它。
在 root .bashrc 中修改 PATH 没有任何改变,调整 sudo 的 env_reset 和 env_keep 也没有。
所以问题是:如何将目录添加到 PATH 或将用户的 PATH 保留在 sudo 中?
更新:一些例子
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults env_keep = "PATH"
root ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env …
Run Code Online (Sandbox Code Playgroud) 每当我sudo su
从我的正常zsh
(使用oh-my-zsh框架)运行时,sh
默认情况下我被迫使用旧的 Bourne shell ( )(显然;这是大多数 *nix 类系统上的标准行为)。如果我在运行后zsh
从内部sh
运行sudo su
,我会得到 Z shell,但没有 oh-my-zsh 的改进。
有没有办法将shellsudo su
启动更改为zsh
?如果是这样,是否也可以zsh
使用oh-my-zsh
?
我使用的是 OS X 10.8.4。
如何限制我的用户仅执行选择性命令。我在 tomc 组中有一个用户 tomc。我需要这个用户成为 sudo 用户,然后限制 bash。我已经尝试在/etc/sudoers
文件中遵循以下代码,但它不起作用,因为用户能够执行其他命令,例如mkdir
,rm
%tomc ALL=/bin/bash,/usr/bin/vim /*
Run Code Online (Sandbox Code Playgroud) 环境: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。
问题:
为什么我会收到此错误消息?
我需要做什么来创建链接?
有没有更好的方法来实现我最初的目标?请注意,修复 #! 线不是一种选择。