Linux C Function()参考のユーザーグループ編

22610 ワード

endgrent(     )
    
getgrent,setgrent
    
#include<grp.h>
#include<sys/types.h>
    
void endgrent(void);
    
endgrent()     getgrent()        。
   

    

  
   getgrent() setgrent()。
 



endpwent(      )
    
getpwent,setpwent
    
#include<pwd.h>
#include<sys/types.h>
    
void endpwent(void);
    
endpwent()     getpwent()        。
   

    

  
   getpwent() setpwent()。
 



endutent(  utmp   )
    
getutent,setutent
    
#include<utmp.h>
    
void endutent(void);
    
endutent()     getutent    utmp  。
   

    

  
   getutent()。
 



fgetgrent(            )
    
fgetpwent
    
#include<grp.h>
#include<stdio.h>
#include<sys/types.h>
    
struct group * getgrent(FILE * stream);
    
fgetgrent()    stream           ,   group        。  stream         、etc/group     。group       getgrent()。
   
  group    ,    NULL       ,      。
  
#include <grp.h>
#include<sys/types.h>
#include<stdio.h>
main()
{
struct group *data;
FILE *stream;
int i;
stream = fopen("/etc/group", "r");
while((data = fgetgrent(stream))!=0){
i=0;
printf("%s :%s:%d :", data->gr_name,data->gr_passwd,data->gr_gid);
while (data->gr_mem[i])printf("%s,",data->gr_mem[i++]);
printf("
"); } fclose(stream); } root:x:0:root, bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon tty:x:5 disk:x:6:root lp:x:7:daemon,lp mem:x:8 kmem:x:9 wheel:x:10:root mail:x:12:mail news:x:13:news uucp:x:14:uucp man:x:15 games:x:20 gopher:x:30 dip:x:40: ftp:x:50 nobody:x:99:   fgetpwent( ) fgetgrent #include<pwd.h> #include<stdio.h> #include<sys/types.h> struct passwd * fgetpwent(FILE *stream); fgetpwent() stream , passwd 。 stream /etc/passwd 。passwd getpwent()。 passwd , NULL , 。 #include<pwd.h> #include<sys/types.h> main() { struct passwd *user; FILE *stream; stream = fopen("/etc/passwd", "r"); while((user = fgetpwent(stream))!=0){ printf("%s:%d:%d:%s:%s:%s
",user->pw_name,user->pw_uid,user->pw_gid,user->pw_gecos,user->pw_dir,user->pw_shell); } } root:0:0:root:/root:/bin/bash bin:1:1:bin:/bin: daemon:2:2:daemon:/sbin: adm:3:4:adm:/var/adm: lp:4:7:lp:/var/spool/lpd: sync:5:0:sync:/sbin:/bin/sync shutdown:6:0:shutdown:/sbin:/sbin/shutdown halt:7:0:halt:/sbin:/sbin/halt mail:8:12:mail:/var/spool/mail: news:9:13:news:var/spool/news uucp:10:14:uucp:/var/spool/uucp: operator:11:0:operator :/root: games:12:100:games:/usr/games: gopher:13:30:gopher:/usr/lib/gopher-data: ftp:14:50:FTP User:/home/ftp: nobody:99:99:Nobody:/: xfs:100:101:X Font Server: /etc/Xll/fs:/bin/false gdm:42:42:/home/gdm:/bin/bash kids:500:500: : /home/kids:/bin/bash   getegid( ) getgid,setgid,setregid #include<unistd.h> #include<sys/types.h> gid_t getegid(void); getegid() 。 。 。 main() { printf("egid is %d
",getegid()); } egid is 0 /* root */   geteuid( ) getuid,setreuid,setuid #include<unistd.h> #include<sys/types.h> uid_t geteuid(void) geteuid() 。 , , 。 setID , , euid uid。 , /usr/bin/passwd -r-s--x--x, s setID(SUID) , passwd passwd uid , root uid (0)。 。 main() { printf ("euid is %d
",geteuid()); } euid is 0 /* root */   getgid( ) getegid,setregid,setgid #include<unistd.h> #include<sys/types.h> gid_t getgid(void); getgid() 。 main() { printf(“gid is %d
”,getgid()); } gid is 0 /* root */   getgrent( ) setgrent,endgrent #include<grp.h> #include <sys/types.h> struct group *getgrent(void); getgrent() (/etc/group) , group 。 , , NULL。 struct group{ char *gr_name; /* */ char *gr_passwd; /* */ gid_t gr_gid; /* */ char **gr_mem; /* */ } group , NULL , 。 getgrent() , endgrent() 。 ENOMEM , group 。 #include<grp.h> #include<sys/types.h> main() { struct group *data; int i; while((data= getgrent())!=0){ i=0; printf(“%s:%s:%d:”,data->gr_name,data->gr_passwd,data->gr_gid); while(data->gr_mem[i])printf(“%s,”,data->gr_mem[i++]); printf(“
”); } endgrent(); } root:x:0:root, bin:x:1:root,bin,daemon, daemon:x:2:root,bin,daemon, sys:x:3:root,bin,adm, adm:x:4:root,adm,daemon tty:x:5 disk:x:6:root lp:x:7:daemon,lp mem:x:8 kmem:x:9: wheel:x:10:root mail:x:12:mail news:x:13:news uucp:x:14:uucp man:x:15: games:x:20 gopher:x:30 dip:x:40 ftp:x:50 nobody:x:99   getgrgid( gid ) fgetgrent,getgrent,getgrnam #include<grp.h> #include<sys/types.h> strcut group * getgrgid(gid_t gid); getgrgid() gid , group 。group getgrent()。 group , NULL , 。 /* gid=3 */ #include<grp.h> #include<sys/types.h> main() { strcut group *data; int i=0; data = getgrgid(3); printf(“%s:%s:%d:”,data->gr_name,data->gr_passwd,data->gr_gid); while(data->gr_mem[i])printf(“%s ,”,data->mem[i++]); printf(“
”); } sys:x:3:root,bin,adm   getgrnam( ) fgetgrent,getrent,getgruid #include<grp.h> #include<sys/types.h> strcut group * getgrnam(const char * name); getgrnam() , group 。group getgrent()。 group , NULL , 。 /* adm */ #include<grp.h> #include<sys/types.h> main() { strcut group * data; int i=0; data = getgrnam(“adm”); printf(“%s:%s:%d:”,data->gr_name,data->gr_passwd,data->gr_gid); while(data->gr_mem[i])printf(“%s,”,data->gr_mem[i++]); printf(“
”); } adm:x:4:root,adm,daemon   getgroups( ) initgroups,setgroup,getgid,setgid #include<unistd.h> #include<sys/types.h> int getgroups(int size,gid_t list[]); getgroup() 。 size list〔〕 gid_t 。 size , 。 , -1。 EFAULT list 。EINVAL size 。 #include<unistd.h> #include<sys/types.h> main() { gid_t list[500]; int x,i; x = getgroups(0.list); getgroups(x,list); for(i=0;i<x;i++) printf(“%d:%d
”,i,list[i]); } 0:00 1:01 2:02 3:03 4:04 5:06 6:10   getpw( ) getpwent #include<pwd.h> #include<sys/types.h> int getpw(uid_t uid,char *buf); getpw() /etc/passwd uid , -1。 buf : : : (uid): (gid): : :shell 0 , -1。 1. getpw() , 。 2. shadow /etc/passwd, getpw() “x”。 #include<pwd.h> #include<sys/types.h> main() { char buffer[80]; getpw(0,buffer); printf(“%s
”,buffer); } root:x:0:0:root:/root:/bin/bash   getpwent( ) getpw,fgetpwent,getpwnam,getpwuid,setpwent,endpwent #include<pwd.h> #include<sys/types.h> strcut passwd * getpwent(void); getpwent() (/etc/passwd) , passwd 。 , , NULL。 passwd struct passwd{ char * pw_name; /* */ char * pw_passwd; /* */ uid_t pw_uid; /* */ gid_t pw_gid; /* */ char * pw_gecos; /* */ char * pw_dir; /* */ char * pw_shell; /* shell */ }; passwd , NULL , 。 getpwent() , endpwent() 。 ENOMEM , passwd 。 #include<pwd.h> #include<sys/types.h> main() { struct passwd *user; while((user = getpwent())!=0){ printf(“%s:%d:%d:%s:%s:%s
”,user->pw_name,user->pw_uid,user->pw_gid, user->pw_gecos,user->pw_dir,user->pw_shell); } endpwent(); } root:0:0:root:/root:/bin/bash bin:1:1:bin:/bin: daemon:2:2:daemon:/sbin: adm:3:4:adm:/var/adm: lp:4:7:lp:/var/spool/lpd: sync:5:0:sync:/sbin:/bin/sync shutdown:6:0:shutdown:/sbin:/sbin/shutdown halt:7:0:halt:/sbin:/sbin/halt mail:8:12:mail:/var/spool/mail: news:9:13:news:var/spool/news uucp:10:14:uucp:/var/spool/uucp: operator:11:0:operator :/root: games:12:100:games:/usr/games: gopher:13:30:gopher:/usr/lib/gopher-data: ftp:14:50:FTP User:/home/ftp: nobody:99:99:Nobody:/: xfs:100:101:X Font Server: /etc/Xll/fs:/bin/false gdm:42:42:/home/gdm:/bin/bash kids:500:500: : /home/kids:/bin/bash   getpwnam( ) getpw,fgetpwent,getpwent,getpwuid #include<pwd.h> #include<sys/types.h> struct passwd * getpwnam(const char * name); getpwnam() name , passwd 。passwd getpwent()。 passwd , NULL , 。 /* root */ #include<pwd.h> #include<sys/types.h> main() { struct passwd *user; user = getpwnam(“root”); printf(“name:%s
”,user->pw_name); printf(“uid:%d
”,user->pw_uid); printf(“home:%s
”,user->pw_dir); } name:root uid:0 home:/root   getpwuid( uid ) getpw,fgetpwent,getpwent,getpwnam #include<pwd.h> #include<sys/types.h> struct passwd * getpwuid(uid_t uid); getpwuid() uid , passwd 。passwd getpwent()。 passwd , NULL , 。 #include<pwd.h> #include<sys/types.h> main() { struct passwd *user; user= getpwuid(6); printf(“name:%s
”,user->pw_name); printf(“uid:%d
”,user->pw_uid); printf(“home:%s
”,user->pw_dir); } name:shutdown uid:6 home:/sbin   getuid( ) geteuid,setreuid,setuid #include<unistd.h> #include<sys/types.h> uid_t getuid(void); getuid() 。 main() { printf(“uid is %d
”,getuid()); } uid is 0 /* root */   getutent( utmp ) getutent,getutid,getutline,setutent,endutent,pututline,utmpname #include<utmp.h> struct utmp *getutent(void); getutent() utmp (/var/run/utmp) , utmp 。 , , NULL。 utmp struct utmp { short int ut_type; /* */ pid_t ut_pid; /*login pid*/ char ut_line[UT_LINESIZE];/* , “/dev/”*/ char ut_id[4]; /* Inittab ID*/ char ut_user[UT_NAMESIZE];/* */ char ut_host[UT_HOSTSIZE];/* */ struxt exit_status ut_exit;/* DEAD_PROCESS */ long int ut_session; /*Sessioc ID*/ struct timeval ut_tv; /* */ int32_t ut_addr_v6[4]; /* */ char __unused[20]; /* */ }; ut_type : EMPTY 。 RUN_LVL run-level BOOT_TIME NEW_TIME OLD_TINE 。 INIT_PROCESS init 。 LOGIN_PROCESS login 。 USER_PROCESS 。 DEAD_PROCESS 。 ACCOUNTING 。 exit_status struct exit_status { short int e_termination; /* */ short int e_exit; /* */ }; timeval gettimeofday()。 : UT_LINESIZE 32 UT_NAMESIZE 32 UT_HOSTSIZE 256 utmp , NULL , 。 getutent() utmp , endutent() utmp 。 #include<utmp.h> main() { struct utmp *u; while((u=getutent())){ if(u->ut_type = = USER_PROCESS) printf(“%d %s %s %s
”,u->ut_type,u->ut_user,u->ut_line,u->ut_host); } endutent(); } /* root /dev/pts/0,/dev/pts/1,/dev/pts/2 */ 7 root pts/0 7 root pts/1 7 root pts/2   getutid( utmp ) getutent,getutline #include<utmp.h> strcut utmp *getutid(strcut utmp *ut); getutid() utmp ut , ut->ut_type RUN_LVL,BOOT_TIME,NEW_TIME,OLD_TIME ut->ut_type ; ut->ut_type INIT_PROCESS,LOGIN_PROCESS,USER_PROCESS DEAD_PROCESS , ut->ut_id 。 utmp 。utmp getutent()。 utmp , NULL , 。 #include<utmp.h> main() { struct utmp ut,*u; ut.ut_type=RUN_LVL; while((u= getutid(&ut))){ printf(“%d %s %s %s
”,u->ut_type,u->ut_user,u->ut_line,u->ut_host); } } 1 runlevel -   getutline( utmp ) getutent,getutid,pututline #include<utmp.h> struct utmp * getutline (struct utmp *ut); getutline() utmp ut_type USER_PROCESS LOGIN_PROCESS , ut_line ut->ut_line 。 utmp ,utmp getutent()。 utmp , NULL , 。 #include<utmp.h> main() { struct utmp ut,*u; strcpy (ut.ut_line,”pts/1”); while ((u=getutline(&ut))){ printf(“%d %s %s %s
”,u->ut_type,u->ut_user,u->ut_line,u->ut_host); } } 7 root pts/1   initgroups( ) setgrent,endgrent #include<grp.h> #include<sys/types.h> int initgroups(const char *user,gid_t group); initgroups() (/etc/group) , user , group 。 0, -1, errno。   pututline( utmp ) getutent,getutid,getutline #include<utmp.h> void pututline(struct utmp *ut); pututline() ut utmp utmp 。 getutid() , utmp ,utmp getutent()。 /var/run/utmp #include<utmp.h> main() { struct utmp ut; ut.ut_type =USER_PROCESS; ut.ut_pid=getpid(); strcpy(ut.ut_user,”kids”); strcpy(ut.ut_line,”pts/1”); strcpy(ut.ut_host,”www.gnu.org”); pututline(&ut); } /* who -l */ root pts/0 dec9 19:20 kids pts/1 dec12 10:31(www.gnu.org) root pts/2 dec12 13:33   seteuid( ) setuid,setreuid,setfsuid #include<unistd.h> int seteuid(uid_t euid); seteuid() 。 Linux ,seteuid(euid) setreuid(-1,euid)。 0, -1, errno setuid   setfsgid( ) setuid,setreuid,seteuid,setfsuid #include<unistd.h> int setfsgid(uid_t fsgid); setfsgid() 。 , (fsgid) (egid) 。 , fsgid , fsgid real/effective/saved 。 0, -1, errno。 Linux 。 EPERM , 。   setfsuid( ) setuid,setreuid,seteuid,setfsgid #include<unistd.h> int setfsuid(uid_t fsuid); setfsuid() 。 , (fsuid) (euid) 。 , fsuid , fsuid real/effective/saved 。 0, -1, errno Linux EPERM , 。   setgid( ) getgid,setregid,getegid,setegid #include<unistd.h> int setgid(gid_t gid); setgid() (real gid) gid 。 , real、effective savedgid gid。 0, -1, errno 。 EPERM , gid effective gid saved gid 。   setgrent( ) getgrent,endgrent #include<grp.h> #include<sys/types.h> void setgrent(void); setgrent() getgrent() 。 setpwent()。   setgroups( ) initgroups,getgroup,getgid,setgid #include<grp.h> int setgroups(size_t size,const gid_t * list); setgroups() list 。 size list() gid_t , NGROUP(32)。 0, -1。 EFAULT list 。 EPERM , root EINVAL size NGROUP(32)。   setpwent( ) getpwent,endpwent #include<pwd.h> #include<sys/types.h> void setpwent(void); setpwent() getpwent() 。 #include<pwd.h> #include<sys/types.h> main() { struct passwd *user; int i; for(i=0;i<4;i++){ user=getpwent(); printf(“%s :%d :%d :%s:%s:%s
”,user->pw_name,user->pw_uid,user->pw_gid, user->pw_gecos,user->pw_dir,user->pw_shell); } setpwent(); user=getpwent(); printf(“%s :%d :%d :%s:%s:%s
”,user->pw_name,user->pw_uid,user->pw_gid, user->pw_gecos,user->pw_dir,user->pw_shell); endpwent(); } root:0:0:root:/root:/bin/bash bin:1:1:bin:/bin daemon:2:2:daemon:/sbin adm:3:4:adm:/var/adm root:0:0:root:/root:/bin/bash   setregid( ) setgid,setegid,setfsgid #include<unistd.h> int setregid(gid_t rgid,gid_t egid); setregid() rgid , egid 。 rgid egid -1, 。 0, -1, errno。   setreuid( ) setuid,seteuid,setfsuid #include<unistd.h> int setreuid(uid_t ruid,uid_t euid); setreuid() ruid , euid 。 ruid euid -1, 。 0, -1, errno。 setuid()。   setuid( ) getuid,setreuid,seteuid,setfsuid #include<unistd.h> int setuid(uid_t uid) setuid() 。 , , 0(root)。 Linux , root setuid() ,root , , , setuid() , root , , seteuid()。 0, -1, errno。 setuid root , , root setuid(getuid()); root 。 , uid euid Linux core dump。   setutent( utmp ) getutent,endutent #include<utmp.h> void setutent(void); setutent() getutent() utmp 。 setpwent() setgrent()。   utmpname( utmp ) getutent,getutid,getutline,setutent,endutent,pututline #include<utmp.h> void utmpname(const char * file); utmpname() utmp , utmp 。 utmpname() utmp /var/run/utmp。