Tengo esto resuelto.
Pero lamentablemente no descubro por qué sucede esto.
Cuando ejecuto en hostA:
# getcap /bin/rsh
No devuelven nada.
En hostB regresan:
getcap /bin/rsh
/bin/rsh = cap_net_bind_service+ep
Simplemente elimino el paquete y lo reinstalé usando yum
y luego obtienen los permisos.
¿Pero por qué ocurre eso al principio? ¿Qué falta la primera vez que se instaló? Extraño.
Напишите небольшую программу на C, которая вызывает Bash для запуска сценария. Вы компилируете эту программу и даете ей бит suid
, чтобы она запускала Bash (и, следовательно, скрипт) от имени пользователя root.
Вот пример указанной оболочки:
#include <unistd.h>
int main(void) {
const char *bin = "/bin/bash";
const chrar *script = "/tmp/myscrypt.sh";
char *const argv[] = {bin, script, NULL};
char *const env[] = {"SHELL=/bin/bash",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"HOME=/root", "LOGNAME=root", "_=/usr/bin/env", NULL};
execve(bin, argv, env);
return 0;
}
Обратите внимание, что при этом запускается сценарий от имени пользователя root , включая предположение, что корнем является / root
. Если вы этого не хотите, измените оболочку.
Итак, когда вы его скомпилируете, все, что вам останется, это присвоить ему бит suid
.
gcc wrapper.c -o wrapper
chown root wrapper
chmod u+wrxs,g+rx,o-wrx wrapper
Если вы ls -l
, разрешения будут выглядеть так:
-rwsr-x--- 1 root group [snip] wrapper
Это означает, что только пользователь в группе group
сможет запустить эту оболочку. И когда они это сделают, s
будет означать, что их эффективный идентификатор пользователя будет 0.
Если вы это делаете, это общая среда, в которой многие пользователи принадлежат к одной группе, вы можете создать специальную группу только для этого файла и добавьте в эту группу только своего пользователя. Например, возможно, вы вошли в систему с помощью LDAP, и все пользователи принадлежат к группе «Пользователи домена». Вы можете создать локальную группу под названием, скажем, «JulieOnly» и добавить в эту группу только своего пользователя.Затем вы подключаете
оболочку к корню: JulieOnly
.
Вы можете запустить его с помощью sudo
, выполнив visudo
, чтобы добавить YOURUSER ALL = ( ALL) NOPASSWD: ALL
, что остановит sudo
от запроса пароля у пользователя.