¡¾Îó²îͨ¸æ¡¿Linux CIFSÍâµØÌáȨÎó²î

Ðû²¼Ê±¼ä 2026-05-29

Ò»¡¢Îó²î¸ÅÊö



0529Îó²î¸ÅÊö.png


Linux CIFS¿Í»§¶ËÊÇLinux KernelÖÐÓÃÓÚ¹ÒÔØºÍ»á¼ûSMB/CIFSÍøÂçÎļþ¹²ÏíµÄÄÚºË×é¼þ £¬³£ÓÃÓÚ»á¼ûWindowsÎļþ¹²Ïí¡¢NAS¼°ÆóÒµÎļþ·þÎñÆ÷¡£cifs-utilsÊÇÆäÅäÌ×Óû§Ì¬¹¤¾ß¼¯ £¬Ìṩmount.cifs¡¢cifs.upcallµÈ³ÌÐò £¬ÓÃÓÚ´¦Öóͷ£CIFS¹ÒÔØ¡¢Kerberos/SPNEGOÈÏÖ¤¼°Ïà¹ØÃÜÔ¿ÇëÇó¡£


2026Äê5ÔÂ29ÈÕ £¬×ðÁú¿­¹ÙÍøÈë¿ÚÇå¾²Ó¦¼±ÏìÓ¦ÖÐÐÄ£¨VSRC£©¼à²âµ½Linux CIFSÍâµØÌáȨÎó²î¡£¸ÃÎó²îÔ´ÓÚÄں˲àδÑéÖ¤cifs.spnego keyÐÎòÊÇ·ñÀ´×Ô¿ÉÐÅCIFSÄÚºËÉÏÏÂÎÄ £¬µ¼ÖÂÍâµØµÍȨÏÞÓû§¿Éͨ¹ýrequest_keyαÔìcifs.spnegoÐÎò £¬´¥·¢cifs.upcallÒÔrootȨÏÞÔËÐÐ £¬²¢Ê¹ÓÃÊÜ¿Øpid¡¢uid¡¢creduid¡¢upcall_targetµÈ×Ö¶ÎÇл»ÖÁ¹¥»÷ÕßÃüÃû¿Õ¼ä £¬ÔÚȨÏÞϽµÇ°¼ÓÔØ¶ñÒâNSSÄ £¿é £¬ÊµÏÖroot´úÂëÖ´ÐС£ÀÖ³ÉʹÓúó¿ÉÍêÈ«¿ØÖÆÊÜÓ°ÏìÖ÷»ú £¬Ôì³ÉϵͳÉèÖá¢ÓªÒµÊý¾ÝºÍÕËºÅÆ¾Ö¤Ð¹Â¶»ò¸Ä¶¯¡£



¶þ¡¢Ó°Ïì¹æÄ£



Linux Kernel£ºÎ´ºÏÈë²¹¶¡3da1fdf4efbc490041eb4f836bf596201203f8f2µÄ°æ±¾

cifs-utils >= 6.14

¸ÃÎó²îʹÓû¹ÒÀÀµÒÔÏÂÌõ¼þͬʱ֪×㣺ϵͳװÖÃcifs-utils²¢±£´æÄ¬ÈÏcifs.spnego request-key¹æÔò£»CIFSÄÚºËÄ £¿é¿É¼ÓÔØ»òÒѱàÒë½øÄںˣ»ÔÊÐí·ÇÌØÈ¨Óû§½¨Éèuser namespaceºÍmount namespace£»SELinux¡¢AppArmorµÈÇå¾²Õ½ÂÔδ×è¶Ï¸ÃʹÓÃÁ´¡£²¿·Ö¿¯Ðаæ¿ÉÄÜͨ¹ýĬÈÏÇå¾²Õ½ÂÔ×è¶ÏPoC £¬µ«ÔÚÕ½ÂÔ·Å¿íºóÈÔ¿ÉÄÜÊÜÓ°Ïì¡£

 


Èý¡¢Çå¾²²½·¥



3.1 Éý¼¶°æ±¾


¹Ù·½ÒÑÐû²¼Äں˲àÐÞ¸´²¹¶¡ £¬ÒÔÐÞ¸´¸ÃÎó²î¡£¡£

ÐÞ¸´ÌύΪ3da1fdf4efbc£¨¡°smb: client: reject userspace cifs.spnego descriptions¡±£©¡£½¨ÒéÓû§¾¡¿ìÉý¼¶ÖÁ¿¯Ðа泧ÉÌÐû²¼µÄÇå¾²Äں˰汾 £¬»ò¸üÐÂÖÁÒѺÏÈë¸Ã²¹¶¡µÄLinux Kernel°æ±¾¡£¸Ã²¹¶¡ÔÚÄں˲àΪcifs.spnego keyÀàÐÍÔöÌíÐÎòÑéÖ¤Âß¼­ £¬½öÔÊÐíCIFSʹÓÃspnego_credÌᳫµÄÕýµ±ÐÎòͨ¹ýУÑé £¬´Ó¶ø×è¶ÏͨË×Óû§Î±Ôìcifs.spnego upcall²¢´¥·¢rootȨÏÞcifs.upcallµÄʹÓ÷¾¶ £¬Í¬Ê± £¬½¨ÒéÒ»Á¬¹Ø×¢cifs-utils¹Ù·½¼°¸÷Linux¿¯ÐаæÇ徲ͨ¸æ £¬ÊµÊ±¸üÐÂcifs-utilsÈí¼þ°ü¡£

