sghk1> id
uid=0(root) gid=0(root)

sghk1> ls -l /etc/shadow
-r--------   1 root     sys         4045 Aug 24 15:52 /etc/shadow

sghk1> ls -l /usr/bin/passwd
-r-sr-sr-x   1 root     sys        26764 Jan 11  2012 /usr/bin/passwd

Когда я пытаюсь vi отредактировать и файл, и:wq, он подскажет ниже

"/etc/shadow" File is read only

Почему при вызове /usr /bin /passwd файл доступен для записи / изменения исполняемым файлом, но когда я пытаюсь вручную отредактировать его как root, я не могу

3 ответа3

2

В качестве пользователя root вы можете делать "все что угодно", но такие программы, как vi будут проверять вас. vim (который вы, вероятно, используете) позволит вам записывать в файл только для чтения, используя :w! (восклицательный знак).

Программа passwd предназначена для обновления /etc/shadow и будет использовать любую комбинацию chmod , write и т.д., Которая необходима, не беспокоясь об этом.

Как обычный пользователь (не работающий с root), конечно, vi (m) не может обновить /etc/shadow . Программа /usr/bin/passwd работает, потому что она использует функцию setuid ("s", когда вы делаете ls -l /usr/bin/passwd).

2

Файл, на который вы ссылаетесь (/etc/shadow), не показывает флаг записи в своих разрешениях. vi или vim по умолчанию не будут записывать в файл, у которого нет флага записи, даже в качестве пользователя root или владельца файла, если вы не переопределите его поведение восклицательным знаком.

Вы можете использовать :w! для записи в файл, игнорируя тот факт, что флаг записи отсутствует.

0

Посмотрите разрешения, которые у вас есть для файла, root является владельцем, а сам root имеет только разрешение на чтение. Чтобы изменить его, вы должны сделать «chmod u+w /etc /shadow» как root, и он даст "себе" разрешение на запись.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .