我怎样才能从用户切换到root
?在我的终端我输入
su -
它把我带到了root
目录,所以我需要回到用户目录。
我怎样才能从用户切换到root
?在我的终端我输入
su -
它把我带到了root
目录,所以我需要回到用户目录。
我正在努力弄清楚以下别名的确切作用。COUNTER
我猜它是让用户可以使用环境变量,nobody
但COUNTER=${COUNTER}
在 ssh 之前和让SendEnv COUNTER
我难过。我已经查阅了手册页,但我并不聪明。
COUNTER=280
...
alias run='COUNTER=${COUNTER} ssh nobody@localhost -o "SendEnv COUNTER"'
我想在没有 ssh 的情况下重写这个别名(因为它已被禁用)。这是我的尝试,但如果我不了解原始别名的确切作用,我不确定我是否做对了。
alias run='su - nobody -c "export COUNTER=${COUNTER}"'
大多数用户说使用这个cli很容易为sudo命令传递密码
sudo -S <<< "yourpassord" yourcommand
或者
echo "yourpassword|yourcommand
这些 cli 适用于许多命令(mkdir、touch 等),但对于某些命令(如 su)会产生问题
sudo -S <<< "yourpassword" su - youruser
-su: line 1: youpassword: command not found
echo youpassword|sudo -S su - youruser
-su: line 1: youpassword: command not found
如何解决?实际上我使用这个解决方法
echo yourpassword | sudo -v -S
sudo su - youruser #now work because password is in memory
有人知道更好的解决方案吗?
我是 Linux 新手,并使用此过程将以下版本的 Ubuntu 设置为 VirtualBox VM :
ubuntu-20.04.3-desktop-amd64.iso
创建的第一个帐户是管理员帐户。我安装xsel
并检查它是否有效。然后我创建了一个非管理员帐户并su
使用su - non-admin-account
. 那时,xsel
抱怨:
xsel: Can't open display: (null)
: Inappropriate ioctl for device
在进入另一个帐户后,我必须做什么才能xsel
访问?su
目前,我对启动su
在非管理员帐户中启动它们自己的客户端窗口的应用程序不感兴趣。我只想简单地将标准输出到剪贴板,以便我可以使用 Shift+Ins 在 Vim 或 Bash 命令行中检索它,例如,echo dog | xsel -ib
或echo dog | xsel -ip
.
我目前的计划是写入或重定向到(比如说)/tmp/tmp.txt
在从登录屏幕登录的用户与从登录屏幕登录的用户之间传递文本su
。我习惯了 Cygwin 的行为,无论终端在哪个帐户下启动,剪贴板都是共享的。
故障排除
如果我登录非管理员帐户和管理员帐户,我会得到相同的行为su
。 xsel
在我登录的非管理员帐户中工作,而不是在我登录的管理员帐户中工作su
。
本质上,xsel
在su
.
根据评论,我查看了这个问题的答案。 我不认识问题描述,因为错误消息完全不同,因此根据错误消息查看的人不会识别该问题。此外,我不明白答案。看起来它可能适用于我的解决方案的一点是xhost +localhost
,但它不起作用,因为语法错误,至少对于我正在使用的 Ubuntu 版本。我在下面的答案中发布了有效的语法。
我认为在上面引用的页面甚至可以远程通知某人之前,您必须知道问题是缺少帐户访问 X 服务器的权限。例如,如果您来自使用 Cygwin 的 X-windows 的背景,您可能不会猜到这一点,因为问题并没有在那里表现出来。
我正在使用(对这个问题su
不感兴趣)并观察以下行为:sudo
$ su USER -s /bin/bash -c "echo hi"
hi
$ printf "" | su USER -s /bin/bash -c "echo hi"
Password: su: Authentication failure
$ su USER -s /bin/bash -c "echo hi" < /dev/null
Password: su: Authentication failure
$ su USER -s /bin/bash -c "echo hi" < /dev/tty
Password:
$ su USER -s /bin/bash -c "echo hi" < /dev/tty1
hi
对于我的生活,我不明白为什么 stdin 的重定向会导致出现密码提示。我su
在 stdin 已经重定向的上下文中使用,所以我无法避免这种情况。
这是什么原因,如何避免在su
重定向标准输入时出现提示?
当我使用su - fred
作业时立即移到后台。然后,如果我使用fg
它可以正常工作:
wally@Machine:~$ su - fred
Password:
[1]+ Stopped su - fred
wally@Machine:~$ fg
su - fred
fred@Machine:~$
为什么它是在后台开始的?
输出type -a su
(以沃利身份运行):
su is /usr/bin/su
su is /bin/su
输出jobs -l
(以沃利身份运行):
[1]+ 9187 Stopped (signal) su - fred
弗雷德的启动文件(.profile
并被.bashrc
删除):
.bash_profile
exec env /bin/bash
我在这里找到了一个相关的问题。
我有一个由多个用户远程登录的无头服务器。其他用户都不在 sudoers 文件中,因此他们无法通过sudo
. 但是,由于权限su
是-rwsr-xr-x
没有什么可以阻止他们尝试暴力破解root密码。
有人可能会争辩说,如果用户知道 root 密码,他们无论如何都可以破坏系统,但我认为情况并非如此。OpenSSH 配置了PermitRootLogin no
和PasswordAuthentication no
,其他用户都没有对服务器的物理访问权限。据我所知,世界执行权限/usr/bin/su
是用户试图在我的服务器上获得 root 的唯一途径。
更让我感到困惑的是,它甚至似乎没有用。它允许我su
直接运行而不需要 do sudo su
,但这并不是什么不便。
我忽略了什么吗?su
世界是否出于历史原因对那里执行许可?删除我还没有遇到的权限有什么缺点吗?
我正在测试将程序 std_out 重定向到 docker alpine 中的 /dev/stdout 。我不知道为什么我可以从用户回显到标准输出,但不能从su
命令回显。
docker exec -it 779ddea6ec33 bash
# 根用户
bash-4.4# su - http -c "echo 1 >> /dev/stdout"
-sh: can't create /dev/stdout: Permission denied
# why comman above failed
bash-4.4# whoami
root
bash-4.4# su - root -c "echo 1 >> /dev/stdout"
1
docker exec -u http -it 779ddea6ec33 bash
#http 用户
bash-4.4$ whoami
http
bash-4.4$ echo 1 >> /dev/stdout
1
# but this command works
一些LS:
bash-4.4# ls -lad /dev/stdout
lrwxrwxrwx 1 root root 15 Jul 7 16:47 /dev/stdout -> /proc/self/fd/1
bash-4.4# ls -lad /proc/self/fd/1
lrwx------ 1 root root 64 Jul 7 18:09 /proc/self/fd/1 -> /dev/pts/0
bash-4.4# ls -lad /dev/pts/0
crw--w---- 1 root tty 136, 0 Jul 7 18:09 /dev/pts/0
统计:
bash-4.4# stat /dev/stdout
File: '/dev/stdout' -> '/proc/self/fd/1'
Size: 15 Blocks: 0 IO Block: 4096 symbolic link
Device: 4dh/77d Inode: 8013573 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-07 18:09:33.000000000
Modify: 2019-07-07 16:47:08.000000000
Change: 2019-07-07 16:47:08.000000000
bash-4.4# stat /dev/pts/0
File: /dev/pts/0
Size: 0 Blocks: 0 IO Block: 1024 character special file
Device: 4eh/78d Inode: 3 Links: 1 Device type: 88,0
Access: (0620/crw--w----) Uid: ( 0/ root) Gid: ( 5/ tty)
Access: 2019-07-07 18:15:28.000000000
Modify: 2019-07-07 18:15:28.000000000
Change: 2019-07-07 17:48:22.000000000
当我跑
user@hostname:~$ su -- root -z
我明白了
bash: -z: invalid option
Usage: bash [GNU long option] [option] ...
...
以上是我期望的行为。
当我跑
user@hostname:~$ su -l -- root -z
我明白了
-su: -z: invalid option
Usage: -su [GNU long option] [option] ...
...
我仅使用无效选项-z
来演示哪个命令正在解析该选项。
这种行为让我很恼火。su
在我宣布选项结束后继续搜索选项。我错过了什么,这是一个错误还是只是可怕的设计?