问题示例:
$ su
Segmentation fault
$ sudo ls
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
我之前尝试从源代码编译 sqlite3。我不知道它安装了什么库。这可能是发生这种情况的原因。
我试过strace su了,结果如下:
...
fstat64(6, {st_mode=S_IFREG|0644, st_size=17964, ...}) = 0
mmap2(NULL, 20788, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 6, 0) = 0xb7295000
mmap2(0xb7299000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 6, 0x3) = 0xb7299000
close(6) = 0
mprotect(0xb7299000, 4096, PROT_READ) = 0
mprotect(0xb72f9000, 4096, PROT_READ) = 0
set_tid_address(0xb758a728) = 11144
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
当我尝试gdb su跑步时,它给了我Cannot find …
众所周知,访客帐户不能使用su或sudo:
如何做到这一点?
我的猜测是 apparmor。但是,没有提到 in /etc/apparmor.d/lightdm-guest-session(或其中包含的其他文件)。
它是通过否认某些能力来完成的吗?
$ grep cap /etc/apparmor.d/abstractions/lightdm
capability ipc_lock,
deny capability dac_override,
deny capability dac_read_search,
Run Code Online (Sandbox Code Playgroud)
dac_override似乎是一个不错的候选人。根据man capabilities:
CAP_DAC_OVERRIDE
Bypass file read, write, and execute permission checks. (DAC is
an abbreviation of "discretionary access control".)
CAP_DAC_READ_SEARCH
* Bypass file read permission checks and directory read and
execute permission checks;
* Invoke open_by_handle_at(2).
Run Code Online (Sandbox Code Playgroud)
这是它,还是其他一些能力?或者它根本不是apparmor?
显然,这就是setgid能力。从syslog一个su尝试:
Mar 18 12:14:52 …Run Code Online (Sandbox Code Playgroud) 在 Ubuntu Studio 22.04 LTS 中,我通常以非特权域用户身份登录。如果我需要执行管理任务(在终端窗口中),我之前曾使用“su”更改为本地或域管理员帐户。这不再有效。相反,“su”会产生错误消息:
su: user <user_name> does not exist or the user entry does not contain all the required fields
Run Code Online (Sandbox Code Playgroud)
其他已更改且可能相关的事情是,终端窗口提示中的我的域用户名现在显示为:
<domain_user>@<domain>@<computer_name>
Run Code Online (Sandbox Code Playgroud)
这曾经显示为:
<domain_user>@<domain>
Run Code Online (Sandbox Code Playgroud)
我不知道自己做了什么事情导致了这种变化。鉴于此,我尝试了以下所有“su”命令,但它们都产生相同的错误消息:
su <local_admin>
su <domain_admin>@<domain>
su <domain_admin>@<domain>@<computer_name>
Run Code Online (Sandbox Code Playgroud)
whoami产量<domain_user>@<domain>(这也是我登录的方式)。
grep <local_admin> /etc/passwd两者getent <local_admin>
都会产生预期的输出:
<local_admin>:x:1000:1000:<local_admin>:/home/<local_admin>:/bin/bash
sudo -iu <local_admin>提示我输入当前登录用户的 sudo 密码,<domain_user>@<domain>该用户没有特权,因此没有 sudo 密码。
域用户的网络共享仍在正确映射并允许访问。
任何有关错误或如何确定问题原因的线索都将受到欢迎!
尝试在 Ubuntu 20.04 上构建自定义“su”,但从原始源开始进行测试(不进行任何更改)。跑步
apt-get source login
Run Code Online (Sandbox Code Playgroud)
我得到了 Shadow-4.8.1 目录。跑步
./configure
make
Run Code Online (Sandbox Code Playgroud)
并尝试运行
src/su testuser
Run Code Online (Sandbox Code Playgroud)
它不起作用!验证失败错误。运行原始操作系统二进制文件:
/usr/bin/su testuser
Run Code Online (Sandbox Code Playgroud)
而且效果很好!卧槽?
我认为构建过程中缺少一些模块/参数。
转到影子包的构建日志。
https://launchpad.net/ubuntu/+source/shadow/1:4.11.1+dfsg1-2ubuntu1/+build/23780688
并参见下一个 ./configure 字符串
./configure --build=x86_64-linux-gnu --prefix=/usr --includedir=\${prefix}/include --mandir=\${prefix}/share/man --infodir=\${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir=\${prefix}/lib/x86_64-linux-gnu --runstatedir=/run --disable-maintainer-mode --disable-dependency-tracking --disable-shared --without-libcrack --mandir=/usr/share/man --with-libpam --enable-shadowgrp --enable-man --disable-account-tools-setuid --with-group-name-max-length=32 --without-acl --without-attr --without-su --without-tcb
Run Code Online (Sandbox Code Playgroud)
看那边:
--without-su
Run Code Online (Sandbox Code Playgroud)
尝试这个 ./configure 字符串,它确实使所有二进制文件都没有“su”。尝试更换它
--with-su
Run Code Online (Sandbox Code Playgroud)
新的二进制文件也不起作用。验证失败。:(
关于它的两个问题。
我需要完成以下几件事。
禁用 Ubuntu 用户。
sudo su对所有用户禁用。
每个用户都应该能够执行sudo <command>.
我修改了我的 sudoer 文件如下:
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Cmnd_Alias NSHELLS = /bin/sh,/bin/bash
Cmnd_Alias NSU = /bin/su
# Host alias specification
# User alias specification …Run Code Online (Sandbox Code Playgroud) 每当我尝试跑步时
su
Password:
Run Code Online (Sandbox Code Playgroud)
然后它显示错误
setgid: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我使用更改权限后出现此问题 chown
的输出ls -lsa /bin/su是:
40 -rwxrwxr-x 1 jheel root 40128 May 17 2017 /bin/su
Run Code Online (Sandbox Code Playgroud) 当我运行su命令时,终端返回:
user 'su' does not exist
Run Code Online (Sandbox Code Playgroud)
如何添加root用户?任何人都可以回答这个问题吗?我试过了sudo adduser su,但在此之后,我遇到了同样的问题。
当我使用以下命令从 gnome-terminal 以 root 身份登录时:
sudo su
Run Code Online (Sandbox Code Playgroud)
它让我以 root 用户身份登录。
这不是切换用户视为登录吗?
另外,哪个命令可以显示我所做的所有“切换”?
当我输入时,我获得了 root 权限sudo。
但是当su询问我输入的Password 时,终端说
su: Authentication Failure
Run Code Online (Sandbox Code Playgroud) 我x.sh在目录中创建了一个文件,/etc/profile.d/以便所有用户都可以访问它。我期望当我使用 command 在终端(登录用户)中更改当前用户时sudo su other_user,我在x.sh文件中设置的那些变量应该可以访问,但它们不是。如何根据需要设置可访问的变量?