ÏÂÔØÁ´½Ó£º

https://github.com/torvalds/linux/commit/3da1fdf4efbc490041eb4f836bf596201203f8f2/


3.2 ÔÝʱ²½·¥


ÈçÓªÒµ²»ÐèÒªSMB/CIFS¹ÒÔØ £¬Õ¥È¡CIFSÄÚºËÄ £¿é¼ÓÔØ £¬»òÐ¶ÔØcifs-utils¡£

Èç²»ÐèÒªKerberos CIFSÈÏÖ¤ £¬É¾³ý»òÁýÕÖĬÈÏcifs.spnego request-key¹æÔò £¬ÀýÈ磺

cat >/etc/request-key.d/cifs.spnego.conf <<'EOF'

create cifs.spnego * * /usr/sbin/keyctl negate %k 30 %S

EOF

½ûÓ÷ÇÌØÈ¨Óû§ÃüÃû¿Õ¼ä £¬½µµÍÍâµØµÍȨÏÞÓû§½á¹¹¸ôÀëÃüÃû¿Õ¼ä²¢ÓÕµ¼root¸¨Öú³ÌÐòÇл»µÄΣº¦¡£

¼á³ÖSELinux¡¢AppArmorµÈÇ¿ÖÆ»á¼û¿ØÖÆÕ½ÂÔ¿ªÆô £¬×èÖ¹·Å¿íÏà¹Øuser namespace¡¢mount namespace¼°NSSÄ £¿é¼ÓÔØÏÞÖÆ¡£

ÔöÇ¿request-key»Øµ÷Á´Â·Ç徲УÑé £¬×èÖ¹Óû§Ì¬helperÐÅÈÎδÂÄÀúÖ¤µÄpid¡¢uid¡¢creduid¡¢upcall_targetµÈ×ֶΡ£

¶Ôcifs.upcall¡¢request-key¡¢keyctl¡¢namespace½¨ÉèÐÐΪ¾ÙÐÐÉó¼ÆºÍ¸æ¾¯ £¬ÖØµã¹Ø×¢µÍȨÏÞÓû§Òì³£´¥·¢cifs.spnego upcallµÄÐÐΪ¡£

×èÖ¹ÔÚ¸ßȨÏÞ¸¨Öú³ÌÐòÖлùÓÚ¹¥»÷Õ߿ɿØÃüÃû¿Õ¼äÖ´ÐÐNSSÆÊÎö¡¢¶¯Ì¬¿â¼ÓÔØµÈÃô¸Ð²Ù×÷ £¬±ÜÃâÔÚȨÏÞϽµÇ°¼ÓÔØ²»¿ÉÐÅ´úÂë¡£


3.3 ͨÓý¨Òé


°´ÆÚ¸üÐÂϵͳ²¹¶¡ £¬ïÔ̭ϵͳÎó²î £¬ÌáÉý·þÎñÆ÷µÄÇå¾²ÐÔ¡£

ÔöǿϵͳºÍÍøÂçµÄ»á¼û¿ØÖÆ £¬Ð޸ķÀ»ðǽսÂÔ £¬¹Ø±Õ·ÇÐëÒªµÄÓ¦Óö˿ڻò·þÎñ £¬ïÔÌ­½«Î£ÏÕ·þÎñ£¨ÈçSSH¡¢RDPµÈ£©Ì»Â¶µ½¹«Íø £¬ïÔÌ­¹¥»÷Ãæ¡£

ʹÓÃÆóÒµ¼¶Çå¾²²úÆ· £¬ÌáÉýÆóÒµµÄÍøÂçÇå¾²ÐÔÄÜ¡£

ÔöǿϵͳÓû§ºÍȨÏÞ¹ÜÀí £¬ÆôÓöàÒòËØÈÏÖ¤»úÖÆºÍ×îСȨÏÞÔ­Ôò £¬Óû§ºÍÈí¼þȨÏÞÓ¦¼á³ÖÔÚ×îµÍÏÞ¶È¡£

ÆôÓÃÇ¿ÃÜÂëÕ½ÂÔ²¢ÉèÖÃΪ°´ÆÚÐ޸ġ£

 

3.4 ²Î¿¼Á´½Ó


https://heyitsas.im/posts/cifswitch/

https://seclists.org/oss-sec/2026/q2/717