我有一个共享主机帐户,我使用 ssh 登录。例如,当我输入时,su我有这个输出:
su: must be run from a terminal
这个错误是否与我没有足够的权限或其他原因有关?
我正在使用 SuSE Linux Enterprise 并且我知道有一个命令
su root
Run Code Online (Sandbox Code Playgroud)
用于更改为 root 登录。但是反过来呢?如果我更愿意返回我的用户帐户,该怎么做?
我在 shell 中运行一个 java 程序并将进程 ID 写入文本文件。所以当我这样做时:
nohup java app.Main > /dev/null 2>&1 &
echo $! > /var/run/app.pid
Run Code Online (Sandbox Code Playgroud)
有用。但我真的想以另一个用户的身份运行它
su - appuser -c "nohup java app.Main > /dev/null 2>&1 &"
echo $! > /var/run/app.pid
Run Code Online (Sandbox Code Playgroud)
这不起作用。有没有办法获取使用 -c 选项启动的命令的进程 ID?
我在使用 ssh 到远程系统时导出LC_ALL="en_US.UTF-8"(通过sendEnvssh_config)。当我su - user123这个变量被登录shell重置时。LC_xxx在远程系统上以其他用户身份执行登录 shell 时,有没有办法保留此变量(以及其他变量)?
我意识到我可以在执行 shell 或~/.bashrc目标用户的输入后手动导出变量,但是ssh如果可能的话,我宁愿尝试保留发送的原始值。谢谢。
编辑:我确实需要初始化用户环境的特定部分,这就是使用的原因su -。我只想保存LC_xxx
是否可以运行命令
-(破折号)开头,例如/usr/bin/echo -n fooapache:apachesu/sbin/nologin?我试过:
su -s "/usr/bin/echo" -g apache apache -n foo
su: invalid option -- 'n'。看起来第一个参数可能不是以破折号开头。su -c "/usr/bin/echo -n foo" -g apache apache
nologin: invalid option -- 'c'。-c如果登录 shell 是,看起来不能使用/sbin/nologin我无法确定为什么su不像 PAM 配置所暗示的那样表现。简而言之,使用su成为另一个用户应该根据 PAM 配置加载辅助组,但pam_group不添加/etc/security/group.conf组,我们最终只得到我们的 LDAP 组。当以用户身份通过 SSH 登录时,您拥有来自两个来源的组。
我们的设置与默认的 CentOS 6.5 相差不远,我们使用 SSSD 通过 Kerberos / LDAP 提供登录,但/etc/pam.d据我所知,尚未对任何内容进行直接更改,这些更改是由以下人员进行的:
authconfig --updateall --enablesssd --enablesssdauth --enablemkhomedir
Run Code Online (Sandbox Code Playgroud)
当然有单独的/etc/pam.d/suand /etc/pam.d/sshd,但它们都包含相同的文件 wherepam_group.so被调用(分别包括system-auth和password-auth,但这两个包含的文件是相同的)。
的相关部分/etc/pam.d/su:
#%PAM-1.0
auth sufficient pam_rootok.so
auth include system-auth
Run Code Online (Sandbox Code Playgroud)
的相关部分/etc/pam.d/sshd:
#%PAM-1.0
auth required pam_sepermit.so
auth include password-auth
Run Code Online (Sandbox Code Playgroud)
在包含的文件中:
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the …Run Code Online (Sandbox Code Playgroud) 我无法在 OpenVZ 容器上切换到用户 jenkins。仍然有一个 jenkins 进程在运行,它是由这个用户启动的。
我试过了# su jenkins;它不会切换到 jenkins 用户。没有错误信息。
/etc/groups显示有一个 jenkins 组:jenkins:x:498:. 我试过了id -g jenkins,得到了这个:jenkins(uid=497)。有一个/etc/passwd条目:
jenkins:x:497:498:Jenkins Continuous Build server:/var/lib/jenkins:/bin/false
Run Code Online (Sandbox Code Playgroud)
这个容器什么也没发生。我在它停止后一段时间重新访问它,我启动它并在这种情况下找到它。
所以有一个 jenkins 用户。为什么我不能切换到它?
我正在阅读 Ubuntu 14 强化指南,这是建议之一:
确保只有 sudo 组中的用户才能运行 su 命令以充当(或成为)root 用户似乎是一个明智的想法:
dpkg-statoverride --update --add root sudo 4750 /bin/su
我查看了dpkg-statoverride命令,但我仍然无法弄清楚上面的命令到底在做什么?
这似乎意味着默认情况下 Ubuntu 14 允许任何人 sudo。为了测试,我创建了一个新用户,以该用户身份登录,尝试 sudo 并且失败了——这很好。
那么以上建议的目的是什么?
我需要以 root 身份 su 并将命令作为一行运行。这是在 python 脚本中使用的。我正在寻找的是:
$ su root [some-magic] sh /home/jay/script-that-needs-executing-as-root.sh
<script output>
Run Code Online (Sandbox Code Playgroud)
这是在一个公共的 ubuntu 服务器上。运行此操作的帐户没有密码,但已设置好,所以基本上所有内容都无法访问,除了只读的python 脚本,在 ~/.profile 中,最后是
cd ~/py/main
python3 start.py
logout
Run Code Online (Sandbox Code Playgroud)
因此,他们无法真正访问服务器。在 python 脚本中,我让 su 工作,所以如果需要,用户可以输入shellasrootpython 脚本,输入 root 密码并运行命令,但我正在寻找一种以编程方式执行此操作的方法。
TL; DR - 在没有 sudo 特权的帐户上,我需要在一行中以 root 身份运行 shell 脚本。
在Debian 10中我想创建一个无法直接登录的用户。人们应该只能通过使用su二进制文件来访问用户。在我的 Ubuntu 18.04 设置中,我确实做到了这一点,并且它的工作非常顺利,但在 Debian 10 中我无法这样做。
能够登录的用户将没有使用权限sudo。
我已经使用默认 shell 设置了一个用户/usr/sbin/nologin。但是当我尝试访问该用户时,su --shell=/bin/bash user我无法这样做。
# useradd --shell /usr/sbin/nologin locked
# passwd locked
Enter new UNIX password: *secret*
Retype new UNIX password: *secret*
passwd: password updated successfully
$ su --shell /bin/bash locked
Password: *secret*
This account is currently not available.
Run Code Online (Sandbox Code Playgroud)
为什么这在 Debian 中不再起作用?
输出/etc/shells:
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash …Run Code Online (Sandbox Code Playgroud)