[Linux] root 계정을 제외하고 UserID 가 0인 사용자 계정 체크하는 소스

Linux/Unix 시스템 계정 중, root 계정을 제외하고 UserID 가 0인 사용자 계정을 체크하는 소스입니다. 예외처리가 잘 안되어 있는 라인이 있습니다.^^

int chk_rootuid_duplication(const char * p_pwdfile) {

 int i_cnt_rootuid = 0;
 FILE *p_FILEstream = NULL;
 struct passwd *u_info = NULL;
 char log_buffer[MAXBUF] = {0};
 char category_buf[16] = {0};
 char rootuserlist[256] = {0};

 p_FILEstream = fopen(p_pwdfile, “r”);
 
 if ( ! p_FILEstream ) return FALSE;

 while ( ( u_info = fgetpwent(p_FILEstream)) != NULL ) {
  if ( u_info->pw_uid == ROOTUID && strcmp(“root”, u_info->pw_name) ) {
   i_cnt_rootuid ++;
   if ( i_cnt_rootuid == 1 ) {
    sprintf(rootuserlist, “%s “, u_info->pw_name);
   } else  { 
    strncat(rootuserlist, u_info->pw_name, sizeof(rootuserlist)-strlen(rootuserlist));
   }
  }
#if defined(DEBUG)
  if ( u_info->pw_uid == ROOTUID && !strcmp(“root”, u_info->pw_name) ) {
   printf(“%s 계정 UID 값이 0\n”, u_info->pw_name);
  }
#endif
 }

 category_no++;
 sprintf(category_buf, CATEGORY_PREFIX, category_no);
 sprintf(log_buffer, “%s %s %s %s\n”, category_buf, CHK_ROOTUID_COMMENT, CATEGORY_SEPARATOR, i_cnt_rootuid ? “WEAK” : “SAFE”);
 if ( i_cnt_rootuid ) {
  strcat(log_buffer, rootuserlist);
  strcat(log_buffer, “\n”);
 }

 logwrite(logfile, log_buffer);

 fclose(p_FILEstream);
 return TRUE;
}

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: