আমি কেন মূল ছাড়াই "স্ক্রিনটি সমাপ্ত হচ্ছে" পাব?


23

আমি ফেডোরা ১৯-এ স্ক্রিন ইনস্টল করেছি SS উদাহরণস্বরূপ, আমি প্রবেশ করি যদি screenএকটি নতুন টার্মিনাল এমুলেটর শুরু হয় এবং কমান্ডের জন্য অপেক্ষা করে। আমি এটি বিচ্ছিন্ন করতে পারি ইত্যাদি However যাইহোক আমি যখন স্ট্যান্ডার্ড ব্যবহারকারী হিসাবে এসএসএইচ এর মাধ্যমে দূরবর্তীভাবে লগইন করি যখন আমি একই কাজ করার চেষ্টা করি তখন কমান্ডটি অবিলম্বে বন্ধ হয়ে যায়। আমি দেখছি শুধুমাত্র বার্তা [screen is terminating]

কারও কি এরই মধ্যে সমস্যা রয়েছে? এটি কি খারাপ অনুমতি সম্পর্কিত?

হালনাগাদ:

$ strace -e trace=file screen
execve("/usr/bin/screen", ["screen"], [/* 23 vars */]) = 0
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libutempter.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libcrypt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libpam.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libfreebl3.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/UTF-8/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
access("/home/steam/.nethackrc", F_OK)  = -1 ENOENT (No such file or directory)
readlink("/proc/self/fd/0", "/dev/pts/0", 4095) = 10
stat("/dev/pts/0", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
lstat("/dev/pts/0", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
open("/var/run/utmp", O_RDONLY)         = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
open("/etc/shadow", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
readlink("/proc/self/fd/0", "/dev/pts/0", 4095) = 10
stat("/dev/pts/0", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
stat("/dev/pts/0", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
lstat("/dev/pts/0", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
stat("/var/run/screen", {st_mode=S_IFDIR|0775, st_size=60, ...}) = 0
Directory '/var/run/screen' must have mode 777.
+++ exited with 1 +++

আমি অনুমতিগুলি 77 77 change এ পরিবর্তন করার চেষ্টা করেছি তবে তারপরে যখন আমি কার্যকর করি তখন screenআমি পাই:

ডিরেক্টরি '/ var / রান / স্ক্রিন' অবশ্যই মোড 775 থাকতে হবে।

অতএব, আমি আমার পরিবর্তনগুলি ফিরে পেয়েছি।


হুকুম কী?
ew white

সহজতমটি: "স্ক্রিন"। আমি শেল্টার.টিভি

আপনি কি কোনও ভিপিএস বা হোস্ট করা সার্ভারে চান্সে?
ew white

এটি একটি হোস্ট করা সার্ভার

strace -e trace=file screenএটি ফাইল অ্যাক্সেসে ব্যর্থ হয়েছে কিনা তা পরীক্ষা করতে। বা tmuxওয়ার্ক-এভার হিসাবে ব্যবহার করে, এটি works a এর পরিবর্তে ^ b ব্যবহার ব্যতীত একই কাজ করে।
ইমানুয়েল

উত্তর:


5

"অবশ্যই মোড 777" এবং "অবশ্যই মোড 775 থাকা উচিত" এর মধ্যে ফ্লিপ-ফ্লপিংয়ের কারণে হয় strace

screenসাধারণত একটি সেটুইড বা সেটজিড প্রোগ্রাম। এটি কার্যকর করার সময় এটি অতিরিক্ত সুযোগ-সুবিধা অর্জন করে, যা সকেট ফাইল তৈরি করতে এবং / অথবা utmp পরিবর্তন করতে ব্যবহৃত হয়।

যখন একটি প্রক্রিয়া সনাক্ত করা হচ্ছে, সেটুইড এবং সেটজিড অক্ষম করা হয়। স্বল্প সুবিধাপ্রাপ্ত ব্যবহারকারী দ্বারা নিয়ন্ত্রিত ট্রেসিং প্রক্রিয়াটি ট্রেস করা প্রক্রিয়াটি গ্রহণ করতে পারে তাই মূল ব্যবহারকারীকে অত্যধিক শক্তি না দেওয়া এটিকে অতিরিক্ত সুযোগ ছাড়াই চালানো উচিত।

screen এটি নির্ধারিত সুবিধাগুলি, সেটগিড সুবিধাগুলি, বা কোনওটি নিয়ে পরিচালিত হচ্ছে কিনা তা সনাক্ত করে এবং সেই অনুযায়ী ডিরেক্টরি অনুমতিগুলির প্রত্যাশাকে সামঞ্জস্য করে।

সুতরাং এটি এমন এক শ্রেণির সমস্যা তৈরি করে যা সহজেই ডিবাগ করা যায় না strace

তবে আপনি যদি শিকড় হন তবে একটি কার্যকারিতা আছে! যদি ট্রেসিং প্রক্রিয়াটি রুট হিসাবে চলমান থাকে, তবে ট্রেস করা প্রক্রিয়াটি সাধারণত বিশেষাধিকার পেতে পারে। সুতরাং আপনি এখানে কি:

  1. 2 টি নতুন টার্মিনাল খুলুন
  2. প্রথম টার্মিনালে, রুট হিসাবে দূরবর্তী মেশিনে লগ ইন করুন
  3. দ্বিতীয় টার্মিনালে, রিমোট মেশিনে সাধারণ ব্যবহারকারী হিসাবে লগ ইন করুন
  4. psদ্বিতীয় টার্মিনালে সাধারণ ব্যবহারকারীর শেল প্রক্রিয়াটির পিআইডি পেতে ব্যবহার করুন
  5. প্রথম টার্মিনালে, চালান strace -f -p SHELLPID
  6. দ্বিতীয় টার্মিনালে, পর্দা চালান এবং এটি ব্যর্থ দেখুন
  7. প্রথম টার্মিনালে, আপনার কাছে এখন স্ট্রেস লগ রয়েছে যা আপনার সত্যিকারের ভুল তা খুঁজে বের করতে হবে।

straceকমান্ডের মূল সংযোজন হ'ল -fবিকল্প, যা এটি শিশু প্রক্রিয়াগুলি সনাক্ত করতে বলে। আপনি এটা পর্দা যে শেল প্রক্রিয়া আপনার সাথে নির্দিষ্ট সন্তান হতে হবে ট্রেস প্রয়োজন -p

আমি যেমন হিসাবে -ffআউটপুট ফাইল ব্যবহার করতে এবং নির্দিষ্ট করতে চাই-o

strace -ff -o /tmp/screentrace -p SHELLPID

যা প্রতিটি শিশু প্রক্রিয়াটির জন্য একটি পৃথক আউটপুট ফাইল তৈরি করবে। পরে আপনি তাদের সঙ্গে পড়া less /tmp/screentrace*এবং ফলাফল সাধারণত ক্লিনার আপনি একটি একক ব্যবহার কি পেতে চেয়ে -f

হালনাগাদ

এখন যেহেতু আমি স্ট্রেস আউটপুটটি দেখেছি, ঠিক কী ভুল হয়েছে তা আমি জানি না, তবে এই লাইনটি ট্রেসের মধ্যে সবচেয়ে অবাক করা বিষয়:

chown("/dev/pts/2", 1002, 5)            = -1 EPERM (Operation not permitted)

কয়েক লাইন আগে, এটি একটি pty তৈরি করেছিল, যা TIOCGPTN2 নম্বর হয়ে প্রকাশিত হয়েছিল ।

open("/dev/ptmx", O_RDWR)               = 5
...
ioctl(5, TIOCGPTN, [2])                 = 0
stat("/dev/pts/2", {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 2), ...}) = 0

তবে এটি তা ছোঁড়াতে অক্ষম ছিল। আমি জানি না কেন সেই দাগ কেন ব্যর্থ হবে, তবে ছোটাছুটি ব্যর্থতা কেন পর্দা ছেড়ে দিয়েছে তা একটি প্রশংসনীয় কারণ দেয়। -vস্ট্রেস অপশনগুলিতে যোগ করে এবং কারা প্রবেশের মালিক তা দেখার statপরে TIOCGPTNআপনি আরও কিছু তথ্য পেতে পারেন /dev/pts/


বিস্তারিত পদ্ধতির জন্য আপনাকে ধন্যবাদ। আমি স্ট্রেসের মাধ্যমে উত্পন্ন আউটপুটটি দেখার চেষ্টা করেছি তবে আমি কী ভুল তা বুঝতে পারি না। স্ট্র্যাস দ্বারা উত্পাদিত তিনটি ফাইলের সামগ্রীর সাথে পরকালের লিঙ্কটি রয়েছে: পেস্টবিন. com/ raw.php? i= aeqDwTBX যে কোনও ধারণাকে স্বাগত জানানো হয় :)
লরেন্ট

2

এই বাগের সম্ভাব্য কারণগুলির কারণে - ভুল সেলিনাক্স নীতি, তবে রেডহ্যাট বাগট্র্যাকার অনুসারে এই ধরনের ত্রুটিগুলি ফেডোরা 17/18 এ স্থির করা হয়েছিল।

হিসাবে কার্যসংক্রান্ত আপনি পরিবর্তনশীল পরিবর্তন করতে পারেন SCREENDIRআপনি ~/.bashrcভালো কিছু করার জন্য $HOME/.screen


আমি চেষ্টা করেছি কিন্তু এটি সমস্যার সমাধান করে না।
লরেন্ট

1

আমি যখন এই ত্রুটি বার্তার মুখোমুখি হই। নিম্নলিখিতগুলির সাথে আমার অনুমতিগুলি সামঞ্জস্য করতে হয়েছিল:

chmod 2775 /usr/bin/screen

এবং এটি আমার জন্য সমস্যাটি সমাধান করেছে। সঠিক অ্যাক্সেস অনুমতিগুলির জন্য 2 টি খুব গুরুত্বপূর্ণ।

আপনার SID, SGID, স্টিকি বিট, এসিএল এবং কীভাবে তারা অ্যাক্সেসকে প্রভাবিত করে সে সম্পর্কে আরও পড়তে হবে।


u + s কাজ করে। এটি দুর্দান্ত নয় তবে আমি এই মুহূর্তে অন্যান্য সমাধান দেখতে পাচ্ছি না।
অ্যান্টি রাইতসেলা

0

স্ক্রিন কমান্ড ইতিমধ্যে চলছিল। সুতরাং আমি এটি বন্ধ করে দিয়ে আদেশটি পুনরায় টাইপ করেছি। হ্যাঁ এটি অন্যদের মতো খুব ভাল রেজোলিউশন নয় তবে এটি করতে এটি কম সময় নেয়।

কেবল পিএস করুন এবং পিডটি সন্ধান করুন, পিআইডি মেরুন এবং আবার স্ক্রিন কমান্ডটি টাইপ করে এগিয়ে যান।

আপনি যদি একাধিক স্ক্রিন কমান্ড চালাচ্ছেন তবে নিশ্চিত হয়ে নিন যে আপনি আপনার টার্মিনালের সাথে সম্পর্কিত সঠিক প্রক্রিয়াটি শেষ করেছেন।


0

আমি / etc / fstab এবং রিবুটে নিম্নলিখিত লাইনে মন্তব্য করার পরে এই সমস্যার সমাধান পেয়েছি:

devpts         /dev/pts        devpts  defaults        0       0

0

নিশ্চিত করুন screenযে অন্য কোনও ডিভাইসটি ব্যবহার করছে না

এটি /superuser/97844/how-can-i-determine- কি-process-has-a-file-open-in-linux- এর মাধ্যমে অর্জন করা যায় :

sudo lsof /dev/ttyS0

এবং তারপরে সেই প্রক্রিয়াটি মেরে ফেলুন যদি তা হয়।

কিছু কারণে, এই শর্তাধীন, sudo screenএখনও ডিভাইস অ্যাক্সেস করতে পারে, কিন্তু তারপরে সেই সংযোগটি অক্ষরগুলি মিস করবে, যা অন্যজন গ্রাস করে screen

ব্যবহারকারী ফাইলটি পড়তে এবং লেখার অনুমতি পেয়েছেন তা নিশ্চিত করুন

উদাহরণস্বরূপ উবুন্টুতে আপনি ব্যবহারকারীকে এই dialoutগ্রুপে যুক্ত করতে চান : /ubuntu//a/133244/52975


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.