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。