Можно использовать 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
Проблема в том, что вы вызываете функцию Система ()
, которая вызывает оболочку / bin / sh
. И оболочка / bin / sh
не имеет Suid Bit Set. Вот почему печатает разрешение отказано
сообщение.
Вы должны написать часть чистого C кода:
int main() {
FILE *fd = fopen("test.txt", "a");
fprintf(fd, "%s", "100");
fclose(fd);
return 0;
}
Ваш сценарий отлично работает здесь для меня.
$ 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)