From 52a850159daee33b96ca30deea3a91588e8a26ce Mon Sep 17 00:00:00 2001 From: TING-JUN WANG Date: Tue, 25 Jun 2024 00:49:47 +0800 Subject: [PATCH] fix: complete. Some filesystem not support SUID --- tool/Makefile | 14 ++++++++------ tool/setup_uid.c | 19 ++++++++++++++++++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/tool/Makefile b/tool/Makefile index 95afa3e..f34ea92 100644 --- a/tool/Makefile +++ b/tool/Makefile @@ -1,12 +1,14 @@ CC = gcc CFLAGS = -Wall -Wextra -std=c99 -all: setup_uid +all: setup-uid -setup_uid: setup_uid.c - $(CC) $(CFLAGS) -o setup_uid setup_uid.c - sudo chown root:root setup_uid - sudo chmod +s setup_uid +setup-uid: setup_uid.c + $(CC) $(CFLAGS) -o setup-uid setup_uid.c + sudo chown root:root setup-uid + sudo cp ./setup-uid /usr/bin + sudo chmod +s /usr/bin/setup-uid clean: - sudo rm setup_uid + sudo rm setup-uid + sudo rm /usr/bin/setup-uid diff --git a/tool/setup_uid.c b/tool/setup_uid.c index 7500b8d..680f50d 100644 --- a/tool/setup_uid.c +++ b/tool/setup_uid.c @@ -1,8 +1,10 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ #include #include #include #include #include +#include bool check_user(char *filename, char *username, unsigned long *new_start) { /* @@ -57,7 +59,7 @@ void insert_user(char *filename, char *username, unsigned long start) { exit(1); } char new_line[100]; - sprintf(new_line, "%s:%lu:%d\n", username, start, 65535); + sprintf(new_line, "%s:%lu:%d\n", username, start, 65536); fputs(new_line, fp); fclose(fp); printf("[SUCCESS] %s has been inserted in %s\n", username, filename); @@ -65,8 +67,23 @@ void insert_user(char *filename, char *username, unsigned long start) { int main() { + int ret; char *username = getlogin(); + uid_t ruid, euid, suid; + getresuid(&ruid, &euid, &suid); + printf("ruid=%d, euid=%d, suid=%d\n", ruid, euid, suid); + + ret = setuid(0); + printf("ret=%d\n", ret); + if (ret != 0) { + perror("Error:"); + exit(1); + } + + getresuid(&ruid, &euid, &suid); + printf("ruid=%d, euid=%d, suid=%d\n", ruid, euid, suid); + char filenames[2][20] = { "/etc/subuid", "/etc/subgid" };