相关疑难解决方法(0)

为什么真假如此之大?

在发现几个常用命令(例如read)实际上是 Bash 内置命令(并且在提示符下运行它们时,我实际上正在运行一个两行的 shell 脚本,它只是转发到内置命令),我想看看是否相同对于true和是真的false。

好吧,它们绝对是二进制文件。

sh-4.2$ which true
/usr/bin/true
sh-4.2$ which false
/usr/bin/false
sh-4.2$ file /usr/bin/true
/usr/bin/true: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=2697339d3c19235
06e10af65aa3120b12295277e, stripped
sh-4.2$ file /usr/bin/false
/usr/bin/false: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b160fa513fcc13
537d7293f05e40444fe5843640, stripped
sh-4.2$
Run Code Online (Sandbox Code Playgroud)

然而,我发现最令人惊讶的是它们的大小。我希望他们只是每一字节数,因为true基本上是exit 0和false是exit 1。

sh-4.2$ true …
Run Code Online (Sandbox Code Playgroud)

linux reverse-engineering

98
推荐指数
3
解决办法
2万
查看次数

/usr/sbin/nologin 作为登录 shell 是否出于安全目的?

在我的/etc/passwd文件中,我可以看到www-dataApache 使用的用户,以及各种系统用户,都拥有/usr/sbin/nologin或/bin/false作为他们的登录 shell。例如,这里是选择的行:

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
games:x:5:60:games:/usr/games:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
syslog:x:101:104::/home/syslog:/bin/false
whoopsie:x:109:116::/nonexistent:/bin/false
mark:x:1000:1000:mark,,,:/home/mark:/bin/bash
Run Code Online (Sandbox Code Playgroud)

因此,如果我尝试切换到这些用户中的任何一个(有时我想这样做以检查我对他们权限的理解,并且可能还有其他至少一半合理的原因),我失败了:

mark@lunchbox:~$ sudo su www-data
This account is currently not available.
mark@lunchbox:~$ sudo su syslog
mark@lunchbox:~$ 
Run Code Online (Sandbox Code Playgroud)

当然,这并没有太大的不便,因为我仍然可以通过这样的方法为他们启动一个shell:

mark@lunchbox:~$ sudo -u www-data /bin/bash
www-data@lunchbox:~$ 
Run Code Online (Sandbox Code Playgroud)

但这只是让我想知道拒绝这些用户登录 shell 的目的是什么。环顾互联网寻求解释,许多人声称这与安全性有关,并且每个人似乎都同意更改这些用户的登录外壳在某种程度上是一个坏主意。以下是引用的集合:

将 Apache 用户的 shell 设置为非交互式通常是一种很好的安全实践(实际上,所有不必以交互方式登录的服务用户都应该将其 shell 设置为非交互式)。

-- https://serverfault.com/a/559315/147556

用户 www-data 的 shell 设置为 /usr/sbin/nologin,这是有充分理由的。

-- https://askubuntu.com/a/486661/119754

[系统帐户]可能是安全漏洞,特别是如果它们启用了 shell:

-- https://unix.stackexchange.com/a/78996/29001

出于安全原因,我创建了一个没有登录 shell …

shell security users login

92
推荐指数
6
解决办法
10万
查看次数

可以使用 nologin 用户通过 ssh 执行命令吗?

如果用户loginShell=/sbin/nologin仍然可以

ssh user@machine [command]
Run Code Online (Sandbox Code Playgroud)

假设用户在其主目录中有适当的 ssh 密钥可用于进行身份验证?

我的目标是保持用户作为 nologin,但仍然能够在网络上的其他几台机器上执行命令(类似于通过 'sudo -u' 使用),我想知道这是否是一个合理的过程。

login ssh account-restrictions

18
推荐指数
1
解决办法
3万
查看次数

我应该总是将 root shell 设置为 /usr/bin/false 吗?

为了防止滥用 root 帐户(在我的 macOS 上,单用户)机器上,我是否应该始终将rootshell设置为/usr/bin/false(或/sbin/nologin)?

例如,我应该总是:

sudo /usr/bin/dscl . -create /Users/root UserShell /usr/bin/false 
Run Code Online (Sandbox Code Playgroud)

或者是否有不这样做的常见原因(除了明显和可避免的)?

osx shell security root

4
推荐指数
1
解决办法
2161
查看次数

创建没有home的用户的正确方法(针对shadow.service)

如果您使用在 Arch Linux 上创建一个没有主目录的用户useradd -M test,则会在 中创建如下所示的条目/etc/passwd:

test:x:1001:1001::/home/test:/bin/bash
Run Code Online (Sandbox Code Playgroud)

但因为/home/test不存在,这会导致shadow.service失败。将主目录留空会产生相同的错误。我发现一个旧线程建议使用/dev/null,但我不确定这是否是最好的解决方案。ATM,忽略它似乎是最好的解决方案,但也许还有更好的方法。


shadow.service归结为pwck和grpck:

### [...]
ExecStart=/bin/sh -c '/usr/bin/pwck -r || r=1; /usr/bin/grpck -r && exit $r
### [...]
Run Code Online (Sandbox Code Playgroud)

arch-linux passwd

2
推荐指数
1
解决办法
2895
查看次数