Как изменить uid xenforo

Как сменить ID у пользователя?

25517


Sergey Miroshnichenko


  • #3

Как сменить ID у пользователя?

Через объединение пользователей это можно сделать. Как вариант.
1565592350650.png
Может не совсем то, что нужно, потому что так не получится например выбрать те ID, для которых не существует пользователей. Но если просто стоит задача поменять ID, то можно создать пользователя-назначения, и к нему объединить пользователя, ID которого нужно сменить.

  • #4

Допустим ID 2 освободился и сообщений у пользователя нет. А у этого пользователя ID 15. И как сменить? Ну явно через PMA PHPMyAdmin

25517


  • #5

Жил-был hirowatch.
Жил, не тужил.
Вдруг, у него выросла третья рука.
Но это ему не мешало ^^.

Но однажды тёмной-тёмной ночью. Пришёл злой какер.
Резким рывком он оторвал руку у hirowatch, и пришил их бродячей собаке.

Вывод: нет, БЛЯТЬ, нельзя так поменять. В этом нет никакого смысла.

Hope


  • #6

Ответ общего развития: читайте правила форума и приводите название темы к информативному виду.

Последнее редактирование: 12 Авг 2019

Hope


  • #7

По сабжу: I’d пользователя менять не стоит, этого не предусмотрено движком.

  • #8

Хорошо. Спасибо и учту. Можно закрыть тему

Captain


  • Девиант
  • #9

Вообще изменить можно без проблем, но вот записи в сторонних плагинах я уверен, что остались.
Обязательно нужно изменять в таблицах:
xf_user
xf_user_profile
xf_user_privacy
xf_user_authenticate или сбросить потом пароль
xf_user_option
И главное изменить в этих основных таблицах, вроде ничего не забыл. Ну изменив в этих таблицах, будет с другим id

Изменения не тривиально, требуется выполниться всего один запрос например в phpMyAdmin.

UPDATE `xf_user` SET `username` = 'vitok' WHERE `xf_user`.`user_id` = 1;

`username` = ‘vitok’ — тут вы указываете конечно вариант который вам нужен и на всем форуме имя старого супер администратора изменится на новое, при этом не потребуется изменять ID в конфигурационном файле.

$config['superAdmins'] = '1';

`user_id` = 1 — ID меняем, если вы до этого уже меняли супер администратора путем создания нового и указанием нового ID в конфигурационном файле.
Ну а теперь дополнение, думалось, что все так просто будет, а нет, для полного завершения нужно выполнить еще немного запросов, совсем немного.

UPDATE xf_post SET username = REPLACE(username, 'vit', 'vitok') WHERE `xf_post`.`user_id` = 1;
UPDATE xf_conversation_master SET username = REPLACE(username, 'vit', 'vitok') WHERE `xf_conversation_master`.`user_id` = 1;
UPDATE xf_conversation_message SET username = REPLACE(username, 'vit', 'vitok') WHERE `xf_conversation_message`.`user_id` = 1;
UPDATE xf_conversation_user SET last_message_username = REPLACE(last_message_username, 'vit', 'vitok') WHERE `xf_conversation_user`.`last_message_user_id` = 1;
UPDATE xf_conversation_master SET last_message_username = REPLACE(last_message_username, 'vit', 'vitok') WHERE `xf_conversation_master`.`last_message_user_id` = 1;
UPDATE xf_forum SET last_post_username = REPLACE(last_post_username, 'vit', 'vitok') WHERE `xf_forum`.`last_post_user_id` = 1;
UPDATE xf_profile_post SET username = REPLACE(username, 'vit', 'vitok') WHERE `xf_profile_post`.`user_id` = 1;
UPDATE xf_resource SET username = REPLACE(username, 'vit', 'vitok') WHERE `xf_resource`.`user_id` = 1;
UPDATE xf_thread SET username = REPLACE(username, 'vit', 'vitok') WHERE `xf_thread`.`user_id` = 1;
UPDATE xf_thread SET last_post_username = REPLACE(last_post_username, 'vit', 'vitok') WHERE `xf_thread`.`last_post_user_id` = 1;
UPDATE xf_user_alert SET username = REPLACE(username, 'vit', 'vitok') WHERE `xf_user_alert`.`user_id` = 1;
UPDATE xf_deletion_log SET delete_username = REPLACE(delete_username, 'vit', 'vitok') WHERE `xf_deletion_log`.`delete_user_id` = 1;
UPDATE xf_news_feed SET username = REPLACE(username, 'vit', 'vitok') WHERE `xf_news_feed`.`user_id` = 1;
UPDATE xf_moderator_log SET content_username = REPLACE(content_username, 'vit', 'vitok') WHERE `xf_moderator_log`.`content_user_id` = 1;
UPDATE xf_spam_cleaner_log SET applying_username = REPLACE(applying_username, 'vit', 'vitok') WHERE `xf_spam_cleaner_log`.`applying_user_id` = 1;
UPDATE xf_report SET last_modified_username = REPLACE(last_modified_username, 'vit', 'vitok') WHERE `xf_report`.`last_modified_user_id` = 1;
UPDATE xf_report_comment SET username = REPLACE(username, 'vit', 'vitok') WHERE `xf_report_comment`.`user_id` = 1;

