我可以做一个su
,su <username>
它会询问我的密码。是否有密码参数以便su
我不会被提示输入密码?
例如 su <username> -p <password>
当您有某种服务器时,您可以通过例如访问它,ssh user1@ip
并且您也可以ssh root@ip
使用 su 权限转到您的 root 用户,然后转到su user1
. 在我看来,这两种方式都应该引导我进入相同的用户环境(在这种情况下,“user1”),但在我的实际经验中并没有,因为ssh user1@ip
安装了一些东西,su user1
但没有安装。
这是为什么?
我目前:
root@sensu-server-client:/#
Run Code Online (Sandbox Code Playgroud)
我想改为:
sensu@sensu-server-client:/#
Run Code Online (Sandbox Code Playgroud)
一个人如何做到这一点。我试过:su sensu
但没有任何反应。
我有一个长时间运行的 bash 脚本,其中一些命令需要以 root 身份运行,而大多数命令需要在 sudo 之前以普通用户身份运行,因为它会弄乱文件所有权等。
我想出了一些方法,但每个方法都有一些问题
方法一:在文件中使用sudo
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Run Code Online (Sandbox Code Playgroud)
从代码的编写方式来看,这看起来不错。sudo
写在几条实际需要root运行的语句之前,但是如果每次sudo
调用之间的时间太长sudo
再次要求输入密码。此外,如果第一次执行sudo
失败,例如由于密码无效,脚本的其余部分仍会执行。
方法二:使用sudo调用文件,需要时再改回原用户
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must …
Run Code Online (Sandbox Code Playgroud) 昨晚,在我的服务器上,我做了:
sudo su - mysql
Run Code Online (Sandbox Code Playgroud)
更改为 mysql 用户,以便我可以运行 mysql 客户端,该客户端已设置为仅从 mysql 帐户进行身份验证。我成功运行了 mysql 客户端并对数据库进行了更改。一夜之间服务器上没有任何变化。
今天,我尝试的任何方法都不允许我更改为 mysql 用户。鉴于没有主目录的消息,它似乎成功了,但whoami
仍然报告我的用户 ID 并且尝试运行 mysql 仍然失败。
wade@snoopy:~$ sudo su - mysql
[sudo] password for wade:
No directory, logging in with HOME=/
wade@snoopy:~$ whoami
wade
wade@snoopy:~$ sudo su mysql
wade@snoopy:~$ whoami
wade
wwilliam@snoopy:~$ sudo -s
root@snoopy:/home/wade#
root@snoopy:/home/wade# su mysql
root@snoopy:/home/wade# whoami
root
Run Code Online (Sandbox Code Playgroud)
mysql 的 /etc/passwd:
mysql:x:110:119:MySQL Server,,,:/nonexistent:/bin/false
Run Code Online (Sandbox Code Playgroud)
有没有人见过这样的行为?
ubuntu@ubuntu:~$ su
Password:
su: Authentication failure
Run Code Online (Sandbox Code Playgroud)
我将 Ubuntu 安装到 U 盘上。我没有设置任何密码 - 为什么我不能使用 su?
当我su
在终端中输入命令时,我得到
su: Authentication failure
Run Code Online (Sandbox Code Playgroud)
为什么这在 Ubuntu 中不起作用?我已经在另一个 Linux 发行版(Parrot OS)中尝试过这个命令,它确实有效。
我su
进入另一个用户运行 screen,但出现错误Cannot open your terminal '/dev/pts/4' - please check.
我找到了一个解决方案:script /dev/null
之后我可以使用 screen. 为什么这样做?它创建了一个新的伪终端?
因为好奇而问。:)
当我打字
sudo su
Run Code Online (Sandbox Code Playgroud)
它要求我的用户密码。当我输入时
su
Run Code Online (Sandbox Code Playgroud)
它要求输入 root 用户密码。但是这两个命令都将我定向到根终端。那为什么会有这么大的差别呢?
root@frankfurt:~# sudo adduser newuser 添加用户“newuser”... 添加新组“newuser”(1001)... 使用组“newuser”添加新用户“newuser”(1001)... 正在创建主目录 `/home/newuser' ... 从`/etc/skel' 复制文件... 输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:密码更新成功 更改 newuser 的用户信息 输入新值,或按 ENTER 获取默认值 全名[]:新 房间号 []: 工作电话 []: 家庭电话 []: 其他 []: 信息是否正确?[是/否] 是 root@frankfurt:~# su newuser 无法执行 /bin/bash: 权限被拒绝 根@法兰克福:~#
谢谢。