Linux setuid не работает

Можно использовать chpasswd

Команда chpasswd администрирует пароли пользователей. Пользователь root может предоставить или изменить пароли пользователей, указанные через стандартный вход. Каждая строка входа должна иметь следующий формат.

имя пользователя: пароль Только пользователи root может установить пароли с этой командой.

Пример 1:

echo username:password | chpasswd 

Пример 2:

Также для безопасности можно передать зашифрованный пароль chpasswd

# Create Password in Encrpyted Form Using below command
# perl -e'print crypt("YourPassword", "salt")' ; echo -e

echo username:cryptedPass | chpasswd -e

4
24.01.2015, 18:42
2 ответа

Проблема в том, что вы вызываете функцию Система () , которая вызывает оболочку / bin / sh . И оболочка / bin / sh не имеет Suid Bit Set. Вот почему печатает разрешение отказано сообщение.

Вы должны написать часть чистого C кода:

int main() {
  FILE *fd = fopen("test.txt", "a");
  fprintf(fd, "%s", "100");
  fclose(fd);
  return 0;
}
-3
27.01.2020, 21:06

Ваш сценарий отлично работает здесь для меня.

$ ls -l test*
-rwsr-xr-x 1 root  root  6776 Jan 24 17:18 test
-rw-r--r-- 1 chris chris   74 Jan 24 17:18 test.c
-rw-r----- 1 root  root     0 Jan 24 17:20 test.txt
$ ./test
ls -l test.txt
-rw-r----- 1 root root 4 Jan 24 17:21 test.txt
$ sudo cat test.txt
100

Возможно ли, что вы тестируете свою программу на файловой системе, которая не разрешает исполняемые файлы setuid? Запустите команду mount и ищите nosuid на файловой системе, например здесь:

tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec,relatime)
2
27.01.2020, 21:06

Теги

Похожие вопросы