|
£hw5LinuxÁªÃË EIO I/O ´æÈ¡´íÎóhw5LinuxÁªÃË
|
·¶Àý | /* ½«/etc/passwd ÎļþȨÏÞÉè³ÉS_IRUSR|S_IWUSR|S_IRGRP|S_IROTH */hw5LinuxÁªÃË #include<sys/types.h>hw5LinuxÁªÃË #include<sys/stat.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË chmod(¡°/etc/passwd¡±,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË chown£¨¸Ä±äÎļþµÄËùÓÐÕߣ© |
Ïà¹Øº¯Êý | fchown£¬lchown£¬chmodhw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<sys/types.h>hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int chown(const char * path, uid_t owner,gid_t group);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | chown()»á½«²ÎÊýpathÖ¸¶¨ÎļþµÄËùÓÐÕß±ä¸üΪ²ÎÊýowner´ú±íµÄÓû§£¬¶ø½«¸ÃÎļþµÄ×é±ä¸üΪ²ÎÊýgroup×é¡£Èç¹û²ÎÊýowner»ògroupΪ-1£¬¶ÔÓ¦µÄËùÓÐÕß»ò×é²»»áÓÐËù¸Ä±ä¡£rootÓëÎļþËùÓÐÕ߽ԿɸıäÎļþ×飬µ«ËùÓÐÕß±ØÐëÊDzÎÊýgroup×éµÄ³ÉÔ±¡£µ±rootÓÃchown()¸Ä±äÎļþËùÓÐÕß»ò×éʱ£¬¸ÃÎļþÈô¾ßÓÐS_ISUID»òS_ISGIDȨÏÞ£¬Ôò»áÇå³ý´ËȨÏÞ룬´ËÍâÈç¹û¾ßÓÐS_ISGIDȨÏÞµ«²»¾ßS_IXGRP룬Ôò¸ÃÎļþ»á±»Ç¿ÖÆËø¶¨£¬Îļþģʽ»á±£Áô¡£hw5LinuxÁªÃË
|
·µ»ØÖµ | ³É¹¦Ôò·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬´íÎóÔÒò´æÓÚerrno¡£hw5LinuxÁªÃË
|
´íÎó´úÂë | ²Î¿¼chmod£¨£©¡£hw5LinuxÁªÃË
|
·¶Àý | /* ½«/etc/passwd µÄËùÓÐÕߺÍ×é¶¼ÉèΪroot */hw5LinuxÁªÃË #include<sys/types.h>hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË chown(¡°/etc/passwd¡±,0,0);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË chroot£¨¸Ä±ä¸ùĿ¼£© |
Ïà¹Øº¯Êý | chdirhw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int chroot(const char * path);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | chroot()ÓÃÀ´¸Ä±ä¸ùĿ¼Ϊ²ÎÊýpath ËùÖ¸¶¨µÄĿ¼¡£Ö»Óг¬¼¶Óû§²ÅÔÊÐí¸Ä±ä¸ùĿ¼£¬×Ó½ø³Ì½«¼Ì³ÐеĸùĿ¼¡£hw5LinuxÁªÃË
|
·µ»ØÖµ | µ÷Óóɹ¦Ôò·µ»Ø0£¬Ê§°ÜÔò·µ-1£¬´íÎó´úÂë´æÓÚerrno¡£hw5LinuxÁªÃË
|
´íÎó´úÂë | EPERM ȨÏÞ²»×㣬ÎÞ·¨¸Ä±ä¸ùĿ¼¡£hw5LinuxÁªÃË EFAULT ²ÎÊýpathÖ¸Õ볬³ö¿É´æÈ¡ÄÚ´æ¿Õ¼ä¡£hw5LinuxÁªÃË ENAMETOOLONG ²ÎÊýpathÌ«³¤¡£hw5LinuxÁªÃË ENOTDIR ·¾¶ÖеÄĿ¼´æÔÚµ«È´·ÇÕæÕýµÄĿ¼¡£hw5LinuxÁªÃË EACCESS ´æÈ¡Ä¿Â¼Ê±±»¾Ü¾øhw5LinuxÁªÃË ENOMEM ºËÐÄÄÚ´æ²»×ã¡£hw5LinuxÁªÃË ELOOP ²ÎÊýpathÓйý¶à·ûºÅÁ¬½ÓÎÊÌâ¡£hw5LinuxÁªÃË EIO I/O ´æÈ¡´íÎó¡£hw5LinuxÁªÃË
|
·¶Àý | /* ½«¸ùĿ¼¸ÄΪ/tmp ,²¢½«¹¤×÷Ŀ¼Çл»ÖÁ/tmp */hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË chroot(¡°/tmp¡±);hw5LinuxÁªÃË chdir(¡°/¡±);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË closedir£¨¹Ø±ÕĿ¼£© |
Ïà¹Øº¯Êý | opendirhw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<sys/types.h>hw5LinuxÁªÃË #include<dirent.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int closedir(DIR *dir);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | closedir()¹Ø±Õ²ÎÊýdirËùÖ¸µÄĿ¼Á÷¡£hw5LinuxÁªÃË
|
·µ»ØÖµ | ¹Ø±Õ³É¹¦Ôò·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬´íÎóÔÒò´æÓÚerrno ÖС£hw5LinuxÁªÃË
|
´íÎó´úÂë | EBADF ²ÎÊýdirΪÎÞЧµÄĿ¼Á÷hw5LinuxÁªÃË
|
·¶Àý | ²Î¿¼readir()¡£hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË fchdir£¨¸Ä±äµ±Ç°µÄ¹¤×÷Ŀ¼£© |
Ïà¹Øº¯Êý | getcwd£¬chroothw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int fchdir(int fd);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | fchdir()ÓÃÀ´½«µ±Ç°µÄ¹¤×÷Ŀ¼¸Ä±ä³ÉÒÔ²ÎÊýfd ËùÖ¸µÄÎļþÃèÊö´Ê¡£hw5LinuxÁªÃË
|
·µ»ØÖµÖ´ | Ðгɹ¦Ôò·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬errnoΪ´íÎó´úÂë¡£hw5LinuxÁªÃË
|
¸½¼Ó˵Ã÷ | hw5LinuxÁªÃË
|
·¶Àý | #include<sys/types.h>hw5LinuxÁªÃË #include<sys/stat.h>hw5LinuxÁªÃË #include<fcntl.h>hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË int fd;hw5LinuxÁªÃË fd = open(¡°/tmp¡±,O_RDONLY);hw5LinuxÁªÃË fchdir(fd);hw5LinuxÁªÃË printf(¡°current working directory : %s n¡±,getcwd(NULL,NULL));hw5LinuxÁªÃË close(fd);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
Ö´ÐÐ | current working directory : /tmphw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË fchmod£¨¸Ä±äÎļþµÄȨÏÞ£© |
Ïà¹Øº¯Êý | chmod£¬stat£¬open£¬chownhw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<sys/types.h>hw5LinuxÁªÃË #include<sys/stat.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int fchmod(int fildes,mode_t mode);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | fchmod()»áÒÀ²ÎÊýmodeȨÏÞÀ´¸ü¸Ä²ÎÊýfildesËùÖ¸ÎļþµÄȨÏÞ¡£²ÎÊýfildesΪÒÑ´ò¿ªÎļþµÄÎļþÃèÊö´Ê¡£²ÎÊýmodeÇë²Î¿¼chmod£¨£©¡£hw5LinuxÁªÃË
|
·µ»ØÖµ | ȨÏ޸ıä³É¹¦Ôò·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬´íÎóÔÒò´æÓÚerrno¡£hw5LinuxÁªÃË
|
´íÎóÔÒò | EBADF ²ÎÊýfildesΪÎÞЧµÄÎļþÃèÊö´Ê¡£hw5LinuxÁªÃË EPERM ½ø³ÌµÄÓÐЧÓû§Ê¶±ðÂëÓëÓûÐÞ¸ÄȨÏÞµÄÎļþËùÓÐÕß²»Í¬£¬¶øÇÒÒ²²»¾ßrootȨÏÞ¡
LinuxÁªÃËÊÕ¼¯ÕûÀí ,תÌùÇë±êÃ÷ÔʼÁ´½Ó,ÈçÓÐÈκÎÒÉÎÊ»¶ÓÀ´±¾Õ¾LinuxÂÛ̳ÌÖÂÛ |
|
|
|
|