ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. ![]() 1 ¸®´ª½º °èÁ¤ ½Ã½ºÅÛ
¸®´ª½º´Â ´ÙÁß »ç¿ëÀÚ ¿î¿µÃ¼Á¦´Ù. ÀÌ´Â µ¿½Ã¿¡ ¿©·¯»ç¶÷ÀÌ ÄÄÇ»ÅÍÀÇ ÀÚ¿øÀ» »ç¿ëÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. ±×·¯¹Ç·Î ¸®´ª½º ¿î¿µÃ¼Á¦´Â ¿©·¯»ç¶÷À» °ü¸®ÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. À̰ÍÀ» °èÁ¤ ½Ã½ºÅÛÀ̶ó°í ÇÑ´Ù. °èÁ¤À̶õ ÄÄÇ»ÅÍ ÀÚ¿ø¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â »ç¶÷µé¿¡ ´ëÇÑ Á¤º¸·Î ÀÌÇØÇÏ¸é µÉ °ÍÀÌ´Ù.
¾Æ´Ï´Ù. ¾ö¹ÐÈ÷ µûÁöÀÚ¸é, »ç¶÷À̶ó´Â Ç¥ÇöÀº À߸øµÈ°Í °°´Ù. ¿î¿µÃ¼Á¦ÀÇ °èÁ¤¿¡´Â ½Ã½ºÅÛ °èÁ¤°ú ÀÏ¹Ý »ç¿ëÀÚ °èÁ¤ Å©°Ô µÎ°¡Áö·Î ºÐ·ùÇÒ ¼ö Àִµ¥, »ç¶÷À̶óÇϸé ÀÏ¹Ý »ç¿ëÀÚ °èÁ¤¸¸À» °¡¸®Å°´Â °ÍÀ̱⠶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î »ç¶÷ ´ë½Å °´Ã¼¶ó°í Ç¥ÇöÇÏ´Â°Ô ¿ÇÀº °Í °°´Ù. ´Ù½Ã Á¤¸®ÇÏÀÚ. °èÁ¤À̶õ ÄÄÇ»ÅÍ ÀÚ¿ø¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â °´Ã¼¿¡ ´ëÇÑ Á¤º¸¸¦ ÀǹÌÇÑ´Ù. 2 °èÁ¤ Á¤º¸
°èÁ¤À̶ó´Â °ÍÀº ÄÄÇ»ÅÍ ÀÚ¿ø¿¡ Á¢±ÙÇϱâ À§ÇÑ °´Ã¼¶ó´Â °ÍÀ» ¾Ë°Ô µÇ¾ú´Ù. ±×·¸´Ù¸é, ÀÌµé °´Ã¼´Â °¢ °´Ã¼ÀÇ Æ¯Â¡À» ³ªÅ¸³»ÁÖ´Â Á¤º¸¸¦ °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù. À̰ÍÀ» °èÁ¤Á¤º¸¶ó°í ÇÏ´Ù. °èÁ¤Á¤º¸´Â ´ÙÀ½°ú °°Àº Á¤º¸µéÀ» Æ÷ÇÔÇϰí ÀÖÀ» °ÍÀÌ´Ù. °èÁ¤Àº À¯Àú¶ó°í ºÎ¸£±âµµ Çϸç, °èÁ¤Á¤º¸´Â À¯ÀúÁ¤º¸¿Í µ¿ÀÏÇÑ Àǹ̷Π»ç¿ëµÈ´Ù.
3 ½´ÆÛÀ¯Àú
ÄÄÇ»ÅÍ ½Ã½ºÅÛÀº ȸ»ç¿Í ¸Å¿ì ºñ½ÁÇÑ ¸éÀÌ ÀÖ´Ù. ȸ»çó·³ ÀÚ¿ø°ú °èÁ¤(»ç¶÷)ÀÌ ÀÖÀ¸¸ç, ±ÇÇÑÀÌ ºÎ¿©µÈ´Ù. ÀÔÃâÀԽà ÀÎÁõÀ» ¿ä±¸Çϱ⵵ ÇÑ´Ù.
ȸ»ç¿¡ CEO°¡ ÀÖ´Ù¸é, ¿î¿µÃ¼Á¦¿¡´Â ½´ÆÛÀ¯Àú°¡ ÀÖ´Ù. ½´ÆÛÀ¯Àú´Â ¹«¾ùÀ̵çÁö ÇÒ ¼ö ÀÖ´Â ¸·°ÇÑ ±ÇÇÑÀ» °¡Áø Ưº°ÇÑ À¯Àú¸¦ ĪÇÑ´Ù. ȸ»çÀÇ °æ¿ì CEO¶ó°í ÇÏ´õ¶óµµ, ±ÇÇÑÀ» Çà»çÇÔ¿¡ ÀÖ¾î¼ ¿©·¯°¡Áö Á¦¾àÀÌ ÀÖ´Â ¹Ý¸é, ½´ÆÛÀ¯Àú´Â ¸»±×´ë·Î ½´ÆÛ¸ÇÀÇ ´É·ÂÀ» °¡Áö°í ¸ðµç ´É·ÂÀ» Çà»çÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°Àº ¸í·ÉÇϳª·Î ¿î¿µÃ¼Á¦¸¦ ½Ï ³¯·Á¹ö¸± ¼öµµ ÀÖ´Ù. # rm -rf /
ÀüÅëÀûÀ¸·Î À¯´Ð½º¿¡¼ ½´ÆÛÀ¯Àú´Â root¶ó´Â °èÁ¤À̸§ÀÌ ºÎ¿©µÈ´Ù. ¸®´ª½º ¿ª½Ã À¯´Ð½ºÀÇ ÀÌ·¯ÇÑ ÀüÅëÀ» µû¸£°í ÀÖ´Ù. ½´ÆÛÀ¯Àú´Â ÆÄÀÏÀ» ¸¸µé°í »èÁ¦Çϰí, ÆÄƼ¼ÇÀ» ³ª´©°í, À¯Àú¸¦ Ãß°¡ÇÏ°í ±ÇÇÑÀ» Á¶Á¤ÇÏ´Â µîÀÇ ¸ðµç ¾÷¹«¸¦ ó¸®ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» °¡Áö°Ô µÈ´Ù. ±× ±ÇÇÑÀÌ ¿ö³« ¸·°ÇÑ °ü°è·Î, ÃÖ±ÙÀÇ ¸î¸î ¿î¿µÃ¼Á¦µéÀº root ¶óµµ ±× ±ÇÇÑÀ» Á¦ÇѽÃŰ´Â °æ¿ì°¡ ÀÖ´Ù. 4 À¯Àú »ý¼º °úÁ¤
¾Æ¸¶µµ ¿©·¯ºÐÀº adduser(1) ¸í·ÉÀ» ÀÌ¿ëÇØ¼ À¯Àú¸¦ »ý¼ºÇÏ´Â ¹ýÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ¿©±â¿¡¼´Â ½ÇÁ¦ À¯Àú¸¦ »ý¼ºÇϱâ À§Çؼ ¾î¶² °úÁ¤À» °ÅÃÄ¾ß ÇÏ´ÂÁö¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. 4.1 À¯Àú ÆÄÀϵé
¸®´ª½º¿¡¼ ¸ðµç Á¤º¸´Â ÆÄÀÏÀ» ÅëÇØ¼ °ü¸®µÈ´Ù´Â °ÍÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. À¯ÀúÁ¤º¸ ¿ª½Ã ¸¶Âù°¡Áö À̸ç, À¯Àú¿Í °ü·ÃµÈ ÆÄÀϵéÀº /etc ¹Ø¿¡ Á¸ÀçÇÑ´Ù. ÀüÅëÀûÀ¸·Î À¯´Ð½º ½Ã½ºÅÛ¿¡¼ /etc µð·ºÅ丮´Â °¢Á¾ ¼³Á¤ÆÄÀÏÀ» ÀúÀåÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëµÇ¾îÁö°í ÀÖ´Ù. À¯Àú °ü·Ã ÁÖ¿ä ÆÄÀϵéÀº ´ÙÀ½°ú °°´Ù.
4.2 passwd ÆÄÀÏ
À¯ÀúÀÇ ±âº»ÀûÀÎ Á¤º¸´Â /etc/passwdÆÄÀÏ¿¡ ÀúÀåµÈ´Ù. À¯ÀúÁ¤º¸´Â printable ASCII ¹®ÀÚ·Î ÀÔ·ÂÀÌ µÇ±â ¶§¹®¿¡ vi¿Í °°Àº ¿¡µðÅ͸¦ ÀÌ¿ëÇØ¼ ³»¿ëÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº passwd ÆÄÀÏ ³»¿ëÀÇ ÀϺκÐÀÌ´Ù. # cat /etc/passwd ... yundream:x:1000:1000:yundream,,,:/home/yundream:/bin/bash mysql:x:110:121:MySQL Server,,,:/var/lib/mysql:/bin/false mt-daapd:x:114:65534::/var/cache/mt-daapd:/bin/true testyun:x:1004:1004:,,,:/home/testyun:/bin/bash myyun:x:115:65534::/home/myyun:/bin/false ...:¸¦ ±¸ºÐÀÚ·Î 7°³ÀÇ Çʵå·Î ÀÌ·ç¾îÁø °£´ÜÇÑ ±¸Á¶¸¦ Çϰí ÀÖ´Ù. °¢ Çʵ尡 Æ÷ÇÔÇÏ´Â ³»¿ëÀº ´ÙÀ½°ú °°´Ù. À¯Àú:ÆÐ½º¿öµå:UID:GID:GECOS:µð·ºÅ丮:½©
±×·±µ¥, ÀÌ»óÇÑ Á¡ÀÌ ÀÖ´Ù. ÆÐ½º¿öµå ¿µ¿ªÀÌ x·Î µÇ¾îÀÖ´Ù. ÆÐ½º¿öµå°¡ ¸ù¶¥ xÀϸ®´Â ¾øÀ»Å×°í !!? 4.3 shadow password
passwd ÆÄÀÏ¿¡ »ç¿ëÀÚ ÆÐ½º¿öµå°¡ ¾ø´Ù¸é, ¾î¶»°Ô À¯ÀúÀ̸§°ú ÆÐ½º¿öµå·Î ÀÎÁõÀÌ °¡´ÉÇÒ °ÇÁö°¡ ¹®Á¦°¡ µÈ´Ù. ¿ì¼± passwd ÆÄÀÏÀÇ ¹®Á¦Á¡¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ´ÙÀ½Àº passwd ÆÄÀÏÀÇ ±ÇÇÑÀÌ´Ù. # ls -al /etc/passwd -rw-r--r-- 1 root root 1522 2008-01-09 23:34 /etc/passwd´©±¸µçÁö ÀÐÀ» ¼ö ÀÖ°Ô µÇ¾îÀÖ´Ù. ´Ü¹æÇâ ¾ÏÈ£È µÇ¾î ÀÖ±â´Â ÇÏÁö¸¸, ¾ÏÈ£ÈµÈ ÀÏ·ÃÀÇ ¹®ÀÚ¸¦ ¾òÀ» ¼ö ÀÖ´Ù¸é, ÆÐ½º¿öµå °Ë»ç ÇÁ·Î±×·¥À» ¸¸µé¾î¼ ÆÐ½º¿öµå¸¦ ã¾Æ³¾ ¼ö ÀÖ´Ù. ÀÌ´Â º¸¾È»ó ½É°¢ÇÑ ¹®Á¦¶ó°í ÇÒ ¼ö ÀÖ´Ù.
±×·¡¼ shadow password¶ó´Â ¹æ½ÄÀ» µµÀÔÇß´Ù. /etc/passwd ¿¡´Â ÆÐ½º¿öµå¸¦ Á¦¿ÜÇÑ Á¤º¸¸¸À» ÀúÀåÇϰí, ½ÇÁ¦ ÆÐ½º¿öµå´Â ¿ÀÁ÷ root °èÁ¤¸¸ ÀÐÀ» ¼ö ÀÖ´Â /etc/shadowÆÄÀÏ¿¡ ÀúÀåÇÏ´Â °ÍÀ¸·Î passwd ÆÄÀÏÀÇ º¸¾È¹®Á¦Á¡À» ÇØ°áÇÑ ¹æ½ÄÀÌ´Ù. /etc/shadow ÆÄÀÏÀÇ ±ÇÇÑÀ» È®ÀÎÇØ º¸¸é, ´ÜÁö root °èÁ¤¸¸ ÀÐÀ» ¼ö ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ÀÏ¹Ý À¯Àú°¡ ÀÐÀ» ¼ö ¾ø±â ¶§¹®¿¡, ÆÐ½º¿öµå º¸¾ÈÀ» ´Þ¼ºÇÏ°Ô µÈ´Ù. #ls -al /etc/shadow -rw-r----- 1 root shadow 996 2008-01-09 23:34 /etc/shadow»ç½Ç »ç¿ëÀÚ°¡ ÄÄÇ»ÅÍ ½Ã½ºÅÛ¿¡ ·Î±×ÀÎ ÇÒ°ÍÀÎÁö ¾ÈÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÏ´Â ±ÇÇÑÀº root »ç¿ëÀÚ¸¸ °¡Áö°í Àֱ⠶§¹®¿¡, ´Ù¸¥ À¯Àú°¡ ÀÐÀ» ÇÊ¿ä´Â ¾øÀ» °ÍÀÌ´Ù.
´Ü ÀÏ¹Ý »ç¿ëÀÚµµ ÆÐ½º¿öµå¸¦ Á¦¿ÜÇÑ ´Ù¸¥ À¯ÀúÀÇ Á¤º¸¸¦ ¾Ë¾Æ¾ßÇÒ Çʿ䰡 Àֱ⠶§¹®¿¡, /etc/passwd ÆÄÀÏÀ» ³²°ÜµÎ°Ô µÈ´Ù. À¯ÀúÁ¤º¸´Â /etc/passwd ÆÐ½º¿öµå Á¤º¸´Â /etc/shadow ¸¦ ÅëÇØ¼ À¯ÁöµÈ´Ù. ´ÙÀ½Àº shadow ÆÄÀÏ¿¡ ÀúÀåµÈ Á¤º¸µéÀÌ´Ù. yundream:$1$1S6/q4Ed$7en1qZdeOVofyEjqaofy/:13663:0:99999:7¿ª½Ã :¸¦ ±¸ºÐÀÚ·Î ÇØ¼ Çʵ带 ±¸ºÐÇϰí ÀÖ´Ù. °¢ ÇʵåÀÇ Á¤º¸´Â getspend(3) ¸Þ´º¾ó ¹®¼¸¦ Âü°íÇϱ⠹ٶõ´Ù.
ÆÐ½º¿öµå´Â crypt(3)¿Í md5¸¦ ÀÌ¿ëÇØ¼ ´Ü¹æÇâÀ¸·Î ¾ÏÈ£È µÈ´Ù. 5 »ç¿ëÀÚ Á¤º¸ ¾ò¾î¿À±â
±×·³ ½ÇÁ¦ »ç¿ëÀÚ Á¤º¸¸¦ ¾ò¾î¿À´Â ¹æ¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ¿ì¼± »ç¿ëÀÚ Á¤º¸´Â /etc/passwd ÆÄÀÏÀÇ ³»¿ëÀ» Àоî¿Í¼ ±¸ºÐÀÚ :·Î Çʵ带 Âɰ³°í, À̰͵éÀ» ±¸Á¶Ã¼¿¡ Áý¾î ³Ö´Â ¹æ¹ýÀ» »ý°¢Çغ¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
±×·¯³ª À§ÀÇ ¹æ¹ýÀº ³Ê¹« ±ÍÂú´Ù. ´ÙÇàÈ÷µµ ¸®´ª½º´Â /etc/passwd ÆÄÀÏ¿¡¼ »ç¿ëÀÚ Á¤º¸¸¦ ¾ò¾î¿À±â À§ÇÑ Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼öÀÎ getpwentÇÔ¼ö¸¦ Á¦°øÇϰí ÀÖ´Ù. #include <pwd.h> #include <sys/types.h> struct passwd *getpwent(void);getpwent ÇÔ¼ö´Â /etc/passwd ¿¡¼ ÆÐ½º¿öµå Á¤º¸¸¦ Àоîµé¿©¼ passwd ±¸Á¶Ã¼¿¡ ÀúÀåÇϰí, À̰Ϳ¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ µÇµ¹·ÁÁØ´Ù. passwd ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù. struct passwd
{
char *pw_name; /* À¯Àú À̸§ */
char *pw_passwd; /* À¯Àú ÆÐ½º¿öµå */
uid_t pw_uid; /* À¯Àú ID (UID) */
gid_t pw_gid; /* ±×·ì ID (GID) */
char *pw_gecos; /* ½ÇÁ¦ À̸§ */
char *pw_dir; /* Ȩ µð·ºÅ丮 */
char *pw_shell; /* »ç¿ëÀÚ ½© */
};
´ÙÀ½Àº getpwent()ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ À¯ÀúÁ¤º¸¸¦ Àоî¿À´Â °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù.
6 »ç¿ëÀÚ ÆÐ½º¿öµå ¾ò¾î¿À±â
¸¸¾à À¯ÀúÀÎÁõÀ» À§ÇÑ ÇÁ·Î±×·¥À» ¸¸µé±â¸¦ ¿øÇÑ´Ù¸é, ÆÐ½º¿öµå±îÁö °¡Á®¿À´Â ÇÁ·Î±×·¥À» ¸¸µé¾î¾ß ÇÒ °ÍÀÌ´Ù. ÆÐ½º¿öµå´Â /etc/shadow ¿¡ ÀúÀåµÇ¾î ÀÖÀ¸¸ç, getspent() ÇÔ¼ö¸¦ ÀÌ¿ëÇϸé, °£´ÜÇÏ°Ô ÆÐ½º¿öµå Á¤º¸¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Ù. ´Ü shadow ÆÄÀÏÀº root À¯Àú¸¸ ÀÐÀ» ¼ö ÀÖ´Ù. #include <shadow.h> struct spwd *getspent(); struct spwd *getspnam(char *name); }À̵é ÇÔ¼ö¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº getspend(3) ¹®¼¸¦ È®ÀÎÇØ º¸±â ¹Ù¶õ´Ù. Ä£ÀýÇϰԵµ ¿¹Á¦±îÁö Æ÷ÇÔÇϰí ÀÖ´Ù. 7 »ç¿ëÀÚ ·Î±×ÀÎ ±â·Ï
¸®´ª½º ¿î¿µÃ¼Á¦ ´ÙÁß»ç¿ëÀÚ ¿î¿µÃ¼Á¦ÀÌ´Ï ¸¸Å, ÇöÀç ½Ã½ºÅÛ¿¡ ¾î¶² »ç¿ëÀÚ°¡ µé¾î¿ÍÀÖ´ÂÁö¿¡ ´ëÇÑ Á¤º¸°¡ Áß¿äÇÏ°Ô Ãë±ÞµÈ´Ù. ÀÌ·¯ÇÑ ·Î±×ÀÎ Á¤º¸´Â »ç¿ëÀÚ Á¡°Ë, ƯÈ÷ º¸¾ÈÁ¡°ËÀ» À§Çؼ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¸®´ª½º ¿î¿µÃ¼Á¦´Â w(1)¶ó´Â ½Ã½ºÅÛ ¸í·ÉÀ» Á¦°øÇϴµ¥, À̰ÍÀ» ÀÌ¿ëÇϸé, ÇöÀç ·Î±×ÀÎµÈ »ç¿ëÀÚÀÇ Á¤º¸¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Ù. # w 23:27:41 up 35 days, 12:51, 1 user, load average: 0.13, 0.42, 0.65 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/4 202.150.176.150 11:27pm 0.00s 0.05s 0.00s w yundream pts/1 :0 22:59 6.00s 0.34s 0.16s w3m·Î±×ÀÎµÈ »ç¿ëÀÚÀÇ IP ÁÖ¼Ò, ·Î±×ÀÎÇÑ ½Ã°£, ÀÚ¿øÀÇ »ç¿ëÀ², ÇöÀç ¾î¶² ÇÁ·Î±×·¥À» ½ÇÇàÁßÀÎÁö¿¡ ´ëÇÑ Á¤º¸¸¦ º¸¿©ÁØ´Ù.
ÀÌ·¯ÇÑ Á¤º¸µéÀº utmp¶ó´Â ¸®´ª½º °íÀ¯ÀÇ ·Î±×ÀÎ ±â·Ï½Ã½ºÅÛÀ» ÀÌ¿ëÇØ¼ ¾ò¾î¿Ã ¼ö ÀÖ´Ù. ¸®´ª½º´Â utmp Á¤º¸¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï getutent¶ó´Â ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. utmp Á¤º¸´Â /var/run/utmp ÆÄÀÏ¿¡ ±â·ÏÀÌ µÈ´Ù. #include <utmp.h> struct utmp *getutent(void);getuent ´Â ÀоîµéÀÎ Á¤º¸¸¦ utmp ±¸Á¶Ã¼¿¡ ä¿ö¼ µÇµ¹·ÁÁØ´Ù. utmp ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù. struct utmp
{
short ut_type; /* type of login */
pid_t ut_pid; /* pid of login process */
char ut_line[UT_LINESIZE]; /* device name of tty - "/dev/" */
char ut_id[4]; /* init id or abbrev. ttyname */
char ut_user[UT_NAMESIZE]; /* user name */
char ut_host[UT_HOSTSIZE]; /* hostname for remote login */
struct exit_status ut_exit; /* The exit status of a
process marked as DEAD_PROCESS. *
long ut_session; /* session ID, used for
struct timeval ut_tv; /* time entry was made. */
int32_t ut_addr_v6[4]; /* IP address of remote host. */
char pad[20]; /* Reserved for future use. */
};
w ¸í·ÉÀ» ÀÌ¿ëÇØ¼ ¾ò¾î¿Â Á¤º¸µéÀ» ¸ðµÎ Æ÷ÇÔÇϰí ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½Àº utmp¸¦ ÀÌ¿ëÇØ¼, ·Î±×ÀÎÇÑ »ç¿ëÀÚÀÇ Á¤º¸¸¦ ¾ò¾î¿À´Â ÇÁ·Î±×·¥ÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº myw.c ·Î Çß´Ù. ÀÌÇØÇϴµ¥ Å« ¾î·Á¿òÀº ¾øÀ» °ÍÀÌ´Ù. #include <unistd.h>
#include <utmp.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <fcntl.h>
#include <string.h>
int get_current_pid(int login_pid);
char *get_current_procname(int proc_num);
int main(int argc, char **argv)
{
struct utmp *utmpfp;
struct utmp *myutmp;
char *tty_name = NULL;
char *host_ip;
char now_local_time[50];
time_t the_time;
struct tm *tm_ptr;
setutent();
// getutent()¸¦ ÀÌ¿ëÇØ¼ utmpÁ¤º¸¸¦ ¾ò¾î¿Â´Ù.
while ((utmpfp = getutent()) != NULL)
{
// ut_time Àº À¯´Ð½º ½Ã°£À¸·Î ÀúÀåµÇ´Âµ¥, localtime ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼
// ¿ì¸®°¡ ½±°Ô ÀÐÀ» ¼ö ÀÖ´Â ½Ã°£À¸·Î º¯°æÇß´Ù.
the_time = utmpfp->ut_time;
tm_ptr = localtime(&the_time);
sprintf(now_local_time, "%d/%02d/%02d %02d:%02d",
tm_ptr->tm_year+1900, tm_ptr->tm_mon+1,
tm_ptr->tm_mday, tm_ptr->tm_hour,
tm_ptr->tm_min);
host_ip = utmpfp->ut_host;
if (strlen(host_ip) < 1)
host_ip = "-";
if (utmpfp->ut_type == USER_PROCESS)
{
printf("%-12s %-8s %-12s %s %s\n",
utmpfp->ut_user,
utmpfp->ut_line,
host_ip,
now_local_time,
get_current_procname(get_current_pid(utmpfp->ut_pid)));
}
}
return 1;
}
int get_current_pid(int login_pid)
{
int fd;
char buf[255];
char stat_file[25];
int field_num = 7;
int i, j;
int buf_index;
char current_pid[11];
memset(buf, '\0', 255);
sprintf(stat_file, "/proc/%d/stat", login_pid);
if ((fd = open(stat_file, O_RDONLY)) == -1)
{
printf("error\n");
return -1;
}
read(fd, buf, 255);
j = 0;
for (i = 0, buf_index=0; i < 255; i++)
{
if (buf[i] == ' ')
{
j++;
}
else
{
if (j == field_num)
{
current_pid[buf_index] = buf[i];
buf_index++;
}
if (j > field_num)
break;
}
}
close(fd);
return atoi(current_pid);
}
char *get_current_procname(int proc_num)
{
char *buf;
char proc_file[256];
buf = (char *)malloc(256);
memset(buf, '\0', 256);
memset(proc_file, '\0', 256);
sprintf(proc_file, "/proc/%d/exe", proc_num);
readlink(proc_file, buf, 256);
return buf;
}
´ÙÀ½Àº ½ÇÇà½ÃŲ °á°ú´Ù.$ ./myw yundream :0 - 2008/01/17 22:59 yundream pts/1 :0 2008/01/17 22:59 yundream pts/2 :0 2008/01/17 23:17 8 ȯ°æº¯¼ö
ȯ°æº¯¼ö´Â ÇØ´ç ÇÁ·Î¼¼½º¿¡ Àü¿ªÀûÀ¸·Î ¼³Á¤µÈ º¯¼öµé·Î, ÁÖ·Î ÇÁ·Î±×·¥ ½ÇÇàȯ°æÀ» ¼³Á¤Çϱâ À§Çؼ »ç¿ëÇÑ´Ù. ¿ø·¡ÀÇ ¸ñÀûÀº ÇÁ·Î±×·¥ ½ÇÇàȯ°æÀ» ¼³Á¤Çϱâ À§ÇÔÀÌÁö¸¸, ƯÈ÷ ½©¿¡¼ »ç¿ëµÉ °æ¿ì »ç¿ëÀÚ °èÁ¤ÀÇ È¯°æ¼³Á¤°ú ¹ÐÁ¢ÇÑ °ü·ÃÀÌ Àֱ⠶§¹®¿¡, À̹øÀå¿¡¼ ¼³¸íÀ» ÇÏ°í ³Ñ¾î°¡·Á°í ÇÑ´Ù.
ȯ°æº¯¼ö´Â ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÏ´Â º¯¼ö¿Í ¸¶Âù°¡Áö·Î key=valueÀÇ Çü½ÄÀ» °¡Áø´Ù.
½©¿¡¼´Â env¸í·ÉÀ» ÀÌ¿ëÇØ¼ ¼³Á¤µÈ ¸ðµç ȯ°æº¯¼öÀÇ °ªÀ» Àоî¿Ã ¼ö ÀÖ´Ù. # env SSH_AGENT_PID=6510 KDE_MULTIHEAD=false MALLOC_CHECK_=2 SHELL=/bin/bash TERM=xterm ... ... LANG=ko_KR.UTF-8 GNOME_KEYRING_PID=6453 KDE_SESSION_UID=1000 GDM_LANG=ko_KR.UTF-8 KDEDIRS=/usr/lib/kde4 GDMSESSION=kde4 HISTCONTROL=ignoreboth SHLVL=2¶ÇÇÑ echo ¸¦ ÀÌ¿ëÇØ¼ ȯ°æº¯¼öÀÇ °ªÀ» Àоî¿Ã ¼öµµ ÀÖ´Ù. # echo $LANG ko_KR.UTF-8
»ç¿ëÀÚ Å͹̳Î, ¾ð¾î, KDE¿Í GNOMEµîÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ »ç¿ëÇÒ ¿©·¯°¡Áö ȯ°æº¯¼ö°¡ Á¤ÀǵǾî ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.
ȯ°æº¯¼ö´Â ÇÁ·Î¼¼½º°¡ ÀÚ½ÄÇÁ·Î¼¼½º¸¦ ¸¸µé ¶§, ÀÚ½ÄÇÁ·Î¼¼½º¿¡°Ô ±×´ë·Î Àü´ÞµÈ´Ù. ¿¹¸¦µé¾î¼ ½©¿¡¼ w3mÀ̶ó´Â ÇÁ·Î±×·¥À» ½ÇÇà½ÃŲ´Ù¸é, ȯ°æº¯¼ö LANG°¡ w3m¿¡ ±×´ë·Î º¹»çµÇ¾î¼ Àü´ÞÀÌ µÈ´Ù. ±×·¯¸é w3mÇÁ·Î±×·¥Àº ¹®ÀÚ¿À» ¸¸³µÀ»¶§, ¾î¶»°Ô ÀÎÄÚµù ½ÃÄÑ¾ß ÇÒÁö¸¦ ¾Ë ¼ö ÀÖ°Ô µÈ´Ù. À§ÀÇ °æ¿ì UTF-8·Î ÀÎÄÚµù/µðÄÚµùÀ» ÇÏ°Ô µÉ °ÍÀÌ´Ù. 8.1 Áß¿ä ȯ°æ º¯¼öµé
»ç¿ëÀÚ°¡ ·Î±×ÀÎÀ» ÇÏ¸é ±âº»ÀûÀΠȯ°æº¯¼öµéÀÌ ¼³Á¤ÀÌ µÇ´Âµ¥, ±×Áß Áß¿äÇÑ È¯°æº¯¼öµéÀ» Á¤¸®ÇØ º¸¾Ò´Ù.
8.2 ȯ°æº¯¼ö °ª Àбâ
¸®´ª½º¿¡¼´Â getenv(3)ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼, ¿øÇϴ ȯ°æº¯¼öÀÇ °ªÀ» Àоî¿Ã ¼ö ÀÖ´Ù. #include <stdlib.h> char *getenv(const char *name);
#include <stdlib.h> #include <stdio.h> int main(int argc, char **argv) { char *value = NULL; value = getenv("LANG"); printf("LANG is %s\n", value); return 0; }
ȯ°æº¯¼ö´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇà½Ã ½ºÅÿµ¿ª¿¡ º¹»ç°¡ µÇ´Âµ¥, ±×·¯¹Ç·Î C¿¡¼´Â Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¼ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ¹æ¹ýÀ» Á¦½ÃÇϰí ÀÖ´Ù. ȯ°æº¯¼ö°¡ ÀúÀåµÈ ½ºÅÃÀÇ ÁÖ¼Ò´Â main ÇÔ¼öÀÇ 3¹øÂ° ÀÎÀÚ¸¦ ÅëÇØ¼ °¡Á®¿Ã ¼ö ÀÖ´Ù.
#include <stdio.h> int main(int argc, char **argv, char **env) { while(*env != NULL) { printf("%s\n", *env); *env++; } }½©ÀÇ env¸¦ ½ÇÇà½ÃŲ°Í°ú µ¿ÀÏÇÑ °á°ú¸¦ º¸¿©ÁÜÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 8.3 ȯ°æº¯¼ö °ª ¼³Á¤
setenv(3)¸¦ ÀÌ¿ëÇϸé, ȯ°æº¯¼öÀÇ °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. À̶§ º¯°æµÈ ȯ°æº¯¼öÀÇ °ªÀº ÀڽŰú ÀÚ½ÅÀÇ ÀÚ½ÄÇÁ·Î¼¼½º¿¡¸¸ À¯È¿ÇÏ´Ù. ȯ°æº¯¼ö´Â ÀÚ½ÄÇÁ·Î¼¼½º¿¡°Ô º¹»çµÉ »ÓÀÌÁö, °øÀ¯Çؼ »ç¿ëÇÏ´Â°Ô ¾Æ´Ï±â ¶§¹®ÀÌ´Ù.
#include <stdlib.h> int setenv(const char *name, const char *value, int overwrite);
#include <unistd.h> int main() { setenv("TEST", "YUNDREAM", 1); execl("/bin/bash", "bash", NULL); }setenv¸¦ ÀÌ¿ëÇØ¼ TEST¶ó´Â ȯ°æº¯¼ö¸¦ Á¤ÀÇ Çß´Ù. ±×´ÙÀ½ execlÀ» ÀÌ¿ëÇØ¼ »õ·Î¿î bash ½©À» ½ÇÇàÇß´Ù. ÀÌÁ¦ echo $TEST ¸¦ ÀÌ¿ëÇØ¼ TEST¶ó´Â ȯ°æº¯¼ö°¡ ¼³Á¤µÇ¾úÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº setenv·Î ÇϰڴÙ. $ echo $TEST $ echo $SHLVL 2 $ ./setenv $ echo $TEST YUNDREAM $ echo $SHLVL 3 $ exit exit $ echo $TEST $ echo $SHLVL 2ȯ°æº¯¼ö°¡ °øÀ¯µÇ´Â°Ô ¾Æ´Ñ º¹»çµÇ´Â °ÍÀ̶ó´Â°É È®½ÇÈ÷ Å×½ºÆ® ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¶ÇÇÑ SHLVLÀ» ÀÌ¿ëÇØ¼ ½©ÀÇ ±íÀ̸¦ È®ÀÎÇÒ ¼öµµ ÀÖ´Ù. |
|
|||||||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|