W celu ochrony przed niewłaściwym użyciem aplikacji staram się sprawdzić, czy jej pliki konfiguracyjne mają poprawne uprawnienia, aby aplikacja mogła zaufać zawartości plików, które nie zostały zmodyfikowane przez kogoś jeszcze.Jak zapewnić poprawne uprawnienia do plików
wierzę następujące zasady są koryguje:
- plik nie musi być zapisywalny przez innych
- plik musi być w posiadaniu przez zaufanego użytkownika/grupy: root lub
- plik musi być w posiadaniu skutecznego użytkownika/grupy uruchomioną aplikacją (myśleć setuid programu)
Oto przykład:
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
static
int is_secure(const char *name)
{
struct stat st;
uid_t euid = geteuid();
gid_t egid = getegid();
if (stat(name, &st) != 0) {
int err = errno;
fprintf(stderr, "can't stat() '%s': %d (%s)\n", name, err, strerror(err));
return 0;
}
/* writable by other: unsecure */
if ((st.st_mode & S_IWOTH) != 0) {
return 0;
}
/* not owned by group root and not owned by effective group: unsecure */
if (st.st_gid != 0 && st.st_gid != egid) {
return 0;
}
/* not owned by user root and not owned by effective user: unsecure */
if (st.st_uid != 0 && st.st_uid != euid) {
return 0;
}
return 1;
}
int
main(int argc, char *argv[])
{
int i;
for(i = 1; i < argc; i++) {
printf("'%s' : %s\n", argv[i], is_secure(argv[i]) ? "sure" : "unsure");
}
return 0;
}
Ponieważ nie jestem pewien co do moich założeń, czy ktoś może sprawdzić, czy zostawię lukę w kontroli uprawnień do plików.
Aktualizacja
sudo posiada funkcję, która: sudo_secure_path, to tylko sprawdzić na jedną uid/gid, ale dbać o sprawdzenie zapisu grupa bitów.
Pozdrawiam.
Rozważmy informacje w [bezpieczny dostęp do plików w katalogu określonym przez zmienną środowiskową] (http: // stackoverflow.com/questions/196244/secure-access-to-files-in-a-directory-defined-by-an-environment-variable). Scenariusz jest bardziej złożony. Jednak niektóre z pomysłów, w szczególności, że ścieżka prowadząca do pliku również musi być bezpieczna, jest ważna. –
Jonathan ma rację. Każdy element ścieżki prowadzącej do pliku musi być zapisywalny tylko przez zaufanych użytkowników dla pełnego bezpieczeństwa. W przeciwnym razie mogą wystąpić dziwne scenariusze, takie jak przeniesienie komponentu ścieżki i zastąpienie go wskaźnikiem do innej, ale podobnej struktury katalogów, z pominięciem pliku, ale o takim samym skutku, jak przepisanie całego pliku konfiguracyjnego. W zależności od tego, co znajduje się w pliku konfiguracyjnym, może pomóc włamywaczom włamać się lub przynajmniej bardziej świadomie zaatakować DOS, więc może być nawet dobrze, aby plik był czytelny tylko dla jego właściciela/zaufanych użytkowników. –
@JosephMyers Dzięki. Powinienem przedstawić bardziej kompletny przykład: ten kod służy do sprawdzania katalogu i wszystkich znajdujących się w nim plików. – ydroneaud