swtpm_ioctl(8) دستورات مدیریت سیستم swtpm_ioctl(8)

swtpm_ioctl - ابزاری برای ارسال دستورات کنترلی به swtpm

swtpm_ioctl [COMMAND] [<device>]

دستور swtpm_ioctl یک ابزار کلاینت برای کنترل شبیه‌سازهای نرم‌افزاری TPM مانند swtpm_cuse و swtpm پیاده‌سازی می‌کند؛ از جمله مقداردهی اولیه و خاموش کردن آن‌ها. پس از انجام مقداردهی اولیه، می‌توان دستورات TPM را به آن ارسال کرد.

نکته: متغیر محیطی SWTPM_IOCTL_BUFFERSIZE می‌تواند برای تعیین اندازه بافر جهت استفاده در انتقال داده‌های وضعیت (state blob) تنظیم شود. اگر این متغیر تنظیم نشود، از رابط ioctl() برای انتقال وضعیت استفاده می‌شود. این متغیر محیطی در درجه اول برای اهداف آزمایشی کاربرد دارد.

دستورات زیر پشتیبانی می‌شوند:

استفاده از دستگاه مشخص‌شده. مسیر کامل به دستگاه کاراکتری (character device) باید ارائه شود، مانند /dev/vtpm-200.

این گزینه می‌تواند به جای ارائه دستگاه به عنوان آخرین پارامتر استفاده شود.

اتصال به سرور و پورت مشخص‌شده؛ اگر سروری مشخص نشود، از 127.0.0.1 استفاده می‌شود؛ اگر پورت مشخص نشود، پورت پیش‌فرض 6545 استفاده می‌شود.
اتصال به مسیر مشخص‌شده در سوکت یونیکس (UnixIO).
دریافت فلگ‌های قابلیت (capability flags) که نشان‌دهنده دستورات پشتیبانی‌شده هستند.
ارسال سیگنال مقداردهی اولیه سخت‌افزاری به swtpm_cuse/swtpm. وضعیت ناپایدار (volatile state) که قبلاً توسط TPM نوشته شده است خوانده می‌شود و فایل به طور خودکار حذف خواهد شد.
آغاز فرآیند خاموش‌سازی آرام (graceful shutdown).
متوقف کردن swtpm_cuse/swtpm. این کار آن را خاموش نمی‌کند. دستور -i می‌تواند دوباره به آن ارسال شود. پس از توقف، امکان بارگذاری داده‌های وضعیت TPM (stateblobs) در TPM با استفاده از دستور --load نیز وجود دارد.
دریافت بیت tpmEstablished.
بازنشانی بیت tpmEstablished با استفاده از سطح دسترسی محلی (locality) مشخص‌شده. تنها سطوح دسترسی ۳ و ۴ کار می‌کنند. این عملیات سطح دسترسی محلی را که قبلاً با استفاده از گزینه -l تنظیم شده بود، به طور دائم تغییر نخواهد داد.
تنظیم سطح دسترسی محلی (locality) برای دستورات بعدی TPM.
درخواست از TPM برای نوشتن وضعیت ناپایدار (volatile state) در یک فایل. هنگام اجرای یک TPM_Init (-i) وضعیت TPM خوانده خواهد شد و TPM می‌تواند بدون نیاز به مقداردهی اولیه بیشتر، عملیات خود را از سر بگیرد.
لغو دستور در حال اجرای TPM.
بازنشانی و گسترش ثبات PCR 17 با هش داده‌های مشخص‌شده. اگر data تنها شامل تک‌نویسه '-' باشد، تمام داده‌ها از ورودی استاندارد (stdin) خوانده می‌شوند.
ذخیره داده وضعیت TPM (state blob) در فایل مشخص‌شده. نام‌های معتبر برای داده وضعیت TPM عبارتند از: 'permanent' (ماندگار)، 'volatile' (ناپایدار)، و 'savestate' (وضعیت ذخیره‌شده).

توجه داشته باشید که این دستور در هر زمانی قابل اجرا است. با این حال، برای دریافت آخرین وضعیت ناپایدار، دستور -v باید بلافاصله قبل از اجرای این دستور اجرا شده باشد. داده وضعیت savestate تنها در صورتی بازگردانده می‌شود که دستور TPM_SaveState در TPM اجرا شده باشد (TPM 1.2).

بارگذاری داده وضعیت TPM مشخص‌شده از فایل داده‌شده. نام‌های معتبر برای داده وضعیت TPM عبارتند از: 'permanent'، 'volatile'، و 'savestate'.

توجه داشته باشید که این دستور تنها می‌تواند روی یک TPM خاموش‌شده اجرا شود. برای راه‌اندازی بعدی TPM با وضعیت بارگذاری‌شده، باید دستور -i صادر شود.

دریافت فلگ‌های پیکربندی که برای مثال مشخص می‌کنند کدام کلیدها (کلید رمزنگاری فایل یا مهاجرت) توسط TPM استفاده می‌شوند.
دریافت اطلاعات درباره پیاده‌سازی TPM و پیکربندی آن در قالب JSON. مقادیر زیر می‌توانند ارائه شوند. تمام مقادیر را می‌توان با هم OR (یا جمع) کرد تا اطلاعات مربوط به همه آن‌ها در یک پرس‌وجو به دست آید:
  • 0x1: اطلاعات درباره مشخصاتی که پیاده‌سازی TPM از آن پیروی کرده است
  • 0x2: اطلاعات درباره سازنده، مدل و نسخه TPM
  • 0x4: فهرست اندازه‌های کلید پشتیبانی‌شده برای RSA و Camellia
  • 0x8: توصیف الگوریتم‌های پشتیبانی‌شده و فعال
  • 0x10: توصیف دستورات پشتیبانی‌شده و فعال
  • 0x20: توصیف نمایه (پروفایل) فعال
  • 0x40: فهرست تمامی نمایه‌های (پروفایل‌های) داخلی
  • 0x80: توصیف ویژگی‌های پشتیبانی‌شده
قفل کردن فضای ذخیره‌سازی و تلاش مجدد به تعداد دفعات مشخص‌شده با تأخیر ۱۰ میلی‌ثانیه‌ای در بین آن‌ها. قفل کردن فضای ذخیره‌سازی ممکن است پس از انتقال وضعیت TPM به بیرون و آزاد شدن قفل فضای ذخیره‌سازی هنگام دریافت داده‌های 'savestate' لازم باشد تا اکنون فضای ذخیره‌سازی دوباره قفل گردد.

راه‌اندازی swtpm روی پورت ۱۰۰۰۰ برای پورت کنترل و شبیه‌سازی TPM 1.2:

#> swtpm socket --tpmstate dir=/tmp/myvtpm1 --log level=4 --ctrl type=tcp,port=10000 --server type=tcp,port=10001 --flags not-need-init

دریافت اطلاعات درباره پیاده‌سازی TPM در قالب JSON:

#> swtpm_ioctl --tcp :10000 --info 1
{"TPMSpecification":{"family":"1.2","level":2,"revision":116}}
#> swtpm_ioctl --tcp :10000 --info 2
{"TPMAttributes":{"manufacturer":"id:00001014","version":"id:00740001","model":"swtpm"}}

خاموش کردن swtpm:

#> swtpm_ioctl --tcp :10000 -s

swtpm_cuse

2026-03-26 swtpm