标签: setuid

映射 NFS 的 UID

我有一个通过 SMB/CIFS 和 AFP 提供服务的 Mac OS X 文件服务器。服务器是通过金三角方法的域客户端,但这会导致用户的 UID 非常大。这对我当前的设置很好,但我想让 NFS 也能正常工作。显然我需要做一些 UID 映射,但我不知道如何去做。有什么建议吗?

nfs mount setuid

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

从脚本向 linux 添加新用户

我正在使用自定义的 Redmine 安装来管理项目。我设法挂钩了新用户的添加并将登录信息发送到我拥有的 bash 脚本。下面是我的脚本:

#!/bin/sh
UNAME=$1
UPASS=$2
wall "$UNAME $UPASS"
useradd "$UNAME"
echo "$UPASS" | passwd "$UNAME" --stdin
usermod -g restricted "$UNAME"
Run Code Online (Sandbox Code Playgroud)

Echo 是一个内置的 bash,所以当它输入密码时它不会显示在进程表中。 问题是我收到了 Redmine 的许可投诉:

/opt/rms/redmine/new-user: line 5: /usr/sbin/useradd: Permission denied
Only root can do that.
/opt/rms/redmine/new-user: line 7: /usr/sbin/usermod: Permission denied
Run Code Online (Sandbox Code Playgroud)

这显然表明我需要 root 权限或执行此操作的其他方法。因此,我尝试在文件上设置具有权限 4755 的 UID 位,以便它以 root 身份运行,但出现与上述相同的错误。知道这里发生了什么吗?

我的一般情况是我的目标是将新用户作为 linux 用户自动添加到项目管理系统中,然后当他们被添加到某个组时,我计划将其挂钩,以便他们获得扩展权限,使他们能够通过 SSH 访问 Mercurial 存储库- 所以用户管理完全通过前端处理。

linux permissions ssh setuid

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

以下 setuid 程序是否存在安全风险?

我在 .c 中将以下程序设置为 setuid chmod 仅由所有者读取/执行,并将其设置为不可变的,就像它调用的 php 脚本一样。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[] )
{
   setuid( 0 );
   execv( "/var/tools/control.php", argv );

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这本身是否存在安全风险?是否可以通过 argv 或其他一些我没有想到的东西来推送其他命令?我不只是询问这个代理程序的 php 脚本。

security php setuid

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

Setuid 不适用于 Solaris

我有一个标记为 setuid 的 Perl 脚本,但是当我运行它时,它说我没有这样做的权限。我正在运行 Solaris 10。这适用于另一个系统,但我不知道有什么不同。我究竟做错了什么?

$ ls -l
total 16
-r-sr-x---   1 root     root        7354 Apr 19  2008 myscript
$ ./myscript
./myscript: Permission denied.
Run Code Online (Sandbox Code Playgroud)

solaris setuid suid

0
推荐指数
1
解决办法
2443
查看次数

setuid 不适用于标准用户帐户

看看这个c程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    printf("UID:  %d\n", getuid());
    printf("EUID: %d\n", geteuid());
    system("id");

    printf("res=%d\n", setuid(1001));

    printf("UID:  %d\n", getuid());
    printf("EUID: %d\n", geteuid());
    system("id");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的用户帐户是“test”(id 1000)。我有第二个用户帐户:“test2”(id 1001)。

这是我所做的:

gcc test.c -o ./a.out
sudo chown test2 ./a.out
sudo chmod u+s ./a.out
Run Code Online (Sandbox Code Playgroud)

现在,如果我启动 ./a.out 会发生以下情况:

UID:  1000
EUID: 1001
uid=1000(test) gid=1000(test) groups=1000(test),...
res=0
UID:  1000
EUID: 1001
uid=1000(test) gid=1000(test) groups=1000(test),...
          
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我在第二部分看不到 uid=1001...

我已经尝试过这个:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    printf("UID:  %d\n", getuid());
    printf("EUID: %d\n", …
Run Code Online (Sandbox Code Playgroud)

setuid

0
推荐指数
1
解决办法
341
查看次数

标签 统计

setuid ×5

linux ×1

mount ×1

nfs ×1

permissions ×1

php ×1

security ×1

solaris ×1

ssh ×1

suid ×1