Проблема только bash
имеет PROMPT_COMMAND
. Попробуйте это вместо этого:
PS1='\[$(if (($?)); then tput setaf 1; else tput setaf 2; fi)\]'\
'[\u@\h \w]\['"$(tput sgr0)"'\]'
¹ Протест: Я не протестировал это на ksh
, но это избегает PROMPT_COMMAND
и работы в bash
.
² tput
использует Вашу систему terminfo
базы данных. Это обычно более портативно и удобно в сопровождении, чем escape-последовательности жесткого кодирования, обеспечил, terminfo установлен правильно.
Может иметь место, что Ваш коллега, при создании учетной записи, создал корневой каталог "вручную", который привел к нему принадлежавший root
. Попытайтесь выполнить следующее как root
:
chown -R username ~username
chgrp -R $(id -gn username) ~username
Где username
название проблематичной учетной записи.
Править
Если это оказывается Вашей проблемой, для предотвращения этого случая в будущем, Вы хотите добавить -m
переключитесь на useradd
командная строка раньше создавала учетную запись пользователя. Это гарантирует, что выбранный корневой каталог пользователя создается, если он не существует. Это создает корневой каталог с "правильным" владением и полномочия, таким образом, Вы не сталкиваетесь с этим видом проблемы.
Редактирование 2
chgrp
команда, добавленная выше, изменит владение группы всего корневого каталога username
кому: username
основная группа. В зависимости от Вашей среды это не может быть точно, что Вы хотите, и необходимо будет возможно изменить владение группы определенных подкаталогов в корневом каталоге "вручную", таким образом, устанавливая владение другой группы для различных подкаталогов. Это обычно - не случай для персональных компьютеров, но так как Вы упомянули "коллегу", я предполагаю, что мы говорим о сетевой офисной среде, в этом случае владение группы важно для общих каталогов.
Нет действительно никакого метода для того, чтобы сделать это в Unix систематическим способом, как Вы просите. Если Вы используете sudo
можно создать что-то как, Вы спрашиваете о, но это будет абсолютно искусственным и очень ограничивающим в том, как полный список это может обеспечить. В sudo
можно создать группы команд и затем предоставить пользователю (или группы пользователей) доступ к этим группам команд.
# /etc/sudoers
someuser ALL=/sbin/service, /sbin/chkconfig
Можно затем использовать команду sudo -l
как someuser для наблюдения, что управляет, чтобы им позволили работать.
$ sudo -l
...
User someuser may run the following commands on this host:
(ALL) ALL
(root) /sbin/service, (root) /sbin/chkconfig, (root)
Как Joseph R. предполагает, вероятное объяснение состоит в том, что корневой каталог не был создан с правильным владением. В 99% случаев проблемами доступа является просто вопрос получения владения и набора битов полномочий правильно, с помощью chown
и chmod
команды, соответственно. (В нескольких экзотических случаях другие факторы играют роль, такие как SELinux, AppArmor, файловая система ACLs или учетное отображение сетевой файловой системы. Поскольку я сказал, тем не менее, что такие ситуации очень вряд ли будут относиться к Вам.)
Для ответа на остальную часть вопроса … да, Вы видите для себя, как это перестало работать. Как корень, можно временно стать другим пользователем, и можно сделать это, не зная, что пароль пользователя — просто работает /bin/su - username
. Это выполнит оболочку с как другой пользователь, как будто Вы вошли в систему с помощью того имени пользователя и пароля. Когда Вы сделаны с той оболочкой, exit
это, и Вы будете ронять в свою исходную корневую оболочку.