Где vit — старое имя админа, а vitok — новое имя админа. После выполнения такого порядка все должно быть хорошо, я так думаю :mosking:, нет точно будет все хорошо, но количество запросов может зависит от количество плагинов.

🐧 Как (правильно) изменить UID и GID пользователя / группы в Linux

На чтение 2 мин Опубликовано 27.07.2020

Изменение UID и GID пользователя может показаться тривиальной задачей для большинства системных администраторов.

Но это не так тривиально и требует гораздо больше изменений в бэкэнде.

В этом руководстве мы отметили точные шаги для изменения UID и GID пользователя «user01».

Username: user01
Group: group01
Existing UID: 800
Existing GID: 700
New UID: 900
New GID: 600

Содержание

  1. Предпосылки
  2. Изменение UID и GID пользователя и группы
  3. Предостережения

Предпосылки

1. Убедитесь, что пользователь, для которого необходимо изменить UID и GID, в данный момент не имеет активных процессов, запущенных в системе.

Чтобы проверить то же самое, используйте команду «ps».

Например:

# ps -ef | grep user01
# ps -ef | grep 800

Примечание: в команде «ps -ef» отображаются UID. Так что убедитесь, что вы грепаете поя UID, а также имени пользователя.

2. Сделайте резервную копию важных файлов, в которых хранится информация, связанная с UID и GID. т.е. /etc/passwd и /etc/group.

# cp -p /etc/passwd /etc/passwd.bkp
# cp -p /etc/group /etc/group.bkp

3. Проверьте существующие UID и GID пользователя с помощью команды «id»:

# id user01
uid=800(user01) gid=700(group01) groups=700(group01)

Изменение UID и GID пользователя и группы


После того, как вы сделали необходимые резервные копии, мы можем изменить UID и GID.

1. Сначала измените GID группы, group01:

# groupmod -g 600 group01

2. Затем также измените UID и GID пользователя user01:

# usermod -u 900 -g 600 user01

3. Проверьте новый UID и GID пользователя:

# id user01
uid=900(user01) gid=600(group01) groups=600(group01)

Предостережения


1. Если в группе «group01» несколько пользователей, после изменения GID группы вам придется изменить других пользователей, а также user01, как показано выше.

2. После того, как вы изменили UID и GID, вам также придется изменить права доступа к файлам, принадлежащим пользователю/группе.

Но команда chown также сбрасывает SETUID и SETGID файлов, поэтому вам потребуется вручную изменить разрешения этих файлов позже.

Чтобы найти такие файлы:

# find / -uid 900 -perm /6000 -ls
# find / -gid 900 -perm /6000 -ls

3. Чтобы найти файлы, принадлежащие user01 и group01, и изменить их права:

# find / -uid 800 -exec chown -v -h 900 '{}' ;
# find / -gid 700 -exec chgrp -v 600 '{}' ;

Опция -h также используется для изменения прав символических ссылок.

Пожалуйста, не спамьте и никого не оскорбляйте.

Это поле для комментариев, а не спамбокс.

Рекламные ссылки не индексируются!

reuid.png - image uploaded to Picamatic
Встала тут передо мной задача изменить UID и GID пользователя и правильно изменить владельца всех файлов.
Дело в том, что я работаю за двумя компьютерами попеременно, и файлы mysql лежат у меня на флешке. Получилось так, что id пользователя mysql на обоих компах отличается и мускл не может получить доступ к своим файлам. Присваивать права 0666 скучно, и по этому поводу я решил научиться грамотно изменять uid пользователя :)

Казалось бы, всё просто, но есть два нюанса которые необходимо учесть:

  1. UID и GID не всегда одинаковы для пользователя и его группы
  2. Не все файлы принадлежат одновременно юзеру mysql и группе mysql: файлы для chown нужно искать отдельно

Статья написана для тех, кто ещё не делал ничего подобного а также кто хочет научиться продвинутому использованию команды find и узнать что такое xargs.

Изменение идентификатора пользователя и группы

Первый шаг — самый простой и о нём немало написано в интернетах. В первых двух строчках мы сохраняем полезные данные в переменных: имя, новый id и старый id для пользователя и для группы. Это нам пригодится в дальнейшем при поске файлов, а также упростит повторное использование скрипта. Всё указывается отдельно ввиду первого нюанса: UID и GID могут отличаться.
Дальше — тривиальное изменение идентификаторов стандартными командами Linux:

user=mysql new_uid=600 old_uid=$(id -u $user)
group=mysql new_gid=600 old_gid=$(id -g $user)
sudo usermod -u $new_uid $user
sudo groupmod -g $new_gid $group
 

Поиск осиротевших файлов

Если сейчас посмотреть на одну из папок с файлами mysql (например, ls -lah /var/lib/mysql) то мы увидим, что файлы принадлежат подозрительному пользователю 112 и подозрительной группе 127. Такие файлы мы и будем искать с тем, чтобы удочерить их :)

Первое, что приходит в голову, это найти все файлы принадлежащие пользователю $old_uid или группе $old_group, и собрать все найденные файлы (при помощи xargs) в качества аргументов команде chown $user:$group. find выполняется от root чтобы гарантировать что он сможет забраться во все даже самые сурово защищённые папки и найдёт всё что от него требуется. xargs собирает строки из pipe и передаёт их команде, указанной в аргументе (chown). Замечу, что xargs может выполнить команду несколько раз во избежание слишком длинной строки аргументов.
Например, так:

sudo find / -user $old_uid -or -group $old_gid -print0 | xargs -0 sudo chown $user:$group 

Сразу обращу внимание на флаги find -print0 и xargs -0: это такая борьба с возможными пробелами в именах файлов. Такие файлы могут быть восприняты chown‘ом как два разных. Первый флаг заставляет find выводить каждый найденный файл с нулём в конце (символ конца строки в Си), а второй флаг сообщает xargs что ему нужно отделять файлы друг от друга не по переводу строки, а по этому самому нулю, что гарантирует верную обработку даже самых хитрых имён файлов :)

Однако такой способ не принесёт желаемого результата: некоторые файлы, владельцем которых был ‘mysql:root’ станут принадлежать ‘mysql:mysql’. А мы ведь договорились сделать всё предельно правильно :) Следовательно, поиск по user и по group надо вести отдельно.

Можно выполнить подряд две команды find:

sudo find / -user $old_uid  -print0 | xargs -0 sudo chown $user
sudo find / -group $old_gid -print0 | xargs -0 sudo chown :$group 

и это уже будет намного ближе к истине, но тогда find‘у придётся дважды шуршать по всему жёсткому диску.

Есть способ заставить команду find выполнить для нас две операции параллельно, сократив количество чтений с диска ровно в два раза. Для этого используем группировку условий и команд find круглыми скобками (не забывая их экранировать: иначе за них возьмётся шелл) и пославив между ними оператор «запятая»: тогда обе скобки будут выполняться для каждого файла.
Мы составим два отдельных файла: в первом будет список файлов с -user=$old_uid, а во втором — с -group=$old_gid, и обрабатывать эти файлы мы будет раздельно. Условие поиска теперь разделено на две выполняющися для каждого файла скобки, и в случае выполниния условия команда -fprint0 записывает в соответствующий временный файл путь к найденному осиротевшему файлу.

chownlist=$(tempfile) chgrplist=$(tempfile)
sudo find / 
( -user $old_uid -fprint0 «$chownlist« ) , ( -group $old_gid -fprint0 «$chgrplist« )

После недолгого поиска все файлы будут найдены.

Последний момент поиска: на форумах очень часто задаётся вопрос как исключить папки из списка find так, чтобы он туда вообще не залезал. Это делается при помощи сочетания условия -path "folder" и команды -prune, которая запрещает find залезать в папки, попавшие в условие. Мы исключим из поиска папки ‘/proc’ и ‘/sys’.
Для этого в условия добавим ещё одну группировку скобками, отделив их от уже существующих скобок оператором -or. Этот оператор выполнит первое условие, а второе — только если не сработало первое. Так, find проверит не попалась ли ему исключённая из листинга директория (в которой он не будет искать), и если нет — будет составлять списки файлов.
Делается это так:

chownlist=$(tempfile) chgrplist=$(tempfile)
sudo find / 
( ( -path «/proc» -or -path «/sys» ) -prune ) -or  # исключение папок
( ( -user $old_uid -fprint0 «$chownlist« ) , ( -group $old_gid -fprint0 «$chgrplist« ) )

Также в исключения можно внести путь к диску с бекапом (он ведь у вас есть, верно? ;), подмонтированные сетевые шары и прочее.

Финиш

Всё, списки составлены. Теперь для каждого списка файлов выполняем chown. Напомню, что мы старались полностью сохранить владельца файлов с учётом возможно отличающихся user и group.

cat «$chownlist« | xargs -0 sudo chown $user
cat «$chgrplist« | xargs -0 sudo chown :$group
sudo rm «$chownlist« «$chgrplist« # Не забываем подчистить за собой

Проверка

Напоследок, проверим, не осталось ли где-нибудь файлов с неизвестными UID или GID. Для этого существует два полезных условия find -nouser и find -nogroup. Полезно также уточнить поиск, исключив пресловутые ‘/proc’ и ‘/sys’ из поиска:

sudo find /  -nouser -or -nogroup -print

Если всё было сделано правильно (и в системе не водилось осиротевших файлов) — команда не должна ничего вывести.

Полный код скрипта

Надеюсь, статья окажется полезной. Рекомендую ближе ознакомиться с синтаксисом этой команды: она ведь намного мощнее чем вы думаете :)
Напоследок приведу полный код скрипта для смены UID&GID пользователя и его файлов:

#=== Настройки
user=mysql new_uid=600 old_uid=$(id -u $user) # имя, новый и старый UID
group=mysql new_gid=600 old_gid=$(id -g $user) # имя, новый и старый GID
#=== Смена UID & GID
sudo usermod -u $new_uid $user
sudo groupmod -g $new_gid $group
#=== Поиск файлов
chownlist=$(tempfile) chgrplist=$(tempfile) sudo find / 
( ( -path «/proc» -or -path «/sys» ) -prune ) -or 
( ( -user $old_uid -fprint0 «$chownlist« ) , ( -group $old_gid -fprint0 «$chgrplist« ) )
#=== chown и чистка
cat «$chownlist« | xargs -0 sudo chown $user
cat «$chgrplist« | xargs -0 sudo chown :$group
sudo rm «$chownlist« «$chgrplist«

Понравилась статья? Поделить с друзьями:
  • Как изменить uefi на legacy acer
  • Как изменить ttl на маке
  • Как изменить uefi на ahci
  • Как изменить ttl на макбуке
  • Как изменить uefi загрузчик